我正在使用 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/