如何从iOS应用程序中完全“关闭并清除”FBSession的activeSession信息?

时间:2013-04-01 23:57:38

标签: ios facebook-graph-api

我目前正在创建一个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会话信息?

1 个答案:

答案 0 :(得分: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) {

            }];
        }