如何处理FBSDK令牌过期的案例?

时间:2017-04-13 13:34:32

标签: ios facebook-login facebook-access-token fbsdk fbsdkloginkit

当iOS FBSDK返回一个过期的令牌时,我不确定如何处理这个案例。在我的应用中,点击“登录”按钮时,我会调用以下方法。

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

然后触发FBSDKAccessTokenDidChangeNotification,我按照以下方式处理此方法:

- (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];
    }
}

}

对于令牌过期的情况,我需要做些什么?我正在调用[[FBSDKLoginManager new] logOut],它将当前令牌设置为nil。但是,当我再次将用户重定向到登录按钮操作时,会出现相同的窗口,要求用户按“允许”。它不是要求用户输入他的密码和电子邮件,根据我的理解,这会产生新的令牌?我在哪里错过了这一点?现在,用户只是进入循环,从不登录...

任何帮助很多人赞赏!日Thnx

1 个答案:

答案 0 :(得分:0)

  •   

    退出设备中的Facebook应用。在模拟器中转到设置和Facebook注销

  •   

    或Safari浏览器facebook注销

再次清理项目并运行。它会要求再次登录您的应用程序。