0

我的应用程序支持使用 facebook 登录,但是当我注销并再次登录时,我不会被要求提供任何凭据 - 它会立即使用 iOS6 中的本机用户名登录。我想要在原生 facebook 应用程序中类似的东西: 点击时

当点击“不是你”时,facebook 会提供新的登录屏幕。

我跟着这个教程

问题似乎在这里的某个地方:

- (void)openSession
{
    NSArray *permissions=[NSArray arrayWithObjects: @"publish_stream", @"publish_actions",@"create_event", nil];
   // [FBSession open]

    [FBSession openActiveSessionWithPublishPermissions:permissions
                                       defaultAudience:FBSessionDefaultAudienceEveryone
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session,
       FBSessionState state, NSError *error) {

         [self sessionStateChanged:session state:state error:error];
     }];
}


- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen: {
            NSLog(@"Sesstion opened");
            UIViewController *topViewController =
            [self.navController topViewController];
            NSLog(@"Class: %@", [[topViewController presentedViewController] class]);
            if ([[topViewController presentedViewController]
                 isKindOfClass:[LoginViewController class]])
            {
                [topViewController dismissViewControllerAnimated:YES completion:nil];
            }

                ViewController *basic=(ViewController*)topViewController;
                NSLog(@"Populating details");
                [basic populateUserDetails];



        }
            break;
        case FBSessionStateClosed:
        {
            NSLog(@"Session closed");
            [FBSession.activeSession closeAndClearTokenInformation];

        }

        case FBSessionStateClosedLoginFailed:

            NSLog(@"Login failed");
            [self.navController popToRootViewControllerAnimated:NO];

            [FBSession.activeSession closeAndClearTokenInformation];

            [self showLoginView];
            break;
        default:
            break;
    }

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}
4

1 回答 1

2

我不确定 Facebook SDK 是否支持——尽管我可能错了。这个想法(据我了解)是 Facebook 登录允许当前登录的 Facebook 用户登录到您的应用程序。如果没有人登录 Facebook,则会显示凭据页面。提供有效凭据后,用户将登录到 Facebook,并将 auth_token 发送到您的应用程序。

关键是您无法验证与当前登录 Facebook 的用户不同的用户。这首先需要注销当前用户,我认为 Facebook 希望将这种“更改用户”功能保留到 Facebook 应用程序中。

另外,请注意,当从您的应用程序中注销时,用户会保持登录到 Facebook。这与适用于使用 Facebook 身份验证的网站的策略不同。在这种情况下,用户应该从网站和 Facebook 中注销。

于 2013-01-02T22:39:35.943 回答