我正在开展一个有多人的项目。该应用程序设置为通过Facebook登录用户。有一个提交的错误说,如果你退出Facebook,它会立即让你重新登录。不是每次,但经常。在检查之后,我发现当你第一次启动应用程序并注销时,它实际上会立即将你重新登录。这是记录用户的代码:
[FBSession.activeSession closeAndClearTokenInformation];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kHOUserDefaults];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:kHOuserDefaultsWasRemoved
object:nil];
在编辑源代码以尝试解决问题之后,这就是代码的样子:
[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kHOUserDefaults];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:kHOuserDefaultsWasRemoved
object:nil];
既然代码看起来像这样,它就不会像以前一样在注销后立即登录。但是,它确实需要在FBLoginView上单击两次。如果它通常会让您重新登录,则只需要一次触摸即可。该类设置为facebook API的委托。这是处理触摸事件的类看起来像(包括< FBLoginViewDelegate>):
-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user{
self.userAuthentication.user = user;
self.userAuthentication.accessToken = [[[FBSession activeSession] accessTokenData] accessToken];
[SVProgressHUD showWithStatus:@"Logging in"];
[self.userAuthentication authenticatedUserFromFacebook:^(NSString *aString, NSNumber *aNumber, id aResult) {
[SVProgressHUD showSuccessWithStatus:aString];
}];
}
任何想法为什么会这样做?可能导致问题的原因是什么?我很困惑这个问题。
答案 0 :(得分:2)
不确定你已经解决了这个问题,但我刚刚解决了同样的问题。
这与您注销的方式有关。 使用此代码段:
[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:[[FBSession alloc] init]];
通过这种方式,您可以清除活动会话,但是您已经创建了一个新会话,这就是我认为第一次点击的过程。