【问题标题】:Is there an alternative to (the deprecated) canOpenURL in iOS 9?iOS 9 中是否有(已弃用的)canOpenURL 的替代方法?
【发布时间】:2015-07-17 07:44:32
【问题描述】:

我正在使用苹果的 canOpenURL: 和 openURL: 方法来检测和打开其他应用程序。但由于这些方法在 iOS9 中已被弃用,它们返回 NO。

有没有替代方法来管理这个?

谢谢

【问题讨论】:

  • 我的 Xcode 7 beta 3 文档没有将这些方法标记为在 iOS 9 中已弃用?!?
  • 我也很想知道它在哪里被弃用了。请你能分享你在哪里读到这篇文章。
  • 谁说它在 iOS9 中被弃用了? 两者都在 beta-3 中运行良好,没有迹象表明 –canOpenURL:–openURL:...
  • 是的,所以这个功能没有被禁用。根据@tikhonov 的回答,只需将要从应用程序打开的 plist 文件中的应用程序列入白名单即可。

标签: objective-c ios9


【解决方案1】:

您需要向您的 plist 提供“白名单”

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

查看详情

iOS 9 has made a small change to the handling of URL scheme.

More details

【讨论】:

  • 澄清一点,不要在要在 LSApplicationQueriesSchemes 数组中列入白名单的特定应用的字符串中包含“://”,即“comgooglemaps://”。如果您确实包含“://”canOpenUrl: 将返回 NO 并提供“此应用不允许查询方案 xxx”系统日志/错误。但是,当您实际调用 canOpenUrl: 时,您仍然必须包含冒号,即 canOpenUrl:@"comgooglemaps:"。
【解决方案2】:

Here你可以找到一些信息。

正如文章所说:

在 iOS 9 之前,应用程序可以在任意 URL 上调用这些方法。从 iOS 9 开始,应用程序必须声明它们希望能够在应用程序的配置文件中检查和打开的 URL 方案,因为它被提交给 Apple。这本质上是一个白名单,只能通过向 Apple 提交更新来更改或添加。系统应用处理的某些常见 URL(如“http”、“https”)似乎不需要明确列入白名单。

简而言之:Apple 希望阻止应用程序能够扫描用户的设备并知道安装了哪些应用程序

所以回答你的问题:实际上没有解决方案,因为苹果想要阻止这种行为

【讨论】:

    【解决方案3】:

    在某些情况下,如果您需要打开任意深度链接,Universal App Links 可能是一个解决方案:您指向应用程序的网站(需要实现此行为),iOS 9 将自动深度链接到临时应用程序.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      相关资源
      最近更新 更多