Google 玩游戏服务 - 解锁成就弹出窗口未显示

Google Play Game Service - Unlocked Achievement Popup not shown

当我解锁成就时,"Achievement unlocked" 弹出窗口没有弹出,但正如我在成就列表中看到的那样,成就已解锁。

我已经尝试了 this 解决方案,但它不起作用。

我在 MainActivity 中像这样初始化 GoogleApiClient:

 gac = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
            .addApi(Games.API).addScope(Games.SCOPE_GAMES)
            .build();
 app.setGoogleApiClient(gac);
 gac.connect();

在我的 "Game over Activity" 中,我执行以下操作:

ApplicationClass app = (ApplicationClass) getApplication();
googleApiClient = app.getGoogleApiClient();

...我解锁了这样的成就:

 Games.Achievements.unlock(googleApiClient, "achievement id");

提前致谢!

游戏 API 专为单人 Activity 设计,但您可以多人使用。您是否有机会查看他们在 GithHub pages 提供的样本?他们在 BasicSamples/libraries/BaseGameUtils 下有一些可能有用的 classes。

您正在使用 this 在主 activity 上调用 Builder 方法。

new GoogleApiClient.Builder(this) //this being your MainActivity

然后您将 Api 客户端设置为应用程序 class。现在,当您在新的 GameOverActivity 中时,api 客户端正试图在屏幕上不再显示的 activity 上显示视图。它只引用了您的 MainActivity。您不应在应用程序 class 上为 Api 客户端设置变量。这也是一种不好的做法,因为您将侦听器回调设置为 activity,并且在调用其中一个回调时可能不再存在。

您想要与游戏 API 互动的任何 activity 都应源自 GitHub 上 BaseGameUtils 中的 BaseGameActivity。在每个 activity 中,您将有一个名为 getApiClient().

的方法

我必须执行以下操作:

GamesClient gamesClient = Games.getGamesClient(this, GoogleSignIn.getLastSignedInAccount(this));
gamesClient.setViewForPopups(findViewById(android.R.id.content));
gamesClient.setGravityForPopups(Gravity.TOP | Gravity.CENTER_HORIZONTAL);