2013-01-03 95 views
0

我在執行下面的代碼檢查應用程序中的我的Facebook會話的狀態sessionStateChanged IOS 6的Facebook SDK 3.1

- (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"); 

         [self reautorizarPermisos:self ]; 
        } 

     break; 
     case FBSessionStateClosed: 
        NSLog(@"sesion close"); 
        [self loginFB:self ]; 

     break; 
     case FBSessionStateClosedLoginFailed: 

        NSLog(@"sesssion failed"); 

        [FBSession.activeSession closeAndClearTokenInformation]; 
      break; 
     default: 
      break; 
    } 

    [[NSNotificationCenter defaultCenter] 
    postNotificationName:UIDocumentStateChangedNotification 
    object:session]; 

    if (error) { 
     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:@"Error" 
            message:error.localizedDescription 
            delegate:nil 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     [alertView show]; 
    } 
} 

此代碼是從這裏 facebook documentation

訪問,我打電話方法如下

- (IBAction)login:(id)sender { 

     FBSession *sesion; 
     FBSessionState state; 
     NSError *error; 

     [self sessionStateChanged:sesion state:state error:error]; 
     NSLog(@"loginnnnnnn"); 
    } 

問題是國家沒有進入任何的情況下,顯然會話是不是操作恩,也不關閉或失敗,非常感謝你的幫助

+0

你爲什麼不登錄'state'的值檢查狀態? –

+0

是,值爲858157003,無意義 – asl87

+0

這是枚舉值的整數表示形式。它肯定有一個含義,試着將它與** all **進行比較,而不是像現在這樣,只是將其與'enum'的可能值相比較。檢查我的答案。 –

回答

0

如果你只想獲得當前的會話狀態,如活動或不活動,那麼這種方法是錯誤的。由於這是一個代表,只有在Fbsession發生變化時纔會觸發。

爲了檢查fbsession的狀態,只需執行以下代碼。

if (FBSession.activeSession.isOpen) 
{ 
    //Write code to send any message. Here Facebook Session is active 
} 
else 
{ 
    //Call the Facebook Login page to login into the Facebook and start new session. 
} 

,或者您也可以通過使用FBSession.activeSession.accessToken == nil

+0

或者你也可以通過使用(FBSession.activeSession.accessToken == nil)來檢查狀態 – Abhishek

0

按照documentation的可能值FBSessionState

typedef enum { 
    FBSessionStateCreated = 0, 
    FBSessionStateCreatedTokenLoaded = 1, 
    FBSessionStateCreatedOpening = 2, 
    FBSessionStateOpen = 1 | FB_SESSIONSTATEOPENBIT, 
    FBSessionStateOpenTokenExtended = 2 | FB_SESSIONSTATEOPENBIT, 
    FBSessionStateClosedLoginFailed = 1 | FB_SESSIONSTATETERMINALBIT, 
    FBSessionStateClosed = 2 | FB_SESSIONSTATETERMINALBIT, 
} FBSessionState; 

在你switch你缺少

FBSessionStateCreated
FBSessionStateCreatedTokenLoaded
FBSessionStateCreatedOpening
FBSessionStateOpenTokenExtended

所以你的state值很可能就是其中之一。

相關問題