В настоящее время возникают проблемы с отображением всех рекордов из моей базы данных Firebase в реальном времени. На данный момент я показываю только «живые» результаты.
В настоящее время я делаю табло, где 50 лучших результатов и их имена отображаются в таблице. Это отлично работает. Однако я не уверен, стоит ли мне использовать базу данных в реальном времени.
Видите ли, когда я делаю новую сборку на своем физическом устройстве и создаю нового пользователя, пользователь сохраняется в базе данных Firebase, а когда я набираю новый балл и нажимаю, чтобы отобразить пользователей с высокими показателями, мой новый пользователь по праву там с их счетом.
Если я выйду из системы (но все еще в приложении) и зарегистрируюсь с новым пользователем, а затем снова сыграю (с новым пользователем), а затем я нажму, чтобы снова увидеть таблицу лидеров рекордов, теперь я могу видеть оба пользователей, которых я создал, с их оценками. ЗДОРОВО!
Я могу проверить часть аутентификации firebase, и, конечно же, мои пользователи там с их электронной почтой, паролями и т. Д. И я могу проверить их рекорды в базе данных в реальном времени. Все хорошо.
Однако, когда я удаляю приложение со своего устройства или даже помещаю его в фоновый режим, а затем выполняю новую сборку или заново открываю приложение. Детали аутентификации (пароль, имя пользователя, адрес электронной почты) все еще там, но когда я открываю базу данных реального времени, там нет никаких данных.
Следовательно, когда я нажимаю, чтобы увидеть список лидеров рекордов, мне нечего показать. Это потому, что мне не следует использовать базу данных в реальном времени, она отображает только «текущие / последние данные» и фактически не хранит данные, которые я хочу постоянно. Должен ли я использовать SQL или что-то еще?
Это код для добавления моего рекорда в мою базу данных ......
func addingScoreToFB() {
let currentUser = Auth.auth().currentUser
let highScore = UserDefaults.standard.integer(forKey: highScoreIdentifier)
let recentScore = UserDefaults.standard.integer(forKey: recentScoreIdentifier)
if let userID = currentUser?.uid {
let userDB = Database.database().reference().child("Users").child(userID)
if recentScore > highScore {
let highSDictionary = ["highScore":self.recentScores.last!]
userDB.updateChildValues(highSDictionary as Any as! [AnyHashable : Any], withCompletionBlock: { (err, ref) in // Adding Score
if let err = err {
print(err)
}
})
}
}
}
Это мой код для отображения результатов .....
func retrieveUserData() {
let postsRef = self.ref.child("Users")
let query = postsRef.queryOrdered(byChild: "highScore").queryLimited(toLast: 50)
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let name = dict["username"] as! String
let score = dict["highScore"] as! Int
let aScore = ScoreClass(withName: name, andScore: score)
self.scoresArray.insert(aScore, at: 0)
}
self.topScoresTableView.reloadData()
})
}
В целом, я хотел бы видеть 50 лучших результатов каждого пользователя в базе данных за все время, но в настоящее время я вижу только последние из них в новой сборке.