canOpenURL:facebookAppURL返回false,即使安装了Facebook App

时间:2017-02-07 12:21:39

标签: ios facebook url-scheme

我想从我的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网址,例如: twitter://user?screen_name=...:如果安装了Twitter应用程序并且可以处理URL,则检查仅返回true。为什么Facebook链接失败?

1 个答案:

答案 0 :(得分:4)

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

这是来自docs:

  

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

     

如果您在不在您网站上的网址上调用“openURL”方法   白名单,它会默默地失败。 “此应用不允许查询   对于方案xxx“将出现syslog条目。

这是您创建白名单的方式

<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>