4

在我的应用程序获得了在 iOS 6 设置中注册的 Facebook 帐户的访问权限后,我从我的 Facebook 隐私设置中撤消了该应用程序。然后我尝试通过调用 [FBSession openActiveSessionWithReadPermissions...] 将我的应用程序与 facebook 重新连接,并且该方法使用旧访问令牌创建 facebook 会话,该令牌已经是无效的,而无需再次请求权限授予。

我认为这个问题与这个问题有关(Facebook SDK 3.1 - 验证访问令牌时出错),据说它已在 SDK 3.1.1 中得到修复。

但是,我正在使用 SDK 3.1.1 并通过在发生无效访问令牌错误时手动调用 accountStore renewCredentialsForAccount 来解决此问题。

4

1 回答 1

5

基于这个线程,我发现验证有效会话的唯一方法是执行简单的图形 API 调用。如果发生错误,FBSession.activeSession.isOpen将返回NO,这很好地表明令牌已过期。

+ (void) ValidateSession
{    
    FBRequest *userDetails = [[FBRequest alloc] initWithSession:FBSession.activeSession graphPath:@"/me"];
    [userDetails startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary *result, NSError *error) {

        if (error) {
            if (FBSession.activeSession.isOpen) {
                // Less probable, so check error code.
            } else {
                // Bingo: here we know for sure that the token was useless.
                // Expected behavior: reauthorize.
            }
        } else if (result) {
            NSLog(@"%@", result);
            // token is valid, continue
        }

    }];
}

即使在应用程序被删除之后,iOS 似乎也会保留 Facebook 令牌,因此最好在需要时重新确保令牌有效。

于 2013-01-21T21:18:47.173 回答