2016-06-02 4 views
2

Ich habe gerade von Parse zu Firebase verschoben und nicht mit seiner Struktur vertraut.Wie kann ich Daten von Facebook des Benutzers zu Firebase hinzufügen

Ich entwickle eine einfache App mit Facebook Auth.

Ich verstehe, wie neue autorisierte Benutzer enter image description here

Nun zu meiner Datenbank hinzuzufügen ich weitere Daten hinzugefügt werden soll, dass ich über Graph Antrag auf diese Daten erhalten, wie Vorname, Nachname, Bild, Geschlecht usw.

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 

      } 



     }) 
    } 

Was muss ich tun, um diese Daten zu meiner Datenbank hinzuzufügen? Soll ich eine neue Klasse erstellen, zum Beispiel Personen, oder kann ich diese verwenden, habe ich von der Auth bekommen?

Antwort

2

Die Auth-Klasse ist nicht dafür gedacht, Ihre Daten zu speichern - sie ist schreibgeschützt und enthält die Authentifizierungsdaten. uid usw.

Sie haben einen guten Start mit Ihrem Benutzerknoten: das ist ein typischer Ort, an dem Sie Daten über Ihre Benutzer speichern würden.

Es gibt eine Reihe von Möglichkeiten zur Interaktion mit Firebase - wobei zu beachten ist, dass keine vorhandenen Objekte wie in Parse vorhanden sind. So können Sie Daten entweder einfach manuell an Firebase schreiben oder eine Klasse erstellen, die einige davon für Sie übernimmt.

So ein einfaches Beispiel: Angenommen, ein Benutzer erstellt ein Firebase-Konto und wird dann ein Dialogfeld für den Benutzer vorgestellt, um andere Informationen zu erfassen. Sie möchten es dann in Ihrem Knoten/users speichern. Angenommen, Sie haben bereits die Feuerbasis Taste (die authData.uid) so ihren Namen in diesem vorhandenen Knoten ...

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

Ergebnisse in hinzuzufügen:

uid_x 
    user_name: "whatever their name is" 

Wenn Sie den Raum zu erkunden, ein Wörterbuch erstellen und ein paar Kinder zugleich

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) 

Ergebnisse in

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

Jetzt, wenn Sie wirklich bissig werden wollen, erstellen Sie eine Klasse, um das schwere Heben für Sie zu behandeln. Hier ist eine PostClass, mit der Posts bearbeitet werden können.

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) 
    } 
} 

und dann entweder erstellen Sie einen neuen Beitrag oder aktualisieren Sie einen vorhandenen, es ist sehr Objekt wie:

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