fbloginview必须触及两次才能工作

时间:2014-03-27 16:51:37

标签: ios objective-c cocoa-touch facebook-ios-sdk

我正在开展一个有多人的项目。该应用程序设置为通过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];
    }];
}

任何想法为什么会这样做?可能导致问题的原因是什么?我很困惑这个问题。

1 个答案:

答案 0 :(得分:2)

不确定你已经解决了这个问题,但我刚刚解决了同样的问题。

这与您注销的方式有关。 使用此代码段:

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:[[FBSession alloc] init]];

通过这种方式,您可以清除活动会话,但是您已经创建了一个新会话,这就是我认为第一次点击的过程。