我想从我的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链接失败?
答案 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>