Xcode 7 + canOpenURL,如何让Facebook和Twitter打开我自己的应用链接
Posted
技术标签:
【中文标题】Xcode 7 + canOpenURL,如何让Facebook和Twitter打开我自己的应用链接【英文标题】:Xcode 7 + canOpenURL, how to have Facebook and Twitter to open my own app links 【发布时间】:2015-12-05 19:11:58 【问题描述】:在 Xcode 7 之前,它运行良好。当我在 Facebook 和 Twitter 上发布类似“myapp://mylink?id=1”的链接以进行社交媒体共享时,用户可以单击它,如果安装了它,它将打开我自己的 ios 应用程序。我知道 xcode 7 限制了 50 个 url 方案,任何应用程序都可以在实际执行“openUrl”之前询问“canOpenUrl”。显然 Facebook 和 Twitter 在打开链接之前仍在检查 canOpenUrl(它们在其应用程序内的 UIWebView 中打开),并且由于 50 个限制,他们无法将世界上所有应用程序的自定义 url 方案添加到他们的应用程序 plist 中,我的应用程序现在无法使用我的自定义 url 方案从 FB 和 Twitter 打开。日志在控制台显示如下:
Twitter[827] <Warning>: -canOpenURL: failed for URL: "myapp://mylink?id=1" -
error: "This app is not allowed to query for scheme myapp"
现在的问题是,有什么方法可以让它像以前一样工作,用户可以点击 FB 和 Twitter 上的某个链接 (myapp://mylink?id=1),然后打开我的通过自定义 url 方案拥有自己的应用程序?
仅供参考,我实际上在这些网站上发布了类似http://myweb.com/link?id=1 的链接,并且该链接在我的网络服务器上根据 HTTP 标头请求进行处理,以决定重定向到实际的网络,或者如果 iOS 则重定向到 myapp://mylink ?id=1,如果 android 然后重定向到另一个用于 android 应用程序的 url 方案等。我只在 Facebook 和 Twitter 上直接发布 myapp://mylink?id=1 链接进行了测试,但它仍然无法正常工作,给出同样的错误。
添加: iOS9 的新规则是您需要将最多 50 个以下内容添加到您的应用 plist 中,以便您的应用可以向操作系统查询 canOpenURL,但它也会导致无法用于 FB 和 Twitter 等大型应用:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myapp-custom-url-scheme</string>
</array>
对我来说,从我对研究这个问题的阅读中,解决方案是:
-
Apple 应该将此限制更改为更多基于速率限制,以便滥用应用程序(例如亚马逊的东西)不会使用它来扫描所有已知的 url 方案来构建应用程序安装统计信息,
或 Facebook 和 Twitter 等大型社交媒体网站应停止检查 canOpenURL,直接打开 URL 而不进行验证。
甚至更好,我们应该为自定义 URL 方案名称空间构建一些集中式数据库,iOS 和其他应用程序都应该将它用于这种通用目的。
【问题讨论】:
显然连 YouTube 应用都没有被 FB 调用... 【参考方案1】:好的,Facebook 和 Twitter 最近发布了已修复此问题的更新。 似乎他们不再检查 canOpenURL,并让任何应用程序的自定义 url 方案打开,除非他们正在做一些其他方式来验证它。
【讨论】:
以上是关于Xcode 7 + canOpenURL,如何让Facebook和Twitter打开我自己的应用链接的主要内容,如果未能解决你的问题,请参考以下文章
IOS 9.2 Xcode 7.2 Facebook 登录问题
-canOpenURL:URL 失败:“spotify:” - 错误:“(null)”
iOS开发-canOpenURL: failed for URL: "xx" - error:"This app is not allowed to query fo(代
如何让 Xcode 7 保留来自 UI 测试目标的日志记录输出?
iOS9 白名单问题 -canOpenURL: failed for URL: "xx" - error:"This app is not allowed to que
facebook 登录问题 - canOpenURL:URL 失败:“fbauth2:///” - 错误:“(null)”