iOS SDK 似乎无法在 iOS 6 中处理撤销的访问令牌

Posted

技术标签:

【中文标题】iOS SDK 似乎无法在 iOS 6 中处理撤销的访问令牌【英文标题】:iOS SDK does not seem to handle revoked access token in iOS 6 【发布时间】:2012-10-25 14:57:47 【问题描述】:

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

我认为这个问题与这个问题(Facebook SDK 3.1 - Error validating access token)有关,据说在 SDK 3.1.1 中已修复。

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

【问题讨论】:

我遇到了与您在此处描述的相同的问题,并且我已经能够使用接受的方法解决它(我们最好说绕过它)您指出的question 的答案。谢谢! 【参考方案1】:

基于this thread,我发现验证有效会话的唯一方法是执行简单的图形 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 令牌,因此最好在需要时重新确保令牌有效。

【讨论】:

以上是关于iOS SDK 似乎无法在 iOS 6 中处理撤销的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6.1 iOS Distribution 总是被撤销或丢失

Facebook SDK - iOS6 登录弹出窗口无法关闭

无法在 Xcode 3.2.6 上为 iOS 构建 Facebook SDK

带有 iOS 6 SDK 的 Xcode 5:“UIAccelerometer”不可用:在 OS X 上不可用

Xcode 8 Beta 6 不支持 iOS 10 Beta 7 sdk

CocoaLibSpotify 无法在 XCode 4.6 / iOS 6.1 中编译