我在iOS 9上使用最新的Facebook SDK(4.6)遇到了一个问题。为了授权用户,我使用了FBSDKLoginManager。我试过设置这个:
loginManager.loginBehavior = FBSDKLoginBehaviorNative;
但SDK似乎仍然总是使用SFSafariViewController来授权Facebook。
这是我面临的问题。如果用户使用FacebookAccountA在其设备上安装了FB应用程序,然后尝试使用我的应用程序进行身份验证,则会显示此SFSafariViewController,他们可以使用FacebookAccountB(单独的FB帐户)对应用程序进行身份验证。
然后在应用程序中,我尝试与以下内容分享:
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:shareString];
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.shareContent = content;
dialog.delegate = self;
[dialog show];
共享对话框的默认设置最终是FBSDKShareDialogModeShareSheet。共享表在应用程序中正确显示,并且帖子似乎有效,但链接发布到FacebookAccountA(本机应用程序帐户),而不是FacebookAccountB(通过我的应用程序进行身份验证的链接)。
因此,如果用户碰巧使用不同于他们在其原生应用上登录的Facebook帐户对我的应用进行身份验证,他们最终可能会发布到与用于验证我的应用的帐户不同的帐户。有办法防止这种情况吗?
提前致谢。
答案 0 :(得分:5)
这是设计的。
在FB SDK v4.6和v3.24中,我们默认使用Safari View Controller,而不是快速应用程序切换到本机Facebook应用程序。在iOS 9中,快速应用程序切换流程会生成两个插页式广告" ExampleApp希望打开Facebook"和#34; Facebook想要打开ExampleApp"。
对于在iOS上登录Safari的数亿人来说,他们拥有非常棒的体验。
答案 1 :(得分:1)
使用SLComposerViewController进行Fb共享。它将使用您的ios设备默认Facebook sdks登录或您安装的应用程序登录。
以下是对此的参考: Tutorial for SLComposeViewController sharing
希望这有帮助!
答案 2 :(得分:0)
let dialog = FBSDKShareDialog()
dialog.mode = .Native
if !dialog.canShow() {
self.mode = .Automatic
}
耶!