我知道如何登录
[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,它有一个委托。但没有一个代表被召集。
答案 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? 杰里