我将自己的游戏引擎用于多个应用程序。以下代码适用于一些具有较新 Google Play 设置的应用程序。但是在一个旧应用程序上,当我尝试显示排行榜或成就意图时,我现在遇到了一个异常。但同样的应用程序可以在第二台测试设备上使用另一个 Google 帐户运行。这两款设备都是华为 P 30 Pro。似乎是谷歌帐户的问题。
- App-A 适用于设备 A 和 B
- App-B 在设备 A 上工作,但在设备 B 上不工作
- 设备A和B是同一型号
- 两个应用程序使用相同的代码
public void onCreate()
{
...
// Create the client used to sign in to Google services.
m_googleSignInClient = GoogleSignIn.getClient(ASCore.core.context(),
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build());
signInSilently();
...
}
private void signInSilently()
{
if (m_googleSignInClient == null) return;
ASCore.logD(TAG, "signInSilently()");
m_googleSignInClient.silentSignIn().addOnCompleteListener(ASCore.core.context(),
task -> {
if (task.isSuccessful()) {
ASCore.logD(TAG, "signInSilently(): success");
onConnected(task.getResult());
} else {
ASCore.logE(TAG, "signInSilently(): failure");
onDisconnected();
}
});
}
private void onConnected(GoogleSignInAccount googleSignInAccount)
{
ASCore.logD(TAG, "onConnected(): connected to Google APIs");
m_achievementsClient = Games.getAchievementsClient(ASCore.core.context(), googleSignInAccount);
m_leaderboardsClient = Games.getLeaderboardsClient(ASCore.core.context(), googleSignInAccount);
...
}
以下调用有效:
m_leaderboardsClient.submitScore(id, score);
但是显示一个意图会抛出一个异常:
m_leaderboardsClient.getLeaderboardIntent(id).addOnSuccessListener(intent -> ASCore.core.context().startActivityForResult(intent, RC_UNUSED))
.addOnFailureListener(e -> handleException(e, ASCore.core.context().getString(R.string.leaderboards_exception)));
m_achievementsClient.getAchievementsIntent().addOnSuccessListener(intent -> ASCore.core.context().startActivityForResult(intent, RC_UNUSED))
.addOnFailureListener(e -> handleException(e, ASCore.core.context().getString(R.string.achievements_exception)));
例外:
2021-08-25 09:29:31.349 21243-21243/com.asgardsoft.words E/AS AS Bug: com.google.android.gms.common.api.ApiException: 17: API: Games.API is not available on this device. Connection failed with: ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null, message=null}
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(com.google.android.gms:play-services-base@@17.5.0:4)
at com.google.android.gms.common.api.internal.ApiExceptionMapper.getException(com.google.android.gms:play-services-base@@17.5.0:2)
at com.google.android.gms.common.api.internal.zah.zaa(com.google.android.gms:play-services-base@@17.5.0:18)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zaa(com.google.android.gms:play-services-base@@17.5.0:212)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zaa(com.google.android.gms:play-services-base@@17.5.0:218)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zaa(com.google.android.gms:play-services-base@@17.5.0:340)
at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(com.google.android.gms:play-services-base@@17.5.0:179)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:219)
at android.os.HandlerThread.run(HandlerThread.java:67)