ios - 我正在尝试使用 Firebase 创建排行榜并显示用户名、高分、地区。

标签 ios swift firebase firebase-realtime-database

我的目标是使用 Firebase 创建排行榜并在表格 View 中显示用户名、高分和地区。我当前的数据库看起来像这样 enter image description here

我现在拥有用户下的所有内容。我这样做是为了增加当前用户的数据。不幸的是,通过这样做,我不认为我可以让别人看到别人的高分或用户名。 使用当前节点设置是否有解决此问题的方法,或者我是否需要更改它。如果可以,有人可以举例说明数据库的外观。

最佳答案

您应该将您的用户特定数据与排行榜分开。

您有您的用户节点,其中您的用户数据位于其唯一用户 ID 下。 然后您还可以创建一个排行榜节点,并在相同的唯一用户 ID 下创建您的排行榜特定数据。这样您就不必一次获取所有数据来了解用户特定数据。

连接是用户 ID,即唯一 ID,您的用户将知道该 ID,并通过该 ID 检索他/她的数据。其他玩家可以通过查询来检索排行榜节点。您还应该存储一些看似冗余的数据,例如用户节点和排行榜都需要的用户名。

不要忘记应用安全规则,因此用户只能写入他/她的数据。

看起来像这样:

enter image description here

知道他/她的 UID 的经过身份验证的用户然后可以通过以下路径获取数据来收听他/她自己的排行榜分数:“leaderboards/UID”对。

其他玩家应该只需要使用路径:“leaderboards”来获取排行榜上的每个玩家。要对它们进行排序并仅获取前 10 名玩家,您必须使用查询。

使用 queryOrderedByChild 按高分排序数据 为此,您还应该添加安全规则:“.indexOn”:“highscore”。

要获取前 10 名玩家,请使用 queryLimitedToFirst 将其设置为 10,它将只下载前 10 名玩家。

您应该阅读有关查询的更多信息:https://firebase.google.com/docs/database/ios/lists-of-data#sorting_and_filtering_data

关于ios - 我正在尝试使用 Firebase 创建排行榜并显示用户名、高分、地区。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228786/

相关文章:

ios - JSONDecoder - "Expected to decode Dictionary<String, Any> but found a string/data instead."

iphone - 如何处理带有文本字段的 UItableViewCell 事件(内部触摸/外部触摸)?

swift - 通过 iPhone 应用程序将信息发送到网页

cordova - Ionic-Firebase 应用程序错误 : Cannot find module '../plugman/platforms/ios'

ios - 在 Safari 中打开 UIWebView 之外的目标 ="_blank"链接

ios - 使用 VoIP 在 iOS 上节省电池电量

ios - 如何以编程方式快速添加自定义 UIButton

ios - 获取错误无法将类型 'NSTaggedPointerString' 的值转换为 'NSArray'

android - CreateUserWithEmailandPassword 在进入 while 循环时停止?

android - 程序类型已经存在 : com. google.android.gms.common.api.zzf