Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中注销Facebook_Facebook_Cocoa Touch - Fatal编程技术网

如何在iOS中注销Facebook

如何在iOS中注销Facebook,facebook,cocoa-touch,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 o

我知道如何登录

[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:会话状态:状态错误:错误]处调用;注销后

那我该怎么注销呢


我查看了facebook上的Scrumptous示例,找不到他们的注销机制。看起来他们使用的是专门的facebook viewController,它有一个委托。但是没有调用任何委托。

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

- (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之后,它们仍然返回打开的会话

另一个选项是在检查活动会话时使用以下条件

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

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

不确定是否还有人因此而被咬,但使用最新版本的Facebook SDK,我无法让iPad在注销后被迫登录。这里仍然有一些奇怪的地方——“清除cookies”代码被跳过了——有没有其他方法可以清除iPad中的cookies?
Jerry

所以我调用closeAndClearTokenInformation?@JimThio是正确的,你可以更确定地检查该方法的实现。但它是正确的:)编辑了我的答案。给这三个打电话,确定一下,疯狂的虫子。:)有趣的。。。所以您调用了这三个方法:closeAndClearTokenInformation、close和setActiveSession:nil?Cookie的技巧也很有趣,因为我认为我们也遇到了这个问题,即使在注销时,Facebook SDK似乎也会检测到Cookie的存在并维护会话,或者以某种方式重新验证。有人知道3.8中是否仍然存在这些问题吗?
if (FBSession.activeSession.isOpen)
 //logged in
else
 //not logged in