【问题标题】:canOpenURL:facebookAppURL return false, even if Facebook App is installed即使安装了 Facebook 应用程序,canOpenURL:facebookAppURL 也会返回 false
【发布时间】:2017-06-24 16:39:43
【问题描述】:

我想在我的 iOS 应用程序中链接 Facebook 页面。如果 Facebook 应用安装在同一设备上,则页面应显示在该设备上,否则将显示在 Safari 中:

NSURL* facebookURL = [NSURL URLWithString:@"https://www.facebook.com/SomePage/"];
NSURL* facebookAppURL = [NSURL URLWithString:@"fb://profile/247377102029332"];

UIApplication* app = [UIApplication sharedApplication];
if ([app canOpenURL: facebookAppURL])
    [app openURL:facebookAppURL];
else
    [app openURL:facebookURL];

理论上这应该可行:如果我直接在 Safari 中输入 facebookAppURL,或者跳过canOpenURL 检查,系统会询问我是否应该在 Facebook 中打开链接。单击确定后,Facebook 应用程序会出现并显示该页面。

但是调用[app canOpenURL: facebookAppURL] allays 会返回false

同样的方法适用于 Twitter URL,例如twitter://user?screen_name=...:检查仅返回true,如果安装了 Twitter 应用程序并且可以处理 URL。为什么 Facebook 链接会失败?

【问题讨论】:

标签: ios facebook url-scheme


【解决方案1】:

您是否将此添加到白名单?从 iOS9 开始,出于安全原因,您需要将所有自定义 URL 方案列入白名单。您必须使用 Info.plist 中的 LSApplicationQueriesSchemes 键将您的应用调用的 URL 列入白名单。

这是来自文档:

如果您对不在白名单中的 URL 调用“canOpenURL”方法,它将返回“NO”,即使安装了已注册处理此方案的应用程序也是如此。将出现“此应用不允许查询方案 xxx”的 syslog 条目。

如果您对不在您的 URL 中的 URL 调用“openURL”方法 白名单,它会默默地失败。 A“此应用不允许查询 对于方案 xxx” 系统日志条目将出现。

这就是你创建白名单的方式

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>fb</string>
 <string>fbapi</string>
 <string>fbauth2</string>
 <string>fbshareextension</string>
 <string>fb-messenger-api</string>
 <string>twitter</string>
 <string>viber</string>
 <string>whatsapp</string>
</array>

【讨论】:

  • 谢谢,问题解决了。但是我不明白为什么相同的程序适用于 Twitter 方案,它也没有添加到白名单中......
猜你喜欢
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2011-10-24
  • 2016-11-04
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多