尝试获取Play Store用户最新分数,调用loadCurrentPlayerLeaderboardScore始终失败
解决Play Store Leaderboard分数加载失败的问题
我来帮你梳理下这个问题的排查方向,你调用loadCurrentPlayerLeaderboardScore一直失败,大概率是这些环节出了问题:
1. 先确认核心参数与登录状态
- 排行榜ID正确性:你用的
CgkIiMyT6f0SEAIQHg必须和Google Play Console里对应排行榜的ID完全一致,包括大小写和特殊字符,建议直接从控制台复制粘贴,避免手动输入出错。 - 登录账号有效性:
GoogleSignIn.getLastSignedInAccount(this)可能返回null,或者账号未授权游戏服务权限。调用前一定要加校验:
同时要确保登录时请求了游戏服务的Scope:GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (account == null) { Toast.makeText(this, "请先登录Google游戏账号", Toast.LENGTH_SHORT).show(); // 这里可以触发登录流程,比如启动GoogleSignInIntent return; }GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build(); GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
2. 检查后台配置是否到位
- 启用API:去Google Cloud Console确认
Google Play Game Services API已经启用,没启用的话直接搜索启用即可。 - 签名证书匹配:Google Play Console和Cloud Console里配置的SHA-1必须和你当前测试/发布包的签名SHA-1一致,调试包和发布包的签名通常不同,别搞混了。
- 测试账号配置:如果是调试阶段,要把测试设备上的Google账号添加到Google Play Console的游戏服务测试列表里,否则会被限制访问排行榜数据。
3. 优化代码获取错误详情
你当前的失败监听只提示了“addOnFailureListener”,根本不知道具体原因,先修改这段代码打印异常信息:
.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { String errorMsg = "加载失败: " + e.getMessage(); Toast.makeText(MenuActivity.this, errorMsg, Toast.LENGTH_LONG).show(); Log.e("LeaderboardError", "加载分数失败", e); } });
通过LogCat查看完整的异常栈,能直接定位是权限问题、ID错误还是网络问题。
4. 修正后的完整代码示例
// 先校验登录状态 GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (account == null) { Toast.makeText(this, "请先登录Google游戏账号", Toast.LENGTH_SHORT).show(); // 触发登录流程示例 // startActivityForResult(signInClient.getSignInIntent(), RC_SIGN_IN); return; } // 加载排行榜分数 Games.getLeaderboardsClient(this, account) .loadCurrentPlayerLeaderboardScore( "CgkIiMyT6f0SEAIQHg", LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC) .addOnSuccessListener(this, new OnSuccessListener<AnnotatedData<LeaderboardScore>>() { @Override public void onSuccess(AnnotatedData<LeaderboardScore> leaderboardScoreAnnotatedData) { if (leaderboardScoreAnnotatedData != null && leaderboardScoreAnnotatedData.get() != null) { long score = leaderboardScoreAnnotatedData.get().getRawScore(); Toast.makeText(MenuActivity.this, "当前分数: " + score, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MenuActivity.this, "未获取到有效分数数据", Toast.LENGTH_SHORT).show(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { String errorMsg = "加载失败: " + e.getMessage(); Toast.makeText(MenuActivity.this, errorMsg, Toast.LENGTH_LONG).show(); Log.e("LeaderboardLoadError", errorMsg, e); } });
先按照这个步骤排查,尤其是通过异常信息定位具体问题,大部分情况下都是后台配置或者登录权限的问题。
内容的提问来源于stack exchange,提问作者açelya kılıç
相关产品推荐
相关产品推荐

