0

我将自己的游戏引擎用于多个应用程序。以下代码适用于一些具有较新 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)
4

0 回答 0