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

问题描述:

我使用的是swift 3,ios 10和Facebook的swift sdk v0.2.0。在swift ios上使用Facebook登录时的空白浏览器页面10

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

2017-08-03 12:40:05.276987-0500 Foster[30486:726822] [ViewService] Failed to get remote view controller with error: Error: domain=NSCocoaErrorDomain, code=0

但有时浏览器管理加载和显示Facebook登录页面,我能够登录到Facebook的正常并继续使用我的应用程序。我还没有找到什么触发上述错误,似乎是随机的。

我已经看到很多关于这个空白页面上facebook登录的问题,但他们通常与登录后的委托相关,当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> 

我的应用程序委托:

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) 
} 

我的ViewController:

@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") 
} 

钥匙扣共享上。

我已经看到一个很多的一堆人有类似的问题,但没有列出的解决方案工作。

更新

更多的测试后,我只能够复制错误在模拟器,而不是一个物理设备上

我觉得你的问题的的appDelegate功能之一,尝试改变在您的appDelegate第二个功能为以下内容:

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

    return FBSDKApplicationDelegate.sharedInstance().application(
     app, 
     open: url as URL!, 
     sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, 
     annotation: options[UIApplicationOpenURLOptionsKey.annotation] 
    ) 

} 

你错过了返回sourceApplication,这是黑屏的原因。

删除此代码 -

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) 
} 
添加该代码