0

我不知道如何處理這個案例,當iOS FBSDK給我一個過期的令牌。在我的應用程序中,我點擊「登錄」按鈕時調用以下方法。如何處理FBSDK令牌過期的情況?

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login logInWithReadPermissions:@[@"public_profile", @"email", @"user_photos", @"user_birthday"] 
      fromViewController:nil 
         handler: etc.... ] 

這則觸發FBSDKAccessTokenDidChangeNotification,而我HANDELING這種方法如下:

- (void)fbAccessTokenDidChange:(NSNotification *)notification 
{ 

    if ([notification.name isEqualToString:FBSDKAccessTokenDidChangeNotification]) { 

    FBSDKAccessToken* oldToken = [notification.userInfo valueForKey: FBSDKAccessTokenChangeOldKey]; 
    FBSDKAccessToken* newToken = [notification.userInfo valueForKey: FBSDKAccessTokenChangeNewKey]; 

    NSLog(@"FB access token did change notification\nOLD token:\t%@\nNEW token:\t%@", oldToken.tokenString, newToken.tokenString); 

    // initial token setup when user is logged in 
    if (newToken != nil && oldToken == nil) 
    { 
     NSDate *nowDate = [NSDate date]; 
     NSDate *fbExpirationDate = [FBSDKAccessToken currentAccessToken].expirationDate; 

     if ([fbExpirationDate compare:nowDate] != NSOrderedDescending) 
     { 
      NSLog(@"FB token: expired"); 
      if ([FBSDKAccessToken currentAccessToken]) 
      { 
       [[FBSDKLoginManager new] logOut]; 

       [[NSNotificationCenter defaultCenter] postNotificationName:@"fbTokenExpired" object:nil]; 
      } 
      return; 
     } 

     [self storeFacebookToken]; 
    } 
    else if (newToken && oldToken && ![oldToken.tokenString isEqualToString:newToken.tokenString]) 
    { 
     NSLog(@"FB access token string did change"); 
     [self storeFacebookToken]; 
    } 
} 

}

什麼我需要爲caase做令牌已過期? ??我正在調用[[FBSDKLoginManager new] logOut],它將當前令牌設置爲nil。但是,當我再次將用戶重定向到登錄按鈕操作時,會出現同一個窗口,要求用戶按'允許'。這並不是要求用戶輸入他的密碼和電子郵件,這從我的理解會產生一個新的令牌?我錯在哪裏?現在用戶只是進入循環從未登錄...

任何幫助很感謝!日Thnx

回答

0
  • 退出在設備您的Facebook應用程序。在模擬器去設置和Facebook註銷

  • 或Safari瀏覽器的Facebook註銷

再次清潔項目並運行。它會要求再次登錄你的應用程序。

+0

Thnx但這不是一個好的解決方案。我應該如何向用戶展示?我需要以某種方式在後臺以編程方式執行此操作,而不是告訴用戶去fb應用程序並註銷... – user1974507