2017-04-27 159 views
0

每次我尝试用Facebook最近登录时,它都不起作用,它显示下面的错误。这发生在iOS模拟器和实际设备上。iOS Xcode 8.3 Facebook SDK登录错误

2017-04-27 10:18:04.361 Colour Confuse[43796:1851249] -canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)" 2017-04-27 10:18:04.362 Colour Confuse[43796:1851249] Falling back to storing access token in NSUserDefaults because of simulator bug 2017-04-27 10:18:04.363 Colour Confuse[43796:1851249] -canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"

它显示了ViewController中,以允许用户登录,但是当我点击继续它引发以下错误,然后视图一片空白。如果我然后按'完成'关闭FB View Controller,它会完全崩溃应用程序。

Facebook login was cancelled by user. 2017-04-27 10:18:07.346 Colour Confuse[43796:1851249] -canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)" 2017-04-27 10:18:07.346 Colour Confuse[43796:1851249] Falling back to storing access token in NSUserDefaults because of simulator bug 2017-04-27 10:18:07.347 Colour Confuse[43796:1851249] -canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)" 2017-04-27 10:18:07.876 Colour Confuse[43796:1851249] Warning: Attempt to present <FBSDKContainerViewController: 0x7fe74da048c0> on <Colour_Confuse.GameViewController: 0x7fe74db02d80> whose view is not in the window hierarchy!

它一直工作正常,直到几天以前,我只是不知道,为什么它的suddently停止工作,因为我没有改变任何东西。

let facebookLogin = FBSDKLoginManager() 
facebookLogin.logIn(withReadPermissions: ["email", "user_friends", "public_profile"], from: self.view?.window?.rootViewController) { (result, error) in 
     if result?.isCancelled == true { 
      self.fbLoginError() 
     } else if error == nil { 
      let credential = FIRFacebookAuthProvider.credential(withAccessToken: (result?.token.tokenString)!) 
      FIRAuth.auth()?.signIn(with: credential, completion: { (user: FIRUser?, error:Error?) in 
       if error == nil { 
        print("FB and Firebase Login Successful") 

        }) 
       } else { 
        print(error) 
        self.fbLoginError() 
       } 
      }) 
     } else { 
      print(error) 
      self.fbLoginError() 
     } 
    } 

的AppDelegate

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

    FBSDKProfile.enableUpdates(onAccessTokenChange: true) 

    FIRApp.configure() 

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 

    return true 
} 


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


    func applicationDidBecomeActive(_ application: UIApplication) { 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 

    FBSDKAppEvents.activateApp() 

} 

if语句它从来没有击中任何的,只是忽略了完成关闭内的一切。

我也有钥匙链共享启用

PLIST

PLIST

+0

你能展示一些代码,你必须尝试 –

+0

可以显示plist文件 –

+0

我想你忘记实现在AppDelegate类FUNC applicationDidBecomeActive这种方法是什么(_应用:UIApplication的){ FBSDKAppEvents.activateApp() } –

回答

0

试试这个样子!

Appdelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     FIRApp.configure() 
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
    } 

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) 
    return handled 
} 
func applicationDidBecomeActive(_ application: UIApplication) { 
    FBSDKAppEvents.activateApp() 
} 

ViewController.swift

@IBAction func facebookLogin(sender: UIButton) { 
    let fbLoginManager = FBSDKLoginManager() 
    fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in 
     if let error = error { 
      print("Failed to login: \(error.localizedDescription)") 
      return 
     } 

     guard let accessToken = FBSDKAccessToken.current() else { 
      print("Failed to get access token") 
      return 
     } 

     let credential = FIRFacebookAuthProvider.credential(withAccessToken: accessToken.tokenString) 

     // Perform login by calling Firebase APIs 
     FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in 
      if let error = error { 
       print("Login error: \(error.localizedDescription)") 
       let alertController = UIAlertController(title: "Login Error", message: error.localizedDescription, preferredStyle: .alert) 
       let okayAction = UIAlertAction(title: "OK", style: .cancel, handler: nil) 
       alertController.addAction(okayAction) 
       self.present(alertController, animated: true, completion: nil) 

       return 
      } 

      // Present the main view 
      if let viewController = self.storyboard?.instantiateViewController(withIdentifier: "MainView") { 
       UIApplication.shared.keyWindow?.rootViewController = viewController 
       self.dismiss(animated: true, completion: nil) 
      } 

     }) 
    } 
} 

的Info.plist 插入下面的XML片段

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
    <key>CFBundleURLSchemes</key> 
    <array> 
     <string>fb1249988161716400</string> 
    </array> 
    </dict> 
</array> 
<key>FacebookAppID</key> 
<string>1249988161716400</string> 
<key>FacebookDisplayName</key> 
<string>YourString</string> 
<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fb-messenger-api</string> 
    <string>fbauth2</string> 
    <string>fbshareextension</string> 
</array> 
+0

嗨,我\ m从SKScene运行这个。它已经运行好几个月了。只有在昨天才停止工作。在执行上面的代码后,它仍然会抛出相同的错误和警告。 – Ryann786

+0

@ Ryann786你实现的代码,所以它不是昨天工作 –

+0

我做的唯一的区别是我退出了我的应用程序,并再次测试新用户,它没有工作,但我没有改变任何登录代码。 – Ryann786