2017-01-10 61 views
0

在我的遊戲加載時,我希望爲當前玩家獲得我的遊戲的所有等級(當前有22個)的所有分數。我這樣做:如何使用Google Play遊戲服務從多個排行榜中爲當前用戶加載分數?

@Override 
public void onSignInSucceeded() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      for (int i = 1; i < count; ++i) 
       score = getScoreGPGS(LEVEL_LIST(i).leaderBoardID); 
      // somehow use this score 
     } 
    }).start(); 
} 

哪裏

public long getScoreGPGS(String leaderBoardID) { 
    try { 
     PendingResult<Leaderboards.LoadPlayerScoreResult> result; 
     result = Games.Leaderboards.loadCurrentPlayerLeaderboardScore(gameHelper.getApiClient(), 
       leaderBoardID, LeaderboardVariant.TIME_SPAN_ALL_TIME, 
       LeaderboardVariant.COLLECTION_PUBLIC); 
     LeaderboardScore score = result.await().getScore(); 
     if (score != null) 
      return score.getRawScore(); 
     else 
      return 0; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return -1; 
} 

我明白result.await().getScore();沒有做到這一點的最佳方式,但其他方面沒有還曾(我試圖使用回調以及爲所有我的排行榜創建PendingResults,然後在一個循環中等待它完成,這裏不是這種情況,這對我來說更方便)。

問題是我能夠僅接收3個第一級別的分數(在任何互聯網連接上的任何設備上)。如果我在失敗級別執行result.await()。getStatus(),它將不會成功或取消或中斷,具體返回什麼我不知道,因爲我無法調試它。

UPD:它似乎像服務器阻止我的電話。我試圖在每次調用之間暫停線程1秒鐘,但它不起作用,但是當我嘗試暫停線程10秒鐘時,它確實有效,但只有6個級別,這個時間可能會增加,但即使是10秒是等待的大好時機。也許對這個問題有不同的解決方法?

UPD2:在谷歌API控制檯這些電話都顯示爲API games.scores.get「客戶端的錯誤」,但我敢肯定,我沒有超過我的每每100第二個用戶500個查詢配額。

回答

0

您遇到服務器的速率限制。欲瞭解更多信息,請閱讀https://developers.google.com/games/services/quota。每個用戶每100秒呼叫次數有限制,您可以在開發人員控制檯上查看API,然後查看這些值。你需要保持你的請求低於這個限制。

您可以申請增加解決問題的一種方法的限制,另一種方法可能是緩存結果並對需要進行的任何更新做出明智的決定。

另外,聽起來好像你可能想要自己保留一個數據庫,而使用排行榜作爲數據存儲。像Firebase Realtime Database可能更合適。

+0

我的配額是每100秒每個用戶500個查詢。我非常懷疑我超過了它。因爲在查詢排行榜分數之前,我只能登錄Google Play遊戲服務。而且我只能獲得3個排行榜評分,這意味着我之前做了497個查詢,這不可能是真實的,因爲當我查看API控制檯中的統計數據時,我可以看到我每天少於1000次查詢,但我每天都會測試我的應用幾次。 –

相關問題