2012-09-13 58 views
6

我正在使用iOS的Facebook的SDK 3.0。我如何檢查用戶是否已經登錄?檢查是否登錄ios Facebook的SDK 3.0

我試過下面一行,但它不能正常工作。它有時返回沒有,雖然我登錄。有什麼建議嗎?

if (FBSession.activeSession.isOpen == YES) 
{ 
    // post to wall else login 
} 

- 編輯 -

這就是我打開我的Facebook會話:

NSArray *permissions = [[NSArray alloc] initWithObjects: 
         @"user_likes", 
         @"read_stream", 
         @"publish_actions", 
         nil]; 
return [FBSession openActiveSessionWithPermissions:permissions 
             allowLoginUI:allowLoginUI 
           completionHandler:^(FBSession *session, 
                FBSessionState state, 
                NSError *error) { 
            [self sessionStateChanged:session 
                 state:state 
                 error:error]; 
           }]; 

需要登錄,因此它的作品第一次。如果我嘗試這個,而我已經登錄在FBSession.activeSession.isOpen返回NO。

回答

13

您可以嘗試在不使 登錄界面打開一個新的會話檢查是否有一個有效的令牌

if (FBSession.activeSession.isOpen) 
{ 
    // post to wall 
} else { 
    // try to open session with existing valid token 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"user_likes", 
          @"read_stream", 
          @"publish_actions", 
          nil]; 
    FBSession *session = [[FBSession alloc] initWithPermissions:permissions]; 
    [FBSession setActiveSession:session]; 
    if([FBSession openActiveSessionWithAllowLoginUI:NO]) { 
     // post to wall 
    } else { 
     // you need to log the user 
    } 
} 
+0

只是將我每一次來驗證。你如何強制SDK保留認證令牌?權限匹配應用程序,但FBSessionStateCreatedTokenLoaded是狀態。 –

+0

這個答案不起作用,並與系統帳戶與通過Facebook應用程序或UIWebView獲取令牌的問題 – jjxtra

+0

@PsychoDad問題是針對Facebook SDK 3。0 – Moxy

1

你如何打開你的FBSession?

如果您要創建實例,請務必設置FBSession.activeSession。這是我一段時間的問題。

+0

我編輯我的問題 –

9

我做到了在Facebook的例子

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) 
{ 

} 
+1

我不太確定這一點。 session.state現在似乎是一個位掩碼。你也可以有FBSessionStateOpenTokenExtended狀態。有一個關於會話狀態開放位的註釋:打開會話狀態表示用戶已經登錄或緩存的令牌可用。我認爲==比較在所有情況下都不起作用。 – John

2

會議如果狀態爲FBSessionStateOpenFBSessionStateOpenTokenExtended,則處於活動狀態。您可以使用以下的功能檢查,如果用戶登錄:

- (BOOL)isSessionOpen 
{ 
    return FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended; 
} 
13

如果您正在使用FBSDK大於4.x的話就沒有FBSession的概念。您必須僅通過使用[FBSDKAccessToken currentAccessToken]來查找活動會話,只需檢查它是否具有nil值,否則不會有活動會話。

相反,你應該在 viewDidLoad或類似的檢查[FBSDKAccessToken currentAccessToken]。如果有current token可用,請在登錄後執行 工作。您也可以使用currentAccessToken檢索緩存的令牌 。

你可以找到更多在這裏https://developers.facebook.com/docs/ios/upgrading-4.x

FBSession.activeSession已被替換[FBSDKAccessToken currentAccessToken]FBSDKLoginManager。沒有概念 session state。相反,請使用經理登錄,並設置 currentAccessToken參考。

0
if ([FBSDKAccessToken currentAccessToken]) 
{ 
    NSLog(@"Already login"); 
    //[FBSession openActiveSessionWithAllowLoginUI: YES]; 
} 
+0

一般來說,如果他們解釋爲什麼/他們如何工作而不是僅僅拋出一些代碼,他們會收到更好的答案。 –