2016-06-13 110 views
0

Firebase 2.5.1,我曾經這樣做,這是工作:火力地堡3.X - Facebook的登錄

@IBAction func facebookLoginDidTouch(sender: AnyObject) { 

    let facebookLogin = FBSDKLoginManager() 

    facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { 
    (facebookResult, facebookError) -> Void in 
     if facebookError != nil { 
      print("Facebook login failed. Error \(facebookError)") 
     } else if facebookResult.isCancelled { 
      print("Facebook login was cancelled.") 
     } else { 
      let accessToken = FBSDKAccessToken.currentAccessToken().tokenString 
      myRootRef.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in 

        if error != nil { 
         print("Login failed. \(error)") 
        } else { 
         print("Logged in!") 
         let newUser = [ 
          "provider": user.provider, 
          "imageUrl": user!.providerData["profileImageURL"] as String, // etc 
         ] 
        } 
      }) 
     } 
    }) 
} 

現在我想在Firebase 3.x實現這一目標。不過,我糊塗了我應該怎樣把權限和東西

這是我試過到目前爲止

@IBAction func facebookLoginDidTouch(sender: AnyObject) { 

    let facebookLogin = FBSDKLoginManager() 

    let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) 

    FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in 
    if error != nil { 
     print("Login failed. \(error)") 
    } else { 
     print("Logged in!") 

     let newUser = [ 
      "provider": user.provider, 
      "imageUrl": user!.providerData["profileImageURL"] as String 
     ] 
    } 
    }) 
} 

更新:

facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { 
    (facebookResult, facebookError) -> Void in 
    if facebookError != nil { 
     print("Facebook login failed. Error \(facebookError)") 
    } else if facebookResult.isCancelled { 
     print("Facebook login was cancelled.") 
    } else { 
     // your firebase authentication stuff.. 

     let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) 

     FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in 
      if error != nil { 
       print("Login failed. \(error)") 
      } else { 
       print("Logged in!") 

       let userID = Helpers.extractUID(user!) 

       let rootRef = FIRDatabase.database().reference() 
       let userRef = rootRef.child("users").child(userID) 

       userRef.observeEventType(.Value, withBlock: { snapshot in 
        if snapshot.value is NSNull { 
         let newUser = [ 
          "providerId": user?.providerID, 
          "displayName": user?.displayName, 
         ] 
         userRef.setValue((newUser as! AnyObject)) 
         // perform segue 
        } 
       }) 
      } 
     }) 
+0

in else part ... add this stuff ...'if facebookError!= nil { print(「Facebook登錄失敗。錯誤\(Facebook錯誤)「) } else if facebookResult.isCancelled {」Facebook登錄被取消。「) } else {let credential ...}' –

回答

2

在成功與Facebook登錄並獲得用戶數據返回...您必須添加Firebase身份驗證內容,例如

@IBAction func facebookLoginDidTouch(sender: AnyObject) { 

    let facebookLogin = FBSDKLoginManager() 

    facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { 
    (facebookResult, facebookError) -> Void in 
     if facebookError != nil { 
      print("Facebook login failed. Error \(facebookError)") 
     } else if facebookResult.isCancelled { 
      print("Facebook login was cancelled.") 
     } else { 
      // your firebase authentication stuff.. 

      let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) 

      FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in 
      if error != nil { 
        print("Login failed. \(error)") 
      } else { 
       print("Logged in!") 

      } 
      }) 
     } 
    }) 
} 
+0

'您的firebase認證內容'否則,或者你的意思是讓'憑證...'的東西? – senty

+0

檢查上面編輯的答案....是的,你需要提供Firebase身份驗證的東西 –