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

Toa*_*teR 5 android google-play-services google-play-games

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

我已经尝试过这个解决方案,但它无法正常工作.

我在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();
Run Code Online (Sandbox Code Playgroud)

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

ApplicationClass app = (ApplicationClass) getApplication();
googleApiClient = app.getGoogleApiClient();
Run Code Online (Sandbox Code Playgroud)

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

 Games.Achievements.unlock(googleApiClient, "achievement id");
Run Code Online (Sandbox Code Playgroud)

提前致谢!

kev*_*ree 4

游戏 API 是为单个 Activity 设计的,尽管您可以在多个 Activity 中使用它。您有机会查看他们在GitHub 页面上提供的示例吗?他们在 BasicSamples/libraries/BaseGameUtils 下有一些可能有用的类。

您正在使用 来调用主要活动的 Builder 方法this

new GoogleApiClient.Builder(this) //this being your MainActivity
Run Code Online (Sandbox Code Playgroud)

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

您想要与 Games API 交互的任何活动都应源自BaseGameActivityGitHub 上的BaseGameUtils。在每个活动中,您都会有一个名为 的方法getApiClient()