从本地应用程序中退出Facebook

时间:2013-01-02 22:21:36

标签: ios facebook ios6

我的应用程序支持使用facebook登录,但是当我退出并再次登录时,我没有被要求提供任何凭据 - 它会立即使用iOS6中的本地用户名登录。我想要在本机facebook应用程序中的东西: When clicking "not you" facebook offers new login screen

点击"不是你" facebook提供新的登录屏幕。

我遵循了tutorial

问题似乎在某处:

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

1 个答案:

答案 0 :(得分:2)

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

关键是您无法对当前登录Facebook的用户进行身份验证。这首先需要退出当前用户,我认为Facebook希望保持这个"更改用户" Facebook应用程序的功能。

另请注意,从您的应用退出时,用户会保持登录Facebook状态。这与适用于使用Facebook身份验证的网站的策略不同。在这种情况下,用户应该从站点和Facebook注销。