2016-06-04 29 views
2

Ich bin, eine einfache App zu entwickeln, um Benutzer Bilder zu speichern. Benutzer autorisiert über Facebook, und die Interaktion mit der App. Ich blieb beim Abrufen von Daten vom aktuellen Benutzer.So rufen Sie Daten des aktuellen Benutzers von Firebase

In meinem Feuerbasis für jetzt habe ich eine solche Struktur haben: enter image description here

entschied ich mich Benutzerdaten durch uid zu erhalten. So initialisiert I Variable

let userID = FIRAuth.auth()?.currentUser?.uid 

Dann rufe ich ein Array von Objekten aus meiner Datenbank

URL_BASE.child("profile").observeEventType(.Value, withBlock: { (snapshot) in 

    print (snapshot.value as! [String:AnyObject]!) 

}) 

}

In meiner Ausgabe Ich habe dies:

"-KJSKE4a2y-okl71vDSx": { 
    Interest = men; 
    gender = female; 
    name = girlsname1; 
    photo = "http://i.imgur.com/VAWlQ0S.gif"; 
    surname = girlsurname1; 
}, "-KJSKE4b8TlvxV-urHQo": { 
    Interest = men; 
    gender = female; 
    name = girlsname6; 
    photo = "http://media.tumblr.com/tumblr_lnb9aozmM71qbxrlp.gif"; 
    surname = girlsurname6; 

Und so auf

Es ist in Ordnung, aber mein Ziel ist es, Daten von derzeit autorisierten Benutzer zu drucken. Ich habe eine Idee, alle Objekte nach UID zu sortieren, aber ich denke, es ist irrational. Hoffe, es gibt eine einfachere Lösung.

Autorisierte Benutzer speichert in Benutzerdatenbank. Profildatenbank besteht aus Benutzerparametern, die ich von Facebook erhalte.

Antwort

0

In Firebase haben alle Benutzer eine UID, wie Sie wissen. Die UID sollte als Schlüssel für jeden Benutzerknoten in/users verwendet werden.

uid_0 
    gender: male 
    name: Leroy 
uid_1 
    gender: female? 
    name: pat 

Dies ist ein gängiges Entwurfsmuster in Firebase.

Damit können Sie einfach jeden Benutzer erhalten durch ihre uid

let thisUserRef = usersRef.childByAppendingPath("the uid") 

thisUserRef.observeSingleEventOfType(.Value... { 
    let gender = snapshot.value["gender"] 
} 
+0

habe ich das gleiche, aber jedesmal, wenn ich Null immer, wenn ich Geschlecht Daten –

+1

@DanielChepenko Sind erhalten möchten Sie bekommen immer Null, egal was Sie lesen? Ich habe den Code in meiner Antwort mit usersRef.childByAppendingPath ("uid_0") getestet und es funktionierte korrekt und druckte das Geschlecht. Denken Sie daran, dass meine Struktur anders als Ihre ist; Es empfiehlt sich, die UID als Schlüssel für den Benutzerknoten zu verwenden. Ihre Struktur verwendet eine childByAutoId, die technisch funktionieren würde, aber nicht empfohlen wird. – Jay

0
let userID : String = (FIRAuth.auth()?.currentUser?.uid)! 
    print("Current user ID is" + userID) 

    self.dbRef?.child("profile").child(userID).observeSingleEvent(of: .value, with: {(snapshot) in 
     print(snapshot.value) 

     let userEmail = (snapshot.value as! NSDictionary)["addedByUser"] as! String 
     print(userEmail) 


    }) 
+0

versuchen Sie diese, es hat mir geholfen –

+2

bitte erklären Sie Ihre Antwort! – Mazz

+0

Ändern Sie Ihre Datenbank Kind zu Benutzer-UID, und es funktioniert –

Verwandte Themen