2013-01-01 122 views
3

我使用最新的Facebook SDK(3.1.1)。Facebook SessionState永远不会FBSessionStateCreatedTokenLoaded

我在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 
    } 
} 

回答

1

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

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

如果您收到该字符串空这意味着你的会话过期,但如果你得到了一些价值是指你还在登录的应用程序,你可以做你想做什么都。

问候

阿布舍克戈亚尔

+0

的facebook.accessToken始终无太大。 – zeevblu

+0

你能分享你如何获得Facebook访问令牌的代码吗? – Abhishek

+0

我发现了这个问题 - 我试图用不同的权限初始化会话两次。谢谢。 – zeevblu

0

如果会话状态等于FBSessionStateCreatedTokenLoaded这意味着有一个缓存的accessToken,调用打开*将导致一个开放的会议,不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; 
}