从 Google Play 游戏服务获取用户分数?
Posted
技术标签:
【中文标题】从 Google Play 游戏服务获取用户分数?【英文标题】:Getting Score of user from Google Play Game Service? 【发布时间】:2014-04-16 04:36:50 【问题描述】:我是 android 应用开发的新手。我想从 Google Play 游戏服务中检索用户的分数,我正在使用以下代码来获得高分,但我不知道它如何返回值以及如何保存它。
Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(R.string.highscore), LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC);
将其保存为 int 或 string 不起作用。
【问题讨论】:
【参考方案1】:loadCurrentPlayerLeaderboardScore 的完整参数如下所示
Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(),
getString(R.string.word_attack_leaderboard),
LeaderboardVariant.TIME_SPAN_ALL_TIME,
LeaderboardVariant.COLLECTION_PUBLIC).setResultCallback(
new ResultCallback<LoadPlayerScoreResult>()
@Override
public void onResult(LoadPlayerScoreResult arg0)
LeaderboardScore c = arg0.getScore();
long score = c.getRawScore();
R.string.word_attack_leaderboard 是从 google play 游戏服务获取的排行榜 id
【讨论】:
【参考方案2】:方法:
loadCurrentPlayerLeaderboardScore (GoogleApiClient apiClient, String leaderboardId, int span, int leaderboardCollection)
返回
PendingResult<Leaderboards.LoadPlayerScoreResult>
那么你必须使用Leaderboards.LoadPlayerScoreResult
类的getScore()
方法来获取它。
请查看这些链接...
The loadCurrentPlayerLeaderboardScore method
The LoadPlayerScoreResult in the PendingResult
编辑:这是你如何使用它。
Games.Leaderboards.loadCurrentPlayerLeaderboardScore().setResultCallback(new ResultCallback<LoadPlayerScoreResult>()
@Override
public void onResult(LoadPlayerScoreResult arg0)
LeaderboardScore c = arg0.getScore();
);
这就是你获得分数的方式。
【讨论】:
@SudeepAcharya 我要进行编辑,请查看我的示例代码 @SudeepAcharya 添加参数以匹配方法签名:loadCurrentPlayerLeaderboardScore (GoogleApiClient apiClient, String leaderboardId, int span, int leaderboardCollection) @SudeepAcharya 使用 c.getRawScore(),它会给你一个 long 类型的值。查看此链接了解其他获取分数的方法:developer.android.com/reference/com/google/android/gms/games/… 您也可以使用 .toString(); 将 long 更改为字符串; @SudeepAcharya 你必须发布 logcat,这样我才能看到问题。【参考方案3】:4 年后,我遇到了类似的问题。有些东西已被弃用,有些东西不再有效。因此,对于那些现在想知道如何做的人,在 2018 年......检查这个答案-
首先你必须得到 LeaderBoardClient
mLeaderboardsClient = Games.getLeaderboardsClient(MainActivity.this, googleSignInAccount);
接下来就可以得分了
mLeaderboardsClient.loadCurrentPlayerLeaderboardScore(getString(R.string.leaderboard_id), LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
.addOnSuccessListener(this, new OnSuccessListener<AnnotatedData<LeaderboardScore>>()
@Override
public void onSuccess(AnnotatedData<LeaderboardScore> leaderboardScoreAnnotatedData)
long score = 0L;
if (leaderboardScoreAnnotatedData != null)
if (leaderboardScoreAnnotatedData.get() != null)
score = leaderboardScoreAnnotatedData.get().getRawScore();
Toast.makeText(MainActivity.this, Long.toString(score), Toast.LENGTH_SHORT).show();
Log.d(TAG, "LeaderBoard: " + Long.toString(score));
else
Toast.makeText(MainActivity.this, "no data at .get()", Toast.LENGTH_SHORT).show();
Log.d(TAG, "LeaderBoard: .get() is null");
else
Toast.makeText(MainActivity.this, "no data...", Toast.LENGTH_SHORT).show();
Log.d(TAG, "LeaderBoard: " + Long.toString(score));
)
.addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
Toast.makeText(MainActivity.this, "Failure", Toast.LENGTH_SHORT).show();
Log.d(TAG, "LeaderBoard: FAILURE");
);
.loadCurrentPlayerLeaderboardScore的3个参数如下
排行榜的 ID,从中加载分数。
时间跨度来检索数据。有效值为 TIME_SPAN_DAILY、TIME_SPAN_WEEKLY 或 TIME_SPAN_ALL_TIME。
排行榜集合来检索分数。有效值为 COLLECTION_PUBLIC 或 COLLECTION_SOCIAL。
【讨论】:
终于有了一个不被弃用的答案!以上是关于从 Google Play 游戏服务获取用户分数?的主要内容,如果未能解决你的问题,请参考以下文章