2017-04-27 156 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