0

我正在我的应用程序中集成 facebook 登录。我只是希望用户能够登录并且我得到他的生日和位置。

我获得了最新的 Facebook SDK 并成功地将其添加到我的应用程序中。我还在 facebook 上创建了一个新应用程序,并添加了提供给我的应用程序的密钥。

我创建了一个“使用 facebook 登录”按钮并完成了以下操作

当用户点击按钮时

// handler for button click
- (IBAction)facebookLoginTouched:(id)sender {
    [self openSessionWithAllowLoginUI:YES];
}

此方法将向用户显示 facebook 登录页面以获得他的许可

-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"user_location",
                            @"user_birthday",
                            nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self HandleLogin];
                                     }];
}

然后如果登录和许可成功

- (void)HandleLogin {
    if (FBSession.activeSession.isOpen) {
        //THIS IS NEVER REACHED

        [FBRequestConnection
         startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                       id<FBGraphUser> user,
                                       NSError *error) {
             //DO SOMETHING WITH THE USER INFO
         }];
    }
}

我的问题:

当我点击按钮时,facebook 页面正确进入,我输入了我的用户名/密码。它正确记录了我,并且我允许该应用程序访问我的信息。完成后,我成功返回应用程序。

但是,当代码到达时,FBSession.activeSession.isOpen它会返回 false。

为什么我正确登录并授予权限后会话仍然关闭?

任何帮助是极大的赞赏。

谢谢

4

1 回答 1

2

您可能缺少处理从 Facebook 应用返回的代码。在您的应用委托实现文件中添加以下内容:

- (BOOL)application:(UIApplication *)application 
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    // attempt to extract a token from the url
   return [FBSession.activeSession handleOpenURL:url]; 
}
于 2012-11-14T21:26:31.907 回答