0

我已经在我已经开发了几个月的应用程序中运行了 Facebook iOS SDK。在这一点上,我主要将 SDK 用于 SSO 目的。

自从我开始使用 iOS 6.0 以来,我一直看到“登录以使用带有 MY_APP 的 FB 帐户”模式阻止我当前视图的问题。
奇怪的是用户已经通过身份验证并且显然被授权使用我的应用程序。我可以获取用户的电子邮件地址等事实证明了这一点。

同样重要的是要注意,如果我单击“X”,它将关闭并且一切正常(用户已通过身份验证/授权)。如果我按照它告诉我的方式登录,它会显示“MY_APP 已被授权”模式,我无法单击“确定”按钮,但我可以单击“X”,再次让我回到我的视图,用户已通过身份验证和授权。

在这里你可以看到它:

在此处输入图像描述

要进行身份验证,我在以下方法中调用appdelegate

[appDelegate openSessionWithAllowLoginUI:YES];

以下是我的 appdelegate 中相关的 FB 方法:

// FACEBOOK STUFF
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    NSArray *permissions = [NSArray arrayWithObjects: @"email", nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                             [self sessionStateChanged:session state:status error:error];
                                         }];    
}

- (void)sessionStateChanged:(FBSession *)session 
                      state:(FBSessionState)state
                      error:(NSError *)error {
    // FBSample logic
    // Any time the session is closed, we want to display the login controller (the user
    // cannot use the application unless they are logged in to Facebook). When the session
    // is opened successfully, hide the login controller and show the main UI.
    switch (state) {
        case FBSessionStateOpen: {
            FBCacheDescriptor *cacheDescriptor = [FBFriendPickerViewController cacheDescriptor];
            [cacheDescriptor prefetchAndCacheForSession:session];
            [self sendAuthenticationStatusChangedNotification];
        }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            // FBSample logic
            // Once the user has logged in, we want them to be looking at the root view.
            [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];
    }    
}

- (BOOL)application:(UIApplication *)application 
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication 
         annotation:(id)annotation {
    // FBSample logic
    // We need to handle URLs by passing them to FBSession in order for SSO authentication
    // to work.
    return [FBSession.activeSession handleOpenURL:url];
}

编辑 1

我注意到这发生在我的一部手机上,而另一部则没有。无法使用的手机安装了旧版本的 FB 应用程序。更新 FB 应用程序阻止了此问题的发生。我仍然对避免其他人遇到相同问题的修复感兴趣。

编辑 2

这个问题暂时消失了,但现在即使安装了新的 facebook 应用程序,问题又回来了。请帮忙!

4

1 回答 1

0

对我来说,这个问题实际上是一个愚蠢的问题。我在打电话

[appDelegate openSessionWithAllowLoginUI:YES];

两次由于连接了两次的按钮单击事件。只要它只被调用一次,问题就消失了!

于 2012-12-28T03:34:44.983 回答