ios - 在 swift ios 10 上使用 Facebook 登录时浏览器页面空白

标签 ios swift facebook facebook-login

我正在使用 swift 3、ios 10 和 Facebook 的 swift sdk v0.2.0。

我刚刚在我的应用程序中实现了使用 facebook 登录,按下“继续使用 facebook”按钮将打开 safari(我在没有安装 facebook 应用程序的模拟器上运行)但是大约一半的时间浏览器会变成完全空白,没有导航栏或任何东西,控制台将输出此错误:

2017-08-03 12:40:05.276987-0500 Foster[30486:726822] [ViewService] 无法获取远程 View Controller 错误:错误:域=NSCocoaErrorDomain,代码=0

但有时浏览器确实设法加载和显示 facebook 登录页面,我能够正常登录 facebook 并继续使用我的应用程序。我还没有找到触发上述错误的原因,似乎是随机的。

我在 Facebook 登录时看到很多关于这个空白页面的问题,但它们通常与登录后的委托(delegate)有关,当 safari 设法加载登录页面时,它工作正常,我在之后立即得到空白页面按下“使用 Facebook 登录”按钮。大多数其他类似错误也会得到 code=4099

我已遵循 Facebook 的 swift 文档 (https://developers.facebook.com/docs/swift/login) 和 ios 文档 (https://developers.facebook.com/docs/facebook-login/ios/) 中的所有步骤。

我通过 cocoaPods 安装了 FacebookLogin 和 FacebookCore。

我已经更新了我的 plist 文件:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb...</string>
        </array>
    </dict>
</array>
<key>FacebookAppID</key>
<string>...</string>
<key>FacebookDisplayName</key>
<string>...</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>

我的应用委托(delegate):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    registerForPushNotifications()
    return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}

public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool{
    return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}

我的 View Controller :

@IBAction func loginButtonClicked(_ sender: UIButton) {
    let loginManager = LoginManager()
    loginManager.logOut()
    loginManager.logIn([ .publicProfile, .userFriends ], viewController: self) { [unowned self] loginResult in
        switch loginResult {
        case .failed(let error):
            print(error)
        case .cancelled:
            print("User cancelled login.")
        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            print("Facebook Access Token: " + accessToken.authenticationToken)

        }
    }
}

func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) {}

func loginButtonDidLogOut(_ loginButton: LoginButton) {
    print("Facebook LogOut")
}

钥匙串(keychain)共享已开启。

我见过很多有类似问题的人,但那里列出的解决方案都没有用。

更新

经过更多测试后,我只能在模拟器中复制错误,而不能在物理设备上复制

最佳答案

删除此代码-

public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool{
    return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}

将此代码添加到您的 appdelegate-

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
       return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}

关于ios - 在 swift ios 10 上使用 Facebook 登录时浏览器页面空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45495724/

相关文章:

ios - 结合 iOS 和 Web 分析

ios - Swift - 如何过滤多维数组

swift - tableView.setContentOffset(_, 动画 :) do not work after beginUpdates()

swift - SceneKit – 来自定向光的阴影取决于相机角度

iphone - 获取原始 Facebook Cookie 内容 iPhone

ios - 如何等待异步函数 Swift

ios - 在 Swift2 中使用 iOS9 压缩框架

ios - 如何在 Swift 中创建 PDF/A 文件?

javascript - FB.Data.query 具有更好的性能

ios - 回到 Swift 2 中的 Facebook 问题