Facebook SDK中的FBSDKShareDialog在iOS9上无法工作?

8

我使用Xcode7将Facebook SDK升级到pod FBSDKShareKit(4.6.0)。并且按照以下方式将Facebook方案添加到白名单中。 参考:https://developers.facebook.com/docs/ios/ios9

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

然而,以下代码只能在iOS9上显示iOS默认的社交对话框。相同的代码与相同的二进制文件在iOS8上可以打开Facebook应用并正确显示共享对话框。

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.example.com"]];
content.contentDescription = @"Test";
[FBSDKShareDialog showFromViewController:self withContent:content delegate:nil];

我猜Facebook应用在iOS9上找不到,然后显示默认的社交对话框。甚至没有显示错误信息。

我错过了什么吗?还是这是iOS9的一个bug?


我遇到了同样的问题。我认为我已经按照文档上的步骤操作了。如果Facebook应用程序未找到,则仍应使用Web表单进行共享。在模拟器中一切正常。 - mrhangz
2个回答

32

我猜测Facebook改变了这个行为,是因为iOS 9现在会弹出一个对话框,询问是否要在应用切换时打开Facebook。即使对于FBSDKLoginManager,与其本地的应用切换方法相比,模态UIWebView似乎也更受欢迎。

不过,你仍然可以通过使用以下方法强制分享对话框切换到Facebook应用程序(假设您已按照https://developers.facebook.com/docs/ios/ios9中描述的方式设置了应用程序的plist):

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fbauth2://"]]){
    dialog.mode = FBSDKShareDialogModeNative;
}
else {
    dialog.mode = FBSDKShareDialogModeBrowser; //or FBSDKShareDialogModeAutomatic
}
dialog.shareContent = content;
dialog.delegate = self;
dialog.fromViewController = self;
[dialog show];

1
非常感谢。这个有效,而且正是我想要的。^^ - derjohng
2
此外,如果未安装fb应用程序,则此方法将无法正常工作,因此最好检查一下,如果未安装,请改用FBSDKShareDialogModeFeedBrowser。 - mrhangz
@mrhangz 我已经编辑了解决方案,加入了检查Facebook应用是否安装的功能。我原以为它会自动回退到其他模式,但事实并非如此。谢谢!另外,我更喜欢FBSDKShareDialogModeBrowser而不是FBSDKShareDialogModeFeedBrowser。 - wilsontgh
在我看来这似乎是一个 Facebook SDK 的 bug。我除了使用 FBSDKShareDialogModeFeedBrowser 以外无法使用其他任何东西(甚至不是自动模式),如果这对你起作用,那就太好了 :) - mrhangz
1
刚在iOS 11上进行了测试。如果Facebook应用程序未安装,则需要执行dialog.mode = FBSDKShareDialogModeBrowser,否则它将不会显示任何内容。 - Alex Wally
显示剩余3条评论

1
在iOS 9中,以下是我找到的唯一有效的解决方案,可以检测设备上是否安装了Facebook应用程序:
 NSString *urlString = @"fbapi://";
    NSURL *url1 = [NSURL URLWithString:urlString];

    if ([[UIApplication sharedApplication] canOpenURL:url1]) {
        [[UIApplication sharedApplication] openURL:url1];
    }
    else {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itunes link for download app"]];
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接