Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift / Firebase:如何在创建帐户时将Facebook用户正确存储到Firebase数据库中?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

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

我将updateChildValues放在正确的位置吗?它目前位于signInWithCredential中.我还必须执行FBSDKGraphrequest来获取我感兴趣的信息存储在我的firebase数据库中.

我的firebase的Auth选项卡显示身份验证正在运行:

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

数据库没有更新:

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

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数据…不知道为什么它需要这么长时间.这是一个截图:

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

解决方法

您应该只在执行完成块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数据库中?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。