3

我使用最新的 Facebook SDK (3.1.1)。

我在其中编写了一个函数,AppDelegate用于检查当前会话并根据状态创建或打开会话。

第二个条件总是返回NO并转到显示登录屏幕。

我不明白的方式。

AppDelegate 方法:

if (facebook.isOpen == NO)
{
   facebook = [[FBSession alloc] initWithPermissions:permission];

    if (facebook.state == FBSessionStateCreatedTokenLoaded)
    {
        [facebook openWithCompletionHandler:^(FBSession *session,FBSessionState status,NSError *error)
        {
            // load user details
        }];
    }
    else
    {
        // show login screen
    }
}
4

2 回答 2

1

FbSession 类中有一个属性访问令牌。

使用该字符串来检查登录状态。

如果您在该字符串中获得 null,则表示您的会话已过期,但如果您获得一些值,则表示您仍在应用程序中登录,您可以做任何您想做的事情。

问候

阿布舍克·戈亚尔

于 2013-01-01T09:36:07.087 回答
0

如果会话状态等于 FBSessionStateCreatedTokenLoaded,则意味着存在缓存的 accessToken,对 open* 的调用将导致会话打开,无需 UX 或应用程序切换

-(BOOL)validFBSessionExists{
        if (FBSession.activeSession.isOpen){
            NSLog(@"Facebook accessToken:%@",FBSession.activeSession.accessTokenData.accessToken);
            return YES;
        }
        else if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded)
        {
            // Cached token exist, Session needs to be re-opened
            [FBSession.activeSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:nil];
            return YES;
        }
        return NO;
}
于 2014-07-04T16:09:13.260 回答