更新:行为似乎已经改变。我不再收到错误消息,但是 native 登录仍然无法正常工作。相反,如果未安装Facebook应用程序,则将我重定向到Web对话框。 Facebook是否删除了对最后一个SDK的 native 登录支持?
我请求的权限是“public_profile”,“电子邮件”和“user_likes”。我还尝试了删除“user_likes”权限,因为它不属于此处所述的基本权限:https://developers.facebook.com/docs/ios/ui-controls#iosintegration
仍然没有出现 native 登录对话框!

我最近将iOS项目更新为使用Facebook SDK版本3.14.0(已通过CocoaPods从3.13.0升级)。我阅读了升级说明,并根据建议将权限“basic_info”更改为“public_profile”。

如果我现在打电话

FBSession openActiveSessionWithReadPermissions:
                                   allowLoginUI:
                              completionHandler:

它只能通过Web或Facebook App登录来使用。如果我在操作系统设置中以 native 登录,则登录失败并显示
Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)"

有没有人遇到过类似的问题? native 登录不再以这种方式工作吗?还是“更改的”权限有问题?

问候
ķ

最佳答案

我也遇到了这个问题,这里是发生的事情以及如何修复我的应用程序的详细信息。

底线
由于新的登录过程,用户现在可以批准/拒绝每个请求的权限( native ios集成登录不支持此功能),Facebook更改了sdk的默认登录行为,以首先尝试使用Facebook快速应用程序切换,然后再使用Web View ,完全忽略任何ios系统级别的Facebook凭据。

在升级指南(表格3.13> 3.14)中对此进行了说明:https://developers.facebook.com/docs/ios/upgrading

相关部分:
“默认的登录行为已从FBSessionLoginBehaviorUseSystemAccountIfPresent更改为FBSessionLoginBehaviorWithFallbackToWebView。”

那怎么办?
好吧,如果您不需要3.14中引入的任何新功能,例如FBLikeControl等,则可以将其降级为3.13。但是,如果希望/需要使用3.14n,则FBSession上有一个实例方法,该实例方法将FBSessionLoginBehavior作为参数:https://developers.facebook.com/docs/reference/ios/current/class/FBSession/#openWithBehavior:completionHandler:

我从以下位置更新了用于打开Facebook session 的方法的主体:

[FBSession openActiveSessionWithReadPermissions:@ [@“email”,@“user_location”]
allowLoginUI:是
completeHandler:
^(FBSession * session ,FBSessionState状态,NSError *错误){
[自身sessionStateChanged: session 状态:状态错误:错误];
}
];

到:

FBSessionStateHandler completeHandler = ^(FBSession * session ,FBSessionState状态,NSError *错误){
[自身sessionStateChanged: session 状态:状态错误:错误];
};

如果([[FBSession activeSession] .state == FBSessionStateCreatedTokenLoaded){
//我们有一个已缓存的 token ,因此打开 session
[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
completeHandler:completionHandler];
} 别的 {
[self clearAllUserInfo];
//创建一个新的Facebook session
FBSession * fbSession = [[FBSession分配] initWithPermissions:@ [@“email”,@“user_location”]]];
[FBSession setActiveSession:fbSession];
[fbSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
completeHandler:completionHandler];
}

注:我的clearAllUserInfo方法包括以下几行:

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession renewSystemCredentials:^(ACAccountCredentialRenewResult结果,NSError *错误){
NSLog(@“%@”,错误);
}];
[FBSession setActiveSession:nil];

还值得查看有关理解 session 的Facebook文档:http://developers.facebook.com/docs/facebook-login/ios/v2.0#sessions

关于ios - SDK升级到3.14后, native Facebook登录停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23476499/

10-09 09:14