Facebook sdk:ActiveSession在我允许后仍然关闭

时间:2012-11-14 17:18:18

标签: objective-c ios facebook-graph-api

我正在将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。

为什么在我正确登录并获得权限后会话仍然关闭?

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:2)

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

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