我将updateChildValues放在正确的位置吗?它目前位于signInWithCredential中.我还必须执行FBSDKGraphRequest来获取我感兴趣的信息存储在我的firebase数据库中.
我的firebase的Auth选项卡显示身份验证正在运行:
但数据库没有更新:
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 { // No error,No cancelling: // using the FBAccesstoken,we get a Firebase token let credential = FIRFacebookAuthProvIDer.credentialWithAccesstoken(FBSDKAccesstoken.currentAccesstoken().tokenString) // using the credentials above,sign in to firebase to create a user session FIRAuth.auth()?.signInWithCredential(credential) { (user,error) in print("User logged in the firebase") // adding a reference to our firebase database let ref = FIRDatabase.database().referenceFromURL("https://project-12345.firebaseio.com/") // guard for user ID guard let uID = user?.uID else { return } // create a child reference - uID will let us wrap each users data in a unique user ID for later reference let usersReference = ref.child("users").child(uID) // performing the Facebook graph request to get the user data that just logged in so we can assign this stuff to our Firebase database: let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graPHPath: "me",parameters: ["fIElds": "ID,name,email"]) graphRequest.startWithCompletionHandler({ (connection,result,error) -> VoID in if ((error) != nil) { // Process error print("Error: \(error)") } else { print("fetched user: \(result)") // Facebook users name: let username:Nsstring = result.valueForKey("name") as! Nsstring self.usersname = username print("User name is: \(username)") print("self.usersname is \(self.usersname)") // Facebook users email: let userEmail:Nsstring = result.valueForKey("email") as! Nsstring self.usersEmail = userEmail print("User Email is: \(userEmail)") print("self.usersEmail is \(self.usersEmail)") // Facebook users ID: let userID:Nsstring = result.valueForKey("ID") as! Nsstring self.usersFacebookID = userID print("Users Facebook ID is: \(userID)") print("self.usersFacebookID is \(self.usersFacebookID)") } }) // set values for assignment in our Firebase database let values = ["name": self.usersname,"email": self.usersEmail,"facebookID": self.usersFacebookID] // update our databse by using the child database reference above called usersReference usersReference.updateChildValues(values,withCompletionBlock: { (err,ref) in // if there's an error in saving to our firebase database if err != nil { print(err) return } // no error,so it means we've saved the user into our firebase database successfully print("Save the user successfully into Firebase database") }) } } })}
更新:
显然在10分钟左右之后,数据库被更新了空的Facebook数据…不知道为什么它需要这么长时间.这是一个截图:
解决方法 您应该只在执行完成块graphRequest.startWithCompletionHandler时更新值,因为那时您将从Facebook获取数据!usersReference.updateChildValues需要在graphRequest.startWithCompletionHandler里面({(连接,结果,错误) – >在完成块中无效.我已经在下面附上了它.试试!!
func showLoginVIEw() { let loginManager = FBSDKLoginManager() loginManager.logInWithReadPermissions(fbPermissions,error) -> VoID in if ((error) != nil) { // Process error print("Error: \(error)") } else { print("fetched user: \(result)") // Facebook users name: let username:Nsstring = result.valueForKey("name") as! Nsstring self.usersname = username print("User name is: \(username)") print("self.usersname is \(self.usersname)") // Facebook users email: let userEmail:Nsstring = result.valueForKey("email") as! Nsstring self.usersEmail = userEmail print("User Email is: \(userEmail)") print("self.usersEmail is \(self.usersEmail)") // Facebook users ID: let userID:Nsstring = result.valueForKey("ID") as! Nsstring self.usersFacebookID = userID print("Users Facebook ID is: \(userID)") print("self.usersFacebookID is \(self.usersFacebookID)") //graphRequest.startWithCompletionHandler may not come back during serial //execution so you cannot assume that you will have date by the time it gets //to the let values = ["name": //By putting it insIDe here it makes sure to update the date once it is //returned from the completionHandler // set values for assignment in our Firebase database let values = ["name": self.usersname,"facebookID": self.usersFacebookID] // update our databse by using the child database reference above called usersReference usersReference.updateChildValues(values,ref) in // if there's an error in saving to our firebase database if err != nil { print(err) return } // no error,so it means we've saved the user into our firebase database successfully print("Save the user successfully into Firebase database") }) } }) } } })}总结
以上是内存溢出为你收集整理的Swift / Firebase:如何在创建帐户时将Facebook用户正确存储到Firebase数据库中?全部内容,希望文章能够帮你解决Swift / Firebase:如何在创建帐户时将Facebook用户正确存储到Firebase数据库中?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)