iOS Facebook SDK - 会话自动关闭

时间:2013-05-13 11:40:35

标签: ios facebook facebook-ios-sdk

这是我第一次使用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继续每隔一段时间要求批准的原因。

Completion block Session Closed Completion block Session Open

这两条跟踪来自第二次调用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];
}

我希望有人可以帮助这个,我很沮丧。

0 个答案:

没有答案