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