2013-09-30 112 views
-1

我已經實現了Facebook登錄並且它的工作正常。但我有這個屏幕故障:如何檢測Facebook登錄時是否按下取消按鈕

enter image description here

這是由Facebook的框架直接提供的,這樣就可以了,我不能直接連接的動作。 該視圖用於將我的Facebook應用程序關聯到我的Facebook帳戶。所以問題是: 如何檢測用戶是否按取消按鈕? 我試圖打印我的Facebook會話

- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    NSLog(@"stato %u",state); 

    switch (state) { 
     case FBSessionStateOpen: 

      break; 
     case FBSessionStateClosed: 
      break; 
     case FBSessionStateCreated: 
      break; 
     case FBSessionStateCreatedOpening: 
      break; 
     case FBSessionStateOpenTokenExtended: 
      break; 
     case FBSessionStateCreatedTokenLoaded: 
      break; 
     case FBSessionStateClosedLoginFailed: 
      // Once the user has logged in, we want them to 
      // be looking at the root view. 

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

的狀態,但通過按下按鈕總是返回相同的狀態,獨立。

謝謝

回答

0

總是返回什麼狀態?這表明還有別的東西沒有正確設置?

你應該可以在你的viewWillAppear/viewDidAppear中添加這樣的內容。

// See if the app has a valid token for the current state. 
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) { 
    // To-do, show logged in view 
} else { 
    // No, display the login page. 
    [self showLoginView]; 
} 
+0

方法「FBSession.activeSession。 state == FBSessionStateCreatedTokenLoaded'總是返回NO!即使我點擊確定按鈕或取消按鈕!結果總是不行! –

+0

當我打印狀態時,我得到這個數字:257,與交換機內部的FBSessionStateClosedLoginFailed相匹配,但FBSessionState Open永遠不會調用。 –

+0

如果您總是收到FBSessionStateClosedLoginFailed,那麼肯定還有其他問題。你打開狀態如何? https://developers.facebook.com/docs/ios/ios-sdk-tutorial/authenticate/ – StuartM

1

我已通過添加這行代碼到AppDelegate中解決:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    return [FBSession.activeSession handleOpenURL:url]; ; 
} 

並通過檢查與連接的狀態:

if (!FBSession.activeSession.isOpen) { 
}