我使用的是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] Failed to get remote view controller with error: Error: domain=NSCocoaErrorDomain, code=0
但有时浏览器会设法加载并显示Facebook登录页面,我可以正常登录到Facebook并继续使用我的应用程序。我没有找到触发上述错误的内容,似乎是随机的。
我在Facebook登录时看到了很多关于这个空白页面的问题,但它们通常与登录后的委托相关,当safari设法加载登录页面时,这很正常,我得到了按"登录Facebook"后立即空白页面按钮。此外,大多数其他类似错误都会获得code=4099
。
我已按照Facebook的快速文档(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")
}
钥匙串共享已开启。
我见过很多有类似问题的人的很多,但没有列出的解决方案有效。
更新
经过更多测试后,我只能在模拟器中复制错误,而不是在物理设备上复制
答案 0 :(得分:1)
删除此代码 -
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
在appdelegate中添加此代码 -
Console
答案 1 :(得分:0)
我认为您在其中一个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,这就是空白屏幕的原因。