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