0

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

当我向用户请求权限时,默认 UI 会呈现给他以接受权限,然后当他单击“确定”时,它将从 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]; 
}
4

1 回答 1

0

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

[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView
                              completionHandler:^(FBSession *session, FBSessionState status, NSError *error)handler]
于 2012-11-21T10:15:18.757 回答