2016-10-24 73 views
-1

我的目標是使用Firebase創建排行榜,並在桌面視圖中顯示用戶名,高分和地區。我目前的數據庫看起來像這樣enter image description here我正嘗試使用Firebase創建排行榜並顯示用戶名,高分榜,地區。

我目前有用戶下的所有東西。我這樣做了,所以我可以爲當前用戶增加數據。不幸的是,通過這樣做,我不認爲我可以讓別人看到別人高分或用戶名。 使用當前節點設置是否存在此問題的解決方案,還是需要更改它?如果有的話,有人可以給我舉例說明數據庫的外觀。

回答

3

您應該將您的用戶特定數據與排行榜分開。

你有你的用戶節點,你的用戶數據在其唯一的用戶ID下。 然後,您還可以創建排行榜節點,並使用相同的唯一用戶標識排行榜特定數據。這樣您就不必一次獲取所有數據,只需要知道用戶特定的數據。

連接是用戶標識,即用戶將要知道的唯一標識,並通過檢索他/她的數據。其他玩家可以通過查詢來檢索排行榜節點。您還應該存儲一些看似冗餘的數據,例如用戶的節點和排行榜都需要的用戶名。

不要忘記應用安全規則,因此用戶只能寫入他/她的數據。

看起來像這樣:

enter image description here

誰知道那麼他/她的UID可以通過這條道路上獲取數據聽他/她自己的排行榜分數通過身份驗證的用戶:「排行榜/ UID」的權利。

其他玩家只需要使用路徑:「排行榜」來獲取排行榜上的每個玩家。要訂購它們,只能獲取前10名玩家,您必須使用查詢。

使用queryOrderedByChild以高分排列數據 爲此,您還應該添加安全規則:「.indexOn」:「highscore」。

要獲取前10名玩家使用 queryLimitedToFirst將其設置爲10,它只會下載前10名玩家。

你應該閱讀更多關於查詢:https://firebase.google.com/docs/database/ios/lists-of-data#sorting_and_filtering_data

+0

有幾件事情。你可以給我一個查詢UID後的所有內容的代碼示例。因爲即使這樣更有效率,它也沒有解決我所遇到的問題。如果我沒有對UID的引用,我不確定查詢或顯示快照。我知道如何爲當前用戶做到這一點,但我如何查看所有用戶及其節點。 –

+0

因爲我不熟悉swift,所以不能給你確切的代碼,但是添加了一些信息來編輯答案。 – Durian

+0

謝謝你回答我的問題。 –

1

在使用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) 
     } 
    }) 
+0

但是如何添加更多玩家,因爲.set只是移除其他玩家並添加最新玩家。 –

+0

@TarvoMäesepp我已經更新了我的答案 – Dravidian