Top 5 scores from google leaderboard

前端 未结 4 441
粉色の甜心
粉色の甜心 2020-12-14 13:47

My requirement is to get top 5 scores from leaderboard and display it in my app.

There is a method loadTopScores but it shows the scores in its own UI i guess.

相关标签:
4条回答
  • 2020-12-14 13:59

    You are on the right track in your example, you just need to extract the information once it is loaded. It is fairly confusing to get it working but I will point you to this answer of mine, which shows how to do it for achievements - doing it for leaderboards works the same way, except that you will use the leaderboard interfaces instead of those used for achievements.

    Basically, you will access arg2 to get the data, and it should look something like this:

    mGamesClint.loadTopScores(new OnLeaderboardScoresLoadedListener() {
    
       public void onLeaderboardScoresLoaded(int arg0, LeaderboardBuffer arg1, LeaderboardScoreBuffer arg2) {
    
          // iterate through the list of returned scores for the leaderboard
          int size = arg2.getCount();
          for ( int i = 0; i < size; i++ )  {
             LeaderboardScore lbs = arg2.get( i );
    
             // access the leaderboard data
             int rank = i + 1;         // Rank/Position (#1..#2...#n)
             String name = lbs.getScoreHolderDisplayName();
             String scoreStr = lbs.getDisplayScore();
             long score = lbs.getRawScore();
    
             // now display or cache these values, or do whatever with them :)
          }
    
          arg2.close();
          arg1.close();
       }
    }, LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 5, true);
    

    I did not actually test this implementation, but it should work (or at least show you enough so you can fix any mistakes I might have made).

    Just remember that this will be done asynchronously, so the contents of the method will not execute immediately, but rather once the scores have been loaded.

    0 讨论(0)
  • 2020-12-14 14:07

    My Solution which worked is as follows which is for the latest game play services.

      Games.Leaderboards.loadTopScores(mGamesClint,LEADERBOARD_ID, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 5).setResultCallback(new ResultCallback<Leaderboards.LoadScoresResult>() {
    
            public void onResult(LoadScoresResult arg0) {
                // TODO Auto-generated method stub
    
                int size = arg0.getScores().getCount();
    
    
    
                for ( int i = 0; i < 3; i++ )  {
    
                    LeaderboardScore lbs = arg0.getScores().get(i);
    
                    String name = lbs.getScoreHolderDisplayName();
    
                    String score = lbs.getDisplayScore();
    
                    Uri urlimage = lbs.getScoreHolderHiResImageUri();
    
                     }
    
     }
    

    you can get all the data from leaderboard users here including high resolution image ie. profile picture. Hope you get the idea here.

    0 讨论(0)
  • 2020-12-14 14:15

    This code gets you the top 5 scores on your leaderboard.

    private LeaderboardsClient mLeaderboardsClient; 
    
        mLeaderboardsClient.loadTopScores("HgkF9bOSF_UPAAILKE", LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC,5,true).addOnSuccessListener(new OnSuccessListener<AnnotatedData<LeaderboardsClient.LeaderboardScores>>() {
                            @Override
                            public void onSuccess(AnnotatedData<LeaderboardsClient.LeaderboardScores> leaderboardScoresAnnotatedData) {
    
                                LeaderboardScoreBuffer scoreBuffer = leaderboardScoresAnnotatedData.get().getScores();
                                Iterator<LeaderboardScore> it = scoreBuffer.iterator();
                                while(it.hasNext()){
                                    LeaderboardScore temp = it.next();
                                    Log.d("PlayGames", "player"+temp.getScoreHolderDisplayName()+" id:"+temp.getRawScore() + " Rank: "+temp.getRank());
                                }
    
                            }
                        });
    
    0 讨论(0)
  • 2020-12-14 14:23

    Here is how I have achieved it.

    PendingResult<Leaderboards.LoadScoresResult> topScores = 
                Games.Leaderboards.loadTopScores(getApiClient(),LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 1, true);
                topScores.setResultCallback(new ResultCallback<Leaderboards.LoadScoresResult>() {
    
                    @Override
                    public void onResult(LoadScoresResult scoreResults) {
    
                        if(scoreResults != null) {
                            if (scoreResults.getStatus().getStatusCode() == GamesStatusCodes.STATUS_OK) {
                                scoreStringBuilder = new StringBuilder();
                                LeaderboardScoreBuffer scoreBuffer = scoreResults.getScores();
                                Iterator<LeaderboardScore> it = scoreBuffer.iterator();
                                while(it.hasNext()){
                                     LeaderboardScore temp = it.next();
                                     Log.d("PlayGames", "player"+temp.getScoreHolderDisplayName()+" id:"+temp.getRawScore() + " Rank: "+temp.getRank());
                                     scoreStringBuilder.append("|"+temp.getScoreHolderDisplayName()+"*"+temp.getRawScore());
                                }
                                UnityPlayer.UnitySendMessage(handlerName, "onGetScoreSucceededEventListener", "");
                                 Log.d("PlayGames", "Call Sent for getHighScorewithPlayerNameSuccess ::: "+handlerName);
    
    
                            }
                        }
    
                    }});
    

    You can use it as you want I created a String and returned it to Unity and then parsed it. But this code is working with Latest Google Play Services.

    Thanks

    0 讨论(0)
提交回复
热议问题