我有一个问题要在应用中打开其他应用,
(类似于MDM的应用),
但是在 iOS 9 之后,
使用CanOpenURL检查其他应用程序需要在LSApplicationQueriesSchemes中添加Scheme,
我在websrevice上获得了应用列表,因此无法将它们添加到plist中,
有没有什么解决方案可以使用CanOpenURL来检查其他应用程序是否已安装,或者是否在LSApplicationQueriesSchemes 中没有添加方案的情况下

最佳答案

您可以使用UIApplication.open(_:​options:​completion​Handler:​),而无需在LSApplicationQueriesSchemes中指定URL。该密钥仅用于can​Open​URL(_:​)
参见Apple's documentation here:

...与此方法不同,open​URL(_:​)方法不受LSApplication​Queries​Schemes要求的约束。如果有应用程序可用于打开URL,则无论您是否已声明该方案,该方法都有效。


更新

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

由于无法在运行时添加条目并且不可能使用通配符,因此唯一的解决方案是直接调用openURL并检查其是否成功。如果您的Web服务和MDM保证已安装被调用的应用程序,那么这可能是可行的解决方法。

您还可以实现类似x-callback的东西。考虑以下几点:

  • 中央(类似于MDM)的应用程序注册一个URL,例如“register-app://”,其他应用程序可以使用自己的(回调)URL方案自行注册。
  • 另一个应用程序调用“register-app”并提供其自己的(回调)方案
  • 必须手动启动一次
  • 类似MDM的应用程序将“callback-URLS”存储在数据库
  • 类似于MDM的应用程序现在直接使用openURL
  • 不再需要Web服务

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

    然而,这只是规避苹果公司认为的限制的窍门...

    10-07 19:56
    查看更多