Facebook 登录不会在登录后关闭登录对话框

Facebook Login doesn't doesn't dismiss Login Dialog after login

使用 Facebook iOS SDK 中的 LoginManager 登录,如下所示:

let loginManager = LoginManager()
loginManager.logIn([.publicProfile, .email], viewController: self) { (loginResult) in

登录对话框通过 Safari 打开 facebook.com,我有一个按钮可以

Log In with the Facebook App

当我在 Facebook 应用程序中单击 "Continue" 时,我返回到我的应用程序,但是即使 loginResult returns .success,登录对话框也没有关闭。

这是登录成功后返回我的应用后显示的内容:

我唯一的选择就是点击'Cancel'。登录对话框似乎是 SFAuthenticationViewController,目前在 Google 搜索中包含 0 个结果。

似乎其他人在过去遇到的问题是,在他们的 AppDelegate 中,他们没有在 application:openURL:options: 中调用适当的授权流程处理,但已成功调用,如下所示:

@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    print("application open url\n\(url)\noptions \(options)")

    if url.absoluteString.hasPrefix("fb") {
       print("Finishing Facebook log in flow")
       return SDKApplicationDelegate.shared.application(application, open: url, options: options)
    } else {
        print("Finishing Google sign in flow")
        return GIDSignIn.sharedInstance().handle(url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: [:])
    }
}

我唯一能想到的是一些不兼容问题,因为我在 iOS 11 Developer beta 上使用 Swift 4,而且 [=15= 没有在线结果] 这似乎正在被使用。

我不确定为什么对话框没有自动关闭。


更新:

我创建了一个全新的空白应用程序,只有一个按钮以及 FacebookCoreFacebookLogin 依赖项,但问题仍然存在。

遵循的步骤:

  1. https://developers.facebook.com/docs/facebook-login/ios
  2. https://developers.facebook.com/docs/swift/getting-started
  3. https://developers.facebook.com/docs/swift/login

更新:

现在使用 SDK 0.3.0https://github.com/facebook/facebook-sdk-swift/releases


更新,Facebook官方回复:

Hi Gareth,

Thanks for flagging this! iOS 11 is still in beta, and we don't currently support it.

Best regards, Günay


这是设备上的错误 运行 iOS 11. 在设备上工作正常 运行 iOS 10.

此处提交错误报告:https://github.com/facebook/facebook-sdk-swift/issues/172

我在 Swift 3 iOS 11

上也遇到同样的问题

很可能您在 AppDelegate 中忘记了以下功能:

func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey : Any] = [:]
    ) -> Bool {
        ApplicationDelegate.shared.application(
            app,
            open: url,
            sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
            annotation: options[UIApplication.OpenURLOptionsKey.annotation]
        )
    }