不知道我是否应该使用实时数据库

时间:2019-04-03 20:21:31

标签: ios swift firebase firebase-realtime-database

当前无法显示我的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名得分,但目前我仅在新版本中看到最近的得分。

0 个答案:

没有答案