我正在执行以下代码以从我的iPhone应用程序注销Facebook:
if ([mFacebook isSessionValid]) {
[mFacebook logout];
}
此代码成功运行,并且在此之后调用委托,在其中我正在清除访问令牌:
- (void)fbDidLogout
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
但当我再次登录Facebook时,它不会询问用户名和密码。
我做错了什么?
您正在使用FB移动登录对话框吗?在Facebook.m中,添加以下代码以删除m.Facebook.com域中的cookie。
- (void)invalidateSession {
...
NSArray* facebookMCookies = [cookies cookiesForURL:
[NSURL URLWithString:@"https://m.facebook.com"]];
for (NSHTTPCookie* cookie in facebookMCookies) {
[cookies deleteCookie:cookie];
}
...
}
尝试在fbDidLogout块的末尾添加这些:
mFacebook.accessToken = nil;
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];
}
}
只需将此行添加到fbDidLogout方法
[mFacebook invalidateSession];
这肯定会让你从Facebook注销。
试试这个代码:
- (void) fbDidLogout {
// Remove saved authorization information if it exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]) {
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
}
不要忘记在AppDelegate中为facebook.h
创建一个实例。
尝试从Facebook应用程序注销。它可能只是从Facebook应用程序中获取令牌。