SwiftFirebase:如何在创建帐户时将Facebook用户正确存储到Firebase数据库中?

SwiftFirebase:如何在创建帐户时将Facebook用户正确存储到Firebase数据库中?,第1张

概述我正在尝试将用户保存到我的firebase数据库.我正在使用FBSDKLoginManager()来创建帐户/登录.创建帐户后,我想将用户存储到我的firebase数据库中.我现在可以登录用户并且他们的电子邮件显示在firebase的Auth选项卡中(参见屏幕截图),但我的updateChildValues似乎没有任何影响(也见截图). 我将updateChildValues放在正确的位置吗?它目 我正在尝试将用户保存到我的firebase数据库.我正在使用FBSDKLoginManager()来创建帐户/登录.创建帐户后,我想将用户存储到我的firebase数据库中.我现在可以登录用户并且他们的电子邮件显示在firebase的Auth选项卡中(参见屏幕截图),但我的updateChildValues似乎没有任何影响(也见截图).

我将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数据库中?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1008066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存