这是我第一次使用Facebook SDK,所以可能登录/权限流程不正确,尽管我遵循了Facebook教程。我的应用程序只需要在墙上共享,我使用的是SDK 3.2.1。
每次用户点按分享按钮时,我都会使用+ (BOOL)openActiveSessionWithReadPermissions:(NSArray*)readPermissions allowLoginUI:(BOOL)allowLoginUI completionHandler:(FBSessionStateHandler)handler
方法登录。
第一次要求电子邮件/密码组合。我面临的问题是它之后不会重复使用存储的令牌:
如果存储了令牌(用户先前已登录到Facebook),则应用程序 将通过“您已经授权的app_name”请求权限, 然后它很可能在分享时再次询问。
如果第二次调用openActiveSessionWithReadPermissions
,则为
不会要求任何权限。
第三次被叫,它会再次询问。
我发现会话正在自动关闭,但我不明白为什么。完成处理程序显示FBSessionStateClosed
之前收到FBSessionStateOpen
的方式。我想这就是Facebook SDK继续每隔一段时间要求批准的原因。
这两条跟踪来自第二次调用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];
}
我希望有人可以帮助这个,我很沮丧。