如何在iOS中退出Facebook

时间:2013-02-15 04:30:19

标签: facebook cocoa-touch

我知道如何登录

[FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:YES completionHandler:
 ^(FBSession *session,FBSessionState state, NSError *error) {
     [self sessionStateChanged:session state:state error:error];//This is done on main thread already
 }];

事情是在退出时做什么,比如当用户按下注销按钮时?

目前我只是做

[FBSession.activeSession closeAndClearTokenInformation];
[[NSNotificationCenter defaultCenter] postNotificationName:FACEBOOKSESSIONCHANGED object:self];

然而,我不认为这是真的。 [FBSession.activeSession closeAndClearTokenInformation];应该在[self sessionStateChanged:session state:state error:error]中调用;退出后。

那我该怎么做才能退出?

我查看来自facebook的scrumptuous样本,我找不到他们退出的机制。看来他们使用专门的facebook viewController,它有一个委托。但没有一个代表被召集。

2 个答案:

答案 0 :(得分:1)

注销机制,它们只是通过释放它并将其设置为nil来使访问令牌无效。但是如果你的登录使用的是safari,那么cookie仍然存在。因此,下次如果用户打开safari并尝试访问Facebook,则会说它已经被授权。 要删除cookie,我使用以下方法

- (void)fbDidLogout
{
  NSLog(@"Logged out of facebook");
  NSHTTPCookie *cookie;
  NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  for (cookie in [storage cookies])
   {
       NSString* domainName = [cookie domain];
       NSRange domainRange = [domainName rangeOfString:@"facebook"];
       if(domainRange.length > 0)
       {
            [storage deleteCookie:cookie];
       }
   }
}

更确定你也可以调用,因为一些bug甚至在调用closeAndClearTokenInformation后返回打开的会话。 https://developers.facebook.com/bugs/497294866962479?browse=search_507cb8ebc4f025673237228

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];

其他选项是在检查活动会话时使用以下条件。

if (FBSession.activeSession.isOpen)
 //logged in
else
 //not logged in

因为FBSession.activeSession.state正在返回FBSessionStateOpen,而不是FBSessionStateCreatedTokenLoaded。

答案 1 :(得分:0)

不确定是否还有人因此而被咬,但使用最新版本的Facebook SDK,我无法让iPad在退出后被迫登录。这里还有一些古怪的东西 - 清晰的饼干'代码正在跳过 - 有没有不同的方法来清除iPad中的cookie? 杰里