如何在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