iOS 9 Facebook SDK 登录/分享

9

我在使用最新的Facebook SDK(4.6)时遇到了问题,这与iOS 9有关。为了授权用户,我使用FBSDKLoginManager。我尝试设置以下内容:

loginManager.loginBehavior = FBSDKLoginBehaviorNative;

不过,SDK似乎始终使用SFSafariViewController来授权Facebook。

我面临的问题是:如果用户在设备上安装了FB应用程序并使用FacebookAccountA进行登录,然后尝试使用我的应用程序进行身份验证,那么他们将被呈现出这个SFSafariViewController,并且可以使用另一个分离的FB账户FacebookAccountB来对应用程序进行身份验证。

然后,在应用程序中,我尝试使用以下方式共享:

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帐户对我的应用程序进行身份验证,则可能会将帖子发布到与他们用于身份验证我的应用程序不同的帐户中。有没有办法防止这种情况发生?
提前致谢。

如果您想通过Facebook应用程序登录,请查看我在此处的答案https://dev59.com/uI_ea4cB1Zd3GeqPMk8j#32821579 - Iraklii
1
谢谢,看起来你说的是唯一选项。如果它不会引起我看到的问题,我不介意通过SFSafariViewController登录。 - haplo1384
@haplo1384,你解决了上述问题吗? - Abilash Balasubramanian
@AbilashBNair,我已经离开这个项目,并且最近没有进行测试。在下面发布的答案中,Simon Cross表明这是Facebook正在解决的问题,因此我的希望是他们现在已经解决了它。 - haplo1384
3个回答

5

这是设计上的考虑。

在FB SDK v4.6和v3.24中,我们默认使用Safari View Controller而不是快速应用程序切换到原生Facebook应用程序。在iOS 9中,快速应用程序切换流程会生成两个插页式广告“ExampleApp想要打开Facebook”和“Facebook想要打开ExampleApp”。

对于数亿在iOS上登录Safari的人来说,他们有一个很棒的体验。


2
谢谢Simon,我对使用Safari View Controller进行用户身份验证没有任何问题。问题在于,即使通过Safari View Controller进行了身份验证,FBSDKShareDialog似乎仍然默认使用原生应用程序的Facebook帐户,这可能与个人通过Safari View Controller验证我的应用程序时使用的Facebook帐户不同。这是设计上的吗? - haplo1384
@haplo1384,这是一个已知问题,因此它是“按设计”而来。我们正在寻找检测和缓解此情况的方法。 - Simon Cross
3
据我所知,你们Facebook应用程序的用户接近十亿人。使用只需按下两个按钮而不需要输入用户名和密码的用户是否更多?请确认一下。 - Petrescu Silviu
9
@Simon Cross,使用Safari时需要输入用户名和密码似乎比两个插页广告增加了更多的障碍。您有没有对这两种方法之间的放弃率有所了解? - cpungaliya
1
我可以使用Safari视图控制器 - 我只是担心许多用户不知道自己的fb密码。通常人们登录fb应用程序后从未退出。他们将不得不费力地重置密码并进行所有这些额外的工作,以便他们可以使用您的应用程序。 - TheRealRonDez
显示剩余3条评论

1

使用SLComposerViewController进行Facebook分享。它将使用您的iOS设备默认Facebook SDK登录或您安装的应用程序登录。

以下是此内容的参考: SLComposeViewController分享教程

希望这可以帮到您!


谢谢回答,但我想使用用于验证我的应用程序(通过SFSafariViewController)的Facebook凭据来共享。这个方法行得通吗? - haplo1384
我也遇到同样的问题。有解决方案吗? - Femina

0

是的,在iOS 9上这是设计上的问题,但我们可以轻松地解决它!

let dialog = FBSDKShareDialog()
dialog.mode = .Native
if !dialog.canShow() {
    self.mode = .Automatic
}

太棒了!


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