Facebook:当我返回我的应用程序时,登录和权限屏幕没有关闭

时间:2012-11-21 09:20:47

标签: objective-c ios facebook-ios-sdk

我正在将facebook登录集成到我的应用程序中。

当我向用户请求权限时,默认UI会显示给他以接受权限,然后当他点击“okay”时,它将从ui返回到我的应用程序以继续。

然而,默认的权限UI在浏览器中保持打开状态(如果我退出应用程序并打开浏览器,我仍然会看到之前提交给他的权限UI。 有没有办法在用户授​​权后我可以在浏览器中关闭页面?

希望我很清楚

这是我正在使用的代码:

此方法将向用户显示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) {

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

处理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]; 
}

1 个答案:

答案 0 :(得分:0)

Facebook SDK很有问题,我会说。就个人而言,我很不高兴将FB图片共享集成到几个项目中(而他们的开发人员发布了几个新的SDK)。我不知道,为什么浏览器重定向变得流行,老实说,我不喜欢它。一般来说,我不认为有可能以某种方式从浏览器中清除这些不需要的内容,而无需从应用程序中打开新的URL,因为它不是解决方案。我建议强制 FB SDK使用 WebView 。在我使用的最新版本中,当您使用自定义行为创建新会话时,会设置此项。代码应该像这样或非常类似:

[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView
                              completionHandler:^(FBSession *session, FBSessionState status, NSError *error)handler]