iOS – Facebook Connect注销不删除登录详细信息?

我在另一个项目中使用了Facebook Connect,问题相对较少,但是在我当前的项目中,似乎当我打电话给[facebook logout]; 它不会删除用户详细信息。 如果我然后重新启动应用程序,我在didFinishLaunchingWithOptions函数中有以下内容:

 facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXXXX" andDelegate:self]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]){ facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } NSLog(@"startup login"); [self loginToFacebook];//attempt to login automatically on startup 

我的loginToFacebook函数是这样的:

 - (void)loginToFacebook { NSLog(@"Logging into facebook"); //set up facebook and login in automatically if possible NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]){ facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } if (![facebook isSessionValid]){ //get permissions that user will need to agree to us using NSArray *permissions = [[NSArray alloc] initWithObjects: @"user_likes",@"read_friendlists",@"offline_access", @"publish_stream", nil]; //authorise our login [facebook authorize:permissions]; [permissions release]; } else { [facebook authorize:nil]; } } 

就我而言,这次我应该被提示用我的电子邮件和密码登录。 我主要使用模拟器,所以Facebook应用程序本身不是原因,在Facebook.h类中我已经改变了

 [self authorizeWithFBAppAuth:NO safariAuth:YES]; 

 [self authorizeWithFBAppAuth:NO safariAuth:NO]; 

然而,发生的事情是facebook窗口短暂闪烁并消失,正如我预期的那样,当我已经登录时。然后它会从我之前的登录详细信息中加载我的id,姓名,朋友列表等。 我不再可能改变用户! 我应该补充一点,我有以下代码,相应地打印’注销’:

 - (void)fbDidLogout{ NSLog(@"Logged out of facebook"); } 

…在调用[facebook logout]时打印到控制台。 我也有正确的url方案,所以没有问题。

正如我所说,我已经在另一个应用程序上工作,但我看不出这次我可以忽略的东西。 我欢迎任何建议,因为我怀疑这是一件非常简单的事情。

编辑:我刚刚在设备上测试过,尝试登录Facebook会导致应用程序崩溃。 我怀疑这是因为它试图使用’存储’信息登录,因为我还没有登录设备,因此该信息不存在。 我还在调查,但如果有任何可以看到一个明显的缺陷,我会非常感激。

Edit2:我尝试使用safecase的示例删除cookie。 我还在a)didFinishLaunchingWithOptions和b)fbDidLogout期间打印出所有的cookie,我得到以下内容:

a)`2012-05-18 10:40:40.665 MyApp [15545:17003](“”,

 "", "", "", "", "", "", "", "" 

)`

b) 2012-05-18 10:41:16.530 MyApp[15545:17003] ( )

由于它变为空,我认为它们会被删除。 但是在重新打开应用程序时,他们又一次在那里。

编辑3:我发现的唯一方法是在应用程序打开后立即删除所有cookie,但这意味着用户必须每次登录,即使他们在上次打开应用程序时自己登录。 这是暂时的修复,我仍然不确定它为什么不能正常工作。

当用户单击注销并删除存储在userdefault中的所有密钥时,您提供此方法

 - (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]; } } } 

注意:以及FB应用程序在NSUserDefaults存储登录信息, NSHTTPCookieStorage使用名称m_user将登录信息存储在m_user 。 您可以删除此记录以使FB再次要求您登录信息。

希望这些信息对您有所帮助。

[appDelegate.session closeAndClearTokenInformation];

只是那行代码,帮我清除了我的代币。

  [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"FBAccessTokenKey"]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"FBExpirationDateKey"]; 
Interesting Posts