gpt4 book ai didi

ios - UIApplicationDelegate openURL 与多个文件

转载 作者:行者123 更新时间:2023-12-03 21:00:10 27 4
gpt4 key购买 nike

我试图让我的应用程序同时打开多个文件 - 例如选择多个带有文件的应用程序,然后按“在[我的应用程序]中打开”。当我尝试这个时,确实 UIApplicationDelegate openURL 在我的应用程序中触发,但我只得到一个 URL。有没有办法获取所有文件,而不仅仅是其中一个?

最佳答案

您的观察是正确的,通过 openURL 调用您只会得到一个文件。
此问题的替代解决方案是实现操作扩展。

  • 在 Action 扩展中,您可以迭代所有文件项,
  • 在应用程序的共享空间中创建文件副本。
  • 并创建一个带有逗号分隔文件 URL 的字符串
  • 并使用您的应用程序的自定义 URL 将此字符串对象(base64 编码或任何其他加密格式)发送到您的应用程序。例如:app://filesaction/
  • 在您的应用程序中,您可以解码/解密从操作扩展接收到的字符串(URL 的最后一个组成部分)。并根据自己的意愿使用文件列表。

  • 操作扩展不允许官方打开 URL 调用,但您可以迭代响应者链并使用它打开您的应用程序:
     let selectorOpenURL = sel_registerName("openURL:")
    while (responder != nil){
    if responder?.responds(to: selectorOpenURL) == true{
    responder?.perform(selectorOpenURL, with: url)
    }
    responder = responder!.next
    }
    编辑:
    对评论中提出的观点的回答:
  • OpenURL 技巧在 future 可能会被打破:如果你搜索这个问题,你会发现很多应用程序都在使用它。不使用任何私有(private) API,机会更少
  • 手动启用的部分我不确定,我想只有在有很多可用的操作扩展时才会发生这种情况。当我们支持操作扩展时,不会面临手动启用案例。
  • 您提到的 Google Drive 和其他应用程序都使用共享扩展来实现相同的功能,您也可以使用共享扩展。如果您观察到这些应用程序没有切换到主应用程序,则在主机应用程序上显示扩展 UI,并且在不切换到主应用程序的情况下执行任务。
  • 基本上按照 Apple 的指南,共享扩展和操作扩展不应打开主应用程序。但是使用开放 URL 欺骗了很多应用程序这样做。
  • 最后一个问题有效,在这种情况下,如果您为应用程序启用共享扩展,那么您应该选择共享扩展。您的应用程序将不会出现(从 iOS 14 开始,之前曾经有:应用程序共享扩展和应用程序 openURL(复制到应用程序))用于 openURL。基本上共享扩展将从共享表中的应用程序图标触发。

  • 概括:
    您可以通过实现共享扩展来避免 OpenURL 棘手的部分,这将解决用户使用 OpenURL 而不是操作扩展的问题。如果您使用大量内存,这可能会实现,因为共享扩展和操作扩展具有有限的内存访问。在这种情况下,您可能想要切换到您的主应用程序(OpenURL 技巧)。

    关于ios - UIApplicationDelegate openURL 与多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560147/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com