iOS Facebook SDK 3.1 登录时添加权限

3

我正在尝试遵循Facebook SDK 3.1教程:美味佳肴,并将FB集成到我的应用程序中。

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {

NSArray *permissions = @[@"email"];

return [FBSession openActiveSessionWithReadPermissions:permissions
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                                         [self sessionStateChanged:session state:state error:error];
                                     }];

我想添加额外的权限,但是在身份验证中只显示基本信息,如下图所示:

screenshot

我还使用了已弃用的方法,但结果相同:

[FBSession openActiveSessionWithPermissions:permissions allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {    [self sessionStateChanged:session state:state error:error];
}];

我从这里找到了一个临时解决方案,可以在其他地方使用reauthorizeWithPublishPermissions。用户需要登录facebook两次才能读取用户电子邮件。

是否有一种方法可以仅需一次就完成操作?

谢谢您的帮助!

编辑:在stackoverflow上的另一个帖子中,使用openActiveSessionWithPublishPermissions仍然会产生与屏幕截图相同的结果。

3个回答

5
根据 Facebook FBSession 参考文档 的最佳实践,您应在打开会话时请求读取权限,并在需要时稍后请求其他权限。引用块中指出,初始权限请求必须仅表示只读权限。其次,我尝试了下面的代码,并获得了正确的权限要求。
NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil];

[FBSession openActiveSessionWithReadPermissions:permissions
                                   allowLoginUI:YES
                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
 [self sessionStateChanged:session state:state error:error];}];
 [permissions release];

希望这可以帮到你。

1
感谢您提供的解决方案,我发现一个有趣的点是:在iOS6上测试时,它会读取Facebook.com上的权限;而在iOS5上测试时,则会读取设备上的权限。 - EES

2

1
我阅读了这个页面,我理解有一些方法可以创建Facebook实例。然而当我在Facebook上跟着教程走时,他们不需要创建Facebook实例。您能否展示如何使用3.1 fb sdk创建Facebook实例? - EES

2

我会检查Facebook应用程序权限设置中的Facebook.com权限,并确保它们匹配。我确信他们说你可以在iOS代码中设置权限,但我建议在FB应用程序设置中匹配权限。


谢谢你的回答,我已经在权限页面中添加了电子邮件。结果仍然是一样的。 - EES
嗨@runmad,它成功了!在添加权限页面并将“[self openSessionWithAllowLoginUI:YES]”的参数更改为YES后。 - EES

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