Firebase получение данных в Swift
Я пытаюсь получить определенные данные от пользователя, вошедшего в систему. Мои данные в моей базе данных выглядят так:

например, я хочу просто захватить full_name и сохранить его в переменном имени пользователя. Ниже то, что я использую, чтобы захватить мои данные
ref.queryOrderedByChild("full_name").queryEqualToValue("userIdentifier").observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
            print(snapshot.value)
            // let userName = snapshot.value["full_name"] as! String
        })
к сожалению, это то, что печатает моя консоль.

Я был бы признателен за любую помощь:) Спасибо!
5 ответов
Он дает вам это предупреждающее сообщение indexOn потому что вы делаете запрос.
вы должны определить ключи, которые вы будете индексировать через .indexOn правило в ваших правилах безопасности и Firebase. Пока вам разрешено создайте эти запросы ad-hoc на клиенте, вы увидите значительно улучшена производительность при использовании .indexOn
Как вы знаете имя, которое вы ищете, вы можете напрямую перейти к этому узлу, без запроса.
    let ref:FIRDatabaseReference! // your ref ie. root.child("users").child("stephenwarren001@yahoo.com")
    // only need to fetch once so use single event
    ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
        if !snapshot.exists() { return }
        //print(snapshot)
        if let userName = snapshot.value["full_name"] as? String {
            print(userName)
        }
        if let email = snapshot.value["email"] as? String {
            print(email)
        }
        // can also use
        // snapshot.childSnapshotForPath("full_name").value as! String
    })
{
    "rules": {
         "tbl_name": {
            ".indexOn": ["field_name1", "field_name2"]
         },
    ".read": true,
    ".write": true
    }
}
вы можете применить indexOn к любому полю. Добавьте этот json на вкладку Безопасность и правила правил. Надеюсь, это сработает. :)
возвращает пользователю данные:
let ref = FIRDatabase.database().reference(fromURL: "DATABASE_URl")
let userID = FIRAuth.auth()?.currentUser?.uid
let usersRef = ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
Swift 4
let ref = Database.database().reference(withPath: "user")
    ref.observeSingleEvent(of: .value, with: { snapshot in
        if !snapshot.exists() { return }
        print(snapshot) // Its print all values including Snap (User)
        print(snapshot.value!)
        let username = snapshot.childSnapshot(forPath: "full_name").value
        print(username!)
    })
let ref = Database.database().reference().child("users/stephenwarren001@yahoo.com")
    ref.observeSingleEvent(of: .value, with: { (snap : DataSnapshot)  in
        print("\(String(describing:  snap.value))")
    }) { (err: Error) in
        print("\(err.localizedDescription)")
    }