CanOpenURL无需添加LSApplicationQueriesSchemes

时间:2017-03-21 07:17:44

标签: ios openurl

我有一个问题,我想在我的应用中打开其他应用,
(MDM Like App),
但在 iOS 9 之后,
使用CanOpenURL检查其他应用程序需要在LSApplicationQueriesSchemes中添加Schemes,
我在websrevice上获取了我的应用列表,因此我无法将它们添加到plist中 是否有任何解决方案使用CanOpenURL检查其他应用程序是否安装在LSApplicationQueriesSchemes中没有添加方案

1 个答案:

答案 0 :(得分:1)

您可以UIApplication.open(_:​options:​completion​Handler:​)使用LSApplicationQueriesSchemes指定can​Open​URL(_:​)中的网址。该密钥仅用于open​URL(_:​)。 见Apple's documentation here

  

...与此方法不同,LSApplication​Queries​Schemes方法不受canOpenURL要求的约束。无论您是否已声明该方案,该方法都可用于打开URL。

<强>更新

因此,如果您需要LSApplication​QueriesSchemes,您还需要.plist中的canOpenURL条目,否则false将始终返回openURL。此限制已在iOS 9(我认为)中实施,以防止恶意应用嗅探已安装的手机。

由于无法在运行时添加条目且无法使用通配符,唯一的解决方案是直接调用openURL并检查它是否成功。如果您的webservice和MDM保证安装了所调用的应用程序,这可能是一种可行的解决方法。

您还可以实施x-callback之类的内容。想一想以下内容:

  • 中央(类似MDM)的应用注册了一个像“register-app://”这样的网址,其他应用可以使用自己的(回调)网址注册自己的方案
  • 其他应用程序调用“register-app”并提供自己的(回调)方案
    • 必须手动启动才能执行此操作
  • 类似MDM的应用程序将“callback-URLS”存储在数据库中
  • 类似MDM的应用现在直接使用'Year'
  • 不再需要webservice

或者您的MDM(真正的MDM)可以发送推送通知,以通知新安装的应用及其URL方案。

尽管如此,这只是为了规避苹果所想的限制......