【问题标题】:UIApplicationDelegate openURL with multiple filesUIApplicationDelegate openURL 与多个文件
【发布时间】:2019-10-25 14:06:37
【问题描述】:

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

【问题讨论】:

  • 请检查这个。它可能有你的答案stackoverflow.com/questions/47203396/…>

标签: ios objective-c uiapplicationdelegate


【解决方案1】:

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

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

动作扩展不允许官方开放 URL 调用,但您可以迭代响应者链并使用它打开您的应用程序:

 let selectorOpenURL = sel_registerName("openURL:")
      while (responder != nil){
            if responder?.responds(to: selectorOpenURL) == true{
             responder?.perform(selectorOpenURL, with: url)
            }
        responder = responder!.next
        }

编辑:

对 cme​​ts 提出的观点的回答:

  1. OpenURL 技巧将来可能会被打破:如果您搜索此问题,您会发现很多应用程序都在使用相同的内容。不使用任何私有 API,机会更少
  2. 我不确定手动启用的部分,我猜只有当有很多可用的操作扩展时才会发生这种情况。当我们支持操作扩展时,不会遇到手动启用案例。
  3. 您提到的Google Drive和其他应用程序正在使用共享扩展来实现相同的功能,您也可以使用共享扩展。如果您观察到这些应用没有切换到主应用,在主机应用上呈现扩展 UI,并且在不切换到主应用的情况下执行任务。
  4. 基本上按照 Apple 的指南,共享扩展和操作扩展不应打开主应用程序。但是使用开放 URL 欺骗了很多应用程序这样做。
  5. 最后一个问题有效,在这种情况下,如果您为应用程序启用共享扩展,您应该选择共享扩展。您的应用程序将不会出现(从 iOS 14 开始,之前曾经有:应用程序共享扩展和应用程序 openURL(复制到应用程序))用于 openURL。基本上,共享扩展会从共享表中的应用程序图标触发。

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

【讨论】:

  • 谢谢。根据 Apple 的 DTS,“鉴于当前发布的系统配置,没有支持的方式来实现所需的功能”。我相信 openURL 技巧表明,Apple 不正式支持以这种方式使用 Action Extensions,并且可能会在未来的更新中中断。
  • 操作扩展必须手动启用,并显示在应用列表下方的列表中,而 Google Drive、Fastmail 和许多其他应用在从应用列表中选择时似乎接受多个文件,操作扩展列表上方。他们会以不同的方式做这件事,还是可以直接从应用列表触发操作扩展?我担心如果我使用动作扩展,用户会尝试通过在应用列表中选择应用来发送文件,而不会意识到他们必须启用动作扩展并改为使用它才能发送多个文件。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
相关资源
最近更新 更多