我的目標是使用Firebase創建排行榜,並在桌面視圖中顯示用戶名,高分和地區。我目前的數據庫看起來像這樣我正嘗試使用Firebase創建排行榜並顯示用戶名,高分榜,地區。
我目前有用戶下的所有東西。我這樣做了,所以我可以爲當前用戶增加數據。不幸的是,通過這樣做,我不認爲我可以讓別人看到別人高分或用戶名。 使用當前節點設置是否存在此問題的解決方案,還是需要更改它?如果有的話,有人可以給我舉例說明數據庫的外觀。
我的目標是使用Firebase創建排行榜,並在桌面視圖中顯示用戶名,高分和地區。我目前的數據庫看起來像這樣我正嘗試使用Firebase創建排行榜並顯示用戶名,高分榜,地區。
我目前有用戶下的所有東西。我這樣做了,所以我可以爲當前用戶增加數據。不幸的是,通過這樣做,我不認爲我可以讓別人看到別人高分或用戶名。 使用當前節點設置是否存在此問題的解決方案,還是需要更改它?如果有的話,有人可以給我舉例說明數據庫的外觀。
您應該將您的用戶特定數據與排行榜分開。
你有你的用戶節點,你的用戶數據在其唯一的用戶ID下。 然後,您還可以創建排行榜節點,並使用相同的唯一用戶標識排行榜特定數據。這樣您就不必一次獲取所有數據,只需要知道用戶特定的數據。
連接是用戶標識,即用戶將要知道的唯一標識,並通過檢索他/她的數據。其他玩家可以通過查詢來檢索排行榜節點。您還應該存儲一些看似冗餘的數據,例如用戶的節點和排行榜都需要的用戶名。
不要忘記應用安全規則,因此用戶只能寫入他/她的數據。
看起來像這樣:
誰知道那麼他/她的UID可以通過這條道路上獲取數據聽他/她自己的排行榜分數通過身份驗證的用戶:「排行榜/ UID」的權利。
其他玩家只需要使用路徑:「排行榜」來獲取排行榜上的每個玩家。要訂購它們,只能獲取前10名玩家,您必須使用查詢。
使用queryOrderedByChild以高分排列數據 爲此,您還應該添加安全規則:「.indexOn」:「highscore」。
要獲取前10名玩家使用 queryLimitedToFirst將其設置爲10,它只會下載前10名玩家。
你應該閱讀更多關於查詢:https://firebase.google.com/docs/database/ios/lists-of-data#sorting_and_filtering_data
在使用JSON較平坦的樹它是
HighScore :{
userID1 : 100,
userID2 : 103;
userID3 : 210;
},
Users :{
userID1 :{...}
userID2 :{...}
userID3 :{...}
}
如果您希望將不同的關係屬性添加到用戶的更好,只需添加該特定用戶的另一個父節點並對其進行查詢。
FIRDatabase.database().reference().child("HighScores").observeSingleEvent(of: .value, with: {(Snap) in
print(Snap.value)
})
PS: -您可以隨時與火力安全規則玩,對數據庫中的特定節點的權限操縱您的身份驗證的用戶Docs Link。
要附加數據火力節點: -
FIRDatabase.database().reference().child("HighScores").observeSingleEvent(of: .value, with: {(Snap) in
if let snapDict = Snap.value as? NSMutableDictionary{
snapDict.setObject(_yourHighScore, forKey : FIRAuth.auth()!.currentUser!.uid as NSCopying)
FIRDatabase.database().reference().child("HighScores").setValue(snapDict)
}
})
但是如何添加更多玩家,因爲.set只是移除其他玩家並添加最新玩家。 –
@TarvoMäesepp我已經更新了我的答案 – Dravidian
有幾件事情。你可以給我一個查詢UID後的所有內容的代碼示例。因爲即使這樣更有效率,它也沒有解決我所遇到的問題。如果我沒有對UID的引用,我不確定查詢或顯示快照。我知道如何爲當前用戶做到這一點,但我如何查看所有用戶及其節點。 –
因爲我不熟悉swift,所以不能給你確切的代碼,但是添加了一些信息來編輯答案。 – Durian
謝謝你回答我的問題。 –