3

我目前正在创建一个 iOS 应用程序,它允许用户从我的应用程序的设置视图控制器中连接/断开他们的 Facebook 帐户。Facebook 的 SDK 开发人员文档建议在 FBSession.activeSession 类上调用“closeAndClearTokenInformation”方法,该方法根据文档“关闭内存中的会话,并清除与该会话相关的任何持久缓存”。

我研究过这个问题,并注意到很多人在使用 Facebook 的 SDK 时遇到了同样的差异;具体来说,在“关闭和清除”activeSession 之后,在打开一个新会话时,应用程序会跳转到 iphone 的浏览器(快速切换),但不会提示用户使用他们的 facebook 凭据登录。相反,会通知用户“他们已经获得了此应用程序的授权,他们应该按‘确定’继续。”

我期待 Facebook 的 SDK 再次提示用户输入他们的电子邮件/电话号码和密码,因为我从上一个会话中清除了他们的会话信息。我还从用户默认值中删除了所有令牌信息,同时“清除和关闭”会话,希望这能解决我的问题,但这个问题仍然存在。

以下是我试图清除我的 Facebook 会话信息的方法:

[[FBSession activeSession] closeAndClearTokenInformation];
[[FBSession activeSession] close];
[FBSession setActiveSession:nil];
NSLog(@"The active facebook session: %@", [[FBSession activeSession] description]);

这是我的输出控制台显示的内容:

2013-04-01 17:07:11.759 RoyalCourt Debug[4728:c07] The active facebook session:
<FBSession: 0xb86e060, state: FBSessionStateCreated, loginHandler: 0x0, appID:
164860420329245, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy:
0xb864650>, expirationDate: (null), refreshDate: (null), 
attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:()>

我想知道:

  1. 以前的会话信息存储在哪里,如何删除它?
  2. 为什么 SDK 在调用 [[FBSession activeSession] closeAndClearTokenInformation] 方法后并没有真正清除所有缓存的会话数据?是否需要采取其他步骤才能完全删除所有以前的 Facebook 会话信息?
4

1 回答 1

1

iOS 也缓存 facebook 令牌。您还需要清除它以摆脱旧令牌

ACAccountStore *store = [[ACAccountStore alloc] init];
        NSArray *fbAccounts = [store accountsWithAccountType:[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]];
        for (ACAccount *fb in fbAccounts) {
            [store renewCredentialsForAccount:fb completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {

            }];
        }
于 2014-03-25T20:22:41.513 回答