I am trying to save users in a firebase database. I use FBSDKLoginManager()to create an account / login. After creating the account, I want to save users to my firebase database. Now I can enter into the system and their e-mail appears on the Auth firebase tab (see. Screenshot), but mine updateChildValuesdid not seem to affect (see. Also a screenshot).
Am I putting updateChildValuesin the right place? It is currently within signInWithCredential. I also have to execute FBSDKGraphRequestto get the information that I am interested in storing in my firebase database.
My firebase's Auth tab shows how authentication works:

But the database is not updated:

func showLoginView() {
let loginManager = FBSDKLoginManager()
loginManager.logInWithReadPermissions(fbPermissions, fromViewController: self, handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
if ((error) != nil) {
print("Error loggin in is \(error)")
} else if (result.isCancelled) {
print("The user cancelled loggin in")
} else {
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
print("User logged in the firebase")
let ref = FIRDatabase.database().referenceFromURL("https://project-12345.firebaseio.com/")
guard let uid = user?.uid else {
return
}
let usersReference = ref.child("users").child(uid)
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, email"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil) {
print("Error: \(error)")
} else {
print("fetched user: \(result)")
let userName:NSString = result.valueForKey("name") as! NSString
self.usersName = userName
print("User Name is: \(userName)")
print("self.usersName is \(self.usersName)")
let userEmail:NSString = result.valueForKey("email") as! NSString
self.usersEmail = userEmail
print("User Email is: \(userEmail)")
print("self.usersEmail is \(self.usersEmail)")
let userID:NSString = result.valueForKey("id") as! NSString
self.usersFacebookID = userID
print("Users Facebook ID is: \(userID)")
print("self.usersFacebookID is \(self.usersFacebookID)")
}
})
let values = ["name": self.usersName, "email": self.usersEmail, "facebookID": self.usersFacebookID]
usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
if err != nil {
print(err)
return
}
print("Save the user successfully into Firebase database")
})
}
}
})
}
Update:
Apparently, after 10 minutes or so, the database was updated with empty data on Facebook ... I don’t know why it took so long. Here is a screenshot:

source
share