不添加 LSApplicationQueriesSchemes 的 CanOpenURL
CanOpenURL without add LSApplicationQueriesSchemes
我想在我的应用程序中打开其他应用程序,
(类似 MDM 的应用程序),
但在 iOS 9,
之后
使用CanOpenURL查询其他应用需要在LSApplicationQueriesSchemes中添加Schemes,
我在 websrevice 上获取了我的应用程序列表,所以我无法将它们添加到 plist 中,
有没有使用 CanOpenURL 检查其他应用程序是否安装的解决方案不在 LSApplicationQueriesSchemes 中添加方案?
您可以使用 UIApplication.open(_:options:completionHandler:)
而无需在 LSApplicationQueriesSchemes
中指定 URLS。该密钥仅用于 canOpenURL(_:)
。
见 Apple's documentation here:
... Unlike this method, the openURL(_:)
method is not constrained by the LSApplicationQueriesSchemes
requirement. That method works if an app is available to open the URL, whether or not you have declared the scheme.
更新
因此,如果您需要 canOpenURL
,您还需要 .plist
中的那些 LSApplicationQueriesSchemes
条目,否则 canOpenURL
将始终 return false
.此限制已在 iOS 9(我认为)中实施,以防止恶意应用程序 嗅探 安装的 phone.
由于无法在运行时添加条目且无法使用通配符,因此唯一的解决方案是直接调用openURL
并检查是否成功。如果您的网络服务和 MDM 保证被调用的应用程序已安装,这可能是一个可行的解决方法。
你也可以实现类似 x-callback 的东西。想想以下几点:
- 中央(类似 MDM)应用程序注册一个 URL 类似 "register-app://",其他应用程序可以在其中注册自己的(回调)URL 方案
- 另一个应用程序调用 "register-app" 并提供它自己的(回调)方案
- 必须手动启动一次才能这样做
- 类似 MDM 的应用程序将 "callback-URLS" 存储在数据库中
- 类 MDM 应用程序现在直接使用
openURL
- 不再需要网络服务
或者您的 MDM(真正的 MDM)可以发送推送通知来通知新安装的应用程序及其 URL 方案。
不过,这都是apple想到的规避限制的小技巧...
我想在我的应用程序中打开其他应用程序,
(类似 MDM 的应用程序),
但在 iOS 9,
之后
使用CanOpenURL查询其他应用需要在LSApplicationQueriesSchemes中添加Schemes,
我在 websrevice 上获取了我的应用程序列表,所以我无法将它们添加到 plist 中,
有没有使用 CanOpenURL 检查其他应用程序是否安装的解决方案不在 LSApplicationQueriesSchemes 中添加方案?
您可以使用 UIApplication.open(_:options:completionHandler:)
而无需在 LSApplicationQueriesSchemes
中指定 URLS。该密钥仅用于 canOpenURL(_:)
。
见 Apple's documentation here:
... Unlike this method, the
openURL(_:)
method is not constrained by theLSApplicationQueriesSchemes
requirement. That method works if an app is available to open the URL, whether or not you have declared the scheme.
更新
因此,如果您需要 canOpenURL
,您还需要 .plist
中的那些 LSApplicationQueriesSchemes
条目,否则 canOpenURL
将始终 return false
.此限制已在 iOS 9(我认为)中实施,以防止恶意应用程序 嗅探 安装的 phone.
由于无法在运行时添加条目且无法使用通配符,因此唯一的解决方案是直接调用openURL
并检查是否成功。如果您的网络服务和 MDM 保证被调用的应用程序已安装,这可能是一个可行的解决方法。
你也可以实现类似 x-callback 的东西。想想以下几点:
- 中央(类似 MDM)应用程序注册一个 URL 类似 "register-app://",其他应用程序可以在其中注册自己的(回调)URL 方案
- 另一个应用程序调用 "register-app" 并提供它自己的(回调)方案
- 必须手动启动一次才能这样做
- 类似 MDM 的应用程序将 "callback-URLS" 存储在数据库中
- 类 MDM 应用程序现在直接使用
openURL
- 不再需要网络服务
或者您的 MDM(真正的 MDM)可以发送推送通知来通知新安装的应用程序及其 URL 方案。
不过,这都是apple想到的规避限制的小技巧...