【问题标题】:How can I add data from User's Facebook to Firebase如何将用户 Facebook 中的数据添加到 Firebase
【发布时间】:2016-06-02 20:11:48
【问题描述】:

我刚从 Parse 迁移到 Firebase,不熟悉它的结构。

我正在使用 Facebook auth 开发一个简单的应用程序。

我了解如何将新的授权用户添加到我的数据库

现在我想向这些数据添加通过 Graph Request 获得的其他数据,例如名字、姓氏、图片、性别等

import UIKit
import FBSDKShareKit
import FirebaseDatabase
import FirebaseAuth

class Settings: UIViewController {

    @IBOutlet weak var UserImage: UIImageView!
    @IBOutlet weak var UserName: UILabel!
    @IBOutlet weak var UserSurname: UILabel!
    @IBOutlet weak var Gender: UILabel!



    override func viewDidLoad() {
        super.viewDidLoad()


        let paramets = ["fields": "email, first_name, last_name, picture.type(large), gender"]

        let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: paramets)

        graphRequest.startWithCompletionHandler({

            (connection, result, error) -> Void in

            if error != nil {
                print (error)
            }

            if let first_name = result["first_name"] as? String {

                self.UserName.text = first_name

            }

            if let last_name = result["last_name"] as? String {

                self.UserSurname.text = last_name

            }

            if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String {

                print(url)

            }

            if let gender = result["gender"] as? String {

                self.Gender.text = gender

            }



        })
    }

我需要做什么才能将此数据添加到我的数据库中?例如,我应该创建一个名为 Persons 的新类,还是可以使用从 auth 获得的新类?

【问题讨论】:

    标签: ios swift facebook firebase firebase-realtime-database


    【解决方案1】:

    auth 类并非旨在保存您的任何数据 - 它是只读的并包含 auth 凭据; uid 等

    您的用户节点有了一个良好的开端:这是您存储用户数据的典型位置。

    有多种方式可以与 Firebase 交互 - 请记住,没有像 Parse 中那样的现有对象。因此,您既可以“手动”将数据写入 Firebase,也可以创建一个类来为您处理其中的一些数据。

    举个简单的例子:假设用户创建了一个 firebase 帐户,然后显示一个对话框供用户捕获其他信息。然后,您希望将其存储在您的 /users 节点中。假设您已经拥有 firebase 密钥(authData.uid),以便将其名称添加到现有节点...

    let thisUserRef = usersRef.childByAppendingPath(uid)
    let thisUserName = thisUserRef.childByAppendingPath("user_name")
    let their_name = myUserNameTextField.StringValue
    thisUserName.setValue(their_name)
    

    结果:

    uid_x
       user_name: "whatever their name is"
    

    如果你想探索太空,就建一本字典,同时写出一堆孩子

    let first_name = firstNameTextField.StringValue
    let last_name = lastNameTextField.StringValue
    let gender = myGenderTextField.StringValue
    let user_info = ["first": first_name, "last": last_name, "gender": gender]
    let thisUserRef = usersRef.childByAppendingPath(uid)
    thisUserRef.setValue(user_info)
    

    结果

    uid_x
     first: "the first name"
     gender: "gender"
     last:  "the last name"
    

    现在,如果您想变得非常活泼,请创建一个类来为您处理繁重的工作。这是一个可用于处理 Posts 的 PostClass。

    import Cocoa
    import Firebase
    
    class PostClass: NSObject {
    
    var firebaseKey : String?
    var postText: String?
    var uid: String?
    
    func savePost() {
    
        let rootRef = Firebase(url:"https://your-app.firebaseio.com")
        let postsRef = rootRef.childByAppendingPath("posts")
    
        var dataDict = [String:String]()
        dataDict["msg"] = self.postText
        dataDict["uid"] = self.uid
    
        if firebaseKey != nil {
            let thisPostRef = postsRef.childByAppendingPath(firebaseKey)
            thisPostRef.updateChildValues(dataDict)
            //update existing node
        } else {
            //create new node
            let thisPostRef = postsRef.childByAutoId()
            thisPostRef.setValue(dataDict)
        }
    }
    

    然后创建新帖子或更新现有帖子,这非常像:

        let aPost = PostClass()
        aPost.postText = "Some post"
        aPost.uid = "my user id"
        aPost.savePost()
    

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 2017-12-28
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多