2013-01-01 167 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; 
}