这是我第一次使用 Facebook SDK,所以登录/权限流程可能不正确,尽管我遵循了 Facebook 教程。我的应用程序只需要在墙上分享,我使用的是 SDK 3.2.1。
每次用户点击共享按钮时,我都会使用+ (BOOL)openActiveSessionWithReadPermissions:(NSArray*)readPermissions allowLoginUI:(BOOL)allowLoginUI completionHandler:(FBSessionStateHandler)handler
方法登录。
第一次要求电子邮件/密码组合。我面临的问题是它之后不会重用存储的令牌:
如果存储了令牌(用户之前登录到 Facebook),应用程序将使用“您已授权的应用程序名称”请求权限,然后它很可能会在共享时再次询问。
如果
openActiveSessionWithReadPermissions
第二次调用,它不会要求任何权限。第三次调用它会再次询问。
我发现会话正在自动关闭,但我不知道为什么。完成处理程序显示如何FBSessionStateClosed
在之前接收到FBSessionStateOpen
。我想这就是 Facebook SDK 每隔一段时间就请求批准的原因。
这 2 条跟踪来自第二次openActiveSessionWithReadPermissions
调用(您可以看到会话是如何关闭和再次打开的)。下次调用该方法时,它只会收到一个关闭的会话,并会询问“已授权”屏幕。
我的代码有点像下面:
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
return [FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
if (!error) {
// We have a valid session
NSLog(@"User session found");
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
[[NSNotificationCenter defaultCenter]
postNotificationName:FBSessionStateChangedNotification
object:session];
}
我希望有人可以帮助解决这个问题,我很沮丧。