我有一个问题要在应用中打开其他应用,
(类似于MDM的应用),
但是在 iOS 9 之后,
使用CanOpenURL检查其他应用程序需要在LSApplicationQueriesSchemes中添加Scheme,
我在websrevice上获得了应用列表,因此无法将它们添加到plist中,
有没有什么解决方案可以使用CanOpenURL来检查其他应用程序是否已安装,或者是否在LSApplicationQueriesSchemes 中没有添加方案的情况下?
最佳答案
您可以使用UIApplication.open(_:options:completionHandler:)
,而无需在LSApplicationQueriesSchemes
中指定URL。该密钥仅用于canOpenURL(_:)
。
参见Apple's documentation here:
...与此方法不同,openURL(_:)
方法不受LSApplicationQueriesSchemes
要求的约束。如果有应用程序可用于打开URL,则无论您是否已声明该方案,该方法都有效。
更新
因此,如果需要canOpenURL
,则还需要LSApplicationQueriesSchemes
中的那些.plist
条目,否则canOpenURL
将始终返回false
。此限制已在iOS 9中实现(我认为),以防止恶意应用在已安装的手机周围监听。
由于无法在运行时添加条目并且不可能使用通配符,因此唯一的解决方案是直接调用openURL
并检查其是否成功。如果您的Web服务和MDM保证已安装被调用的应用程序,那么这可能是可行的解决方法。
您还可以实现类似x-callback的东西。考虑以下几点:
openURL
或者您的MDM(真正的MDM)可以发送推送通知,以通知有关新安装的应用程序及其URL方案。
然而,这只是规避苹果公司认为的限制的窍门...