我遇到了一个非常恼人的问题,我之前在任何使用过Google Play游戏API的游戏中都没有这个问题。
我的游戏运行良好,尚未发布,但API已发布,一切正常,从提交分数到查看排行榜。
现在,我需要先解释这个问题。
Google开发者控制台上的我的API帐户有两个Oauth键,即调试和realese。当我完成游戏并试图查看排行榜时,我没有任何问题地查看它,但是当试图提交分数时,排行榜打开然后关闭而不显示我的本地/全球分数,这就像排行榜中的一个小故障。 / p>
我通过发布游戏服务解决了这个问题。现在我遇到了同样的问题,但是发布的APK,isseu已在Debug中修复,我已经尝试了与发布的APK相同的步骤,没有任何效果。
如果已提交分数,则每个Google帐户都会遇到查看排行榜的相同问题,当用户尝试仅查看排行榜时不会出现问题。
调试和发布密钥都添加到Google Dev API Control中的firebase和Oauth,并且已经使用作为测试人员添加了电子邮件。
长话短说:提交分数后,排行榜不会打开(排行榜菜单会显示,但在选择排行榜时,会发生这种错误的结束)。
没有捕获到logcat,我的代码如下:
连接代码/不需要
查看排行榜:
private void OpenLeaderboards() {
if(mGoogleApiClient.isConnected()){
try {
UpdateAddictionLeaderboard(ReturnSavedClick());
startActivityForResult(Games.Leaderboards.getAllLeaderboardsIntent(mGoogleApiClient), REQUEST_LEADERBOARD);
} catch (SecurityException e){
mGoogleApiClient.disconnect();
mGoogleApiClient.connect();
}
} else {
isTried = false;
mGoogleApiClient.connect();
}
}
提交分数:
private void UpdateTopScore(final String LeaderBoard, final String Title, final int mSavedScore, final int mMethod){
Games.Leaderboards.loadCurrentPlayerLeaderboardScore(
mGoogleApiClient,LeaderBoard,
LeaderboardVariant.TIME_SPAN_ALL_TIME,
LeaderboardVariant.COLLECTION_PUBLIC)
.setResultCallback(new ResultCallback<Leaderboards.LoadPlayerScoreResult>() {
@Override
public void onResult(@NonNull Leaderboards.LoadPlayerScoreResult arg0) {
if(isScoreResultValid(arg0)){
long score = arg0.getScore().getRawScore();
Bundle bundle = new Bundle();
bundle.putLong(FirebaseAnalytics.Param.SCORE, score);
bundle.putString(LeaderBoard, Title + " Leaderboard");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.POST_SCORE, bundle);
if(mSavedScore > score){
Games.Leaderboards.submitScore(mGoogleApiClient, LeaderBoard, mSavedScore);
} else {
if(mMethod == 0) {
mEditor.putInt(FIRSTSCORE, mSavedScore).apply();
} else {
mEditor.putInt(SECONDSCORE, mSavedScore).apply();
}
}
} else {
Games.Leaderboards.submitScore(mGoogleApiClient, LeaderBoard, mSavedScore);
}
}
});
}
private boolean isScoreResultValid(final Leaderboards.LoadPlayerScoreResult scoreResult) {
return scoreResult != null && GamesStatusCodes.STATUS_OK == scoreResult.getStatus().getStatusCode() && scoreResult.getScore() != null;
}