Google Play Achievement离线解锁和同步

时间:2015-11-01 19:34:52

标签: android google-play achievements

Google Play文档声明:

  

可以离线解锁成就。当游戏上线时,它会与Google Play游戏服务同步,以更新成就的解锁状态。

我尝试使用以下方式离线解锁成就:

Games.Achievements.unlock(mGoogleApiClient, achievementID);

但是,我收到以下错误:

  

java.lang.IllegalStateException:GoogleApiClient尚未连接。   在com.google.android.gms.internal.jx.a(未知来源)   在com.google.android.gms.common.api.c.b(未知来源)   在com.google.android.gms.games.internal.api.AchievementsImpl.unlock(未知来源)

为了防止这种情况,我用解锁连接包装了unlock语句:

if (mGoogleApiClient.isConnected()) {
        Games.Achievements.unlock(mGoogleApiClient, achievementID);
}

这是Google Play游戏提供的示例中使用的解决方案:

 if (mGoogleApiClient.isConnected()) {
      // unlock the "Trivial Victory" achievement.
      Games.Achievements.unlock(mGoogleApiClient,
          getString(R.string.achievement_trivial_victory));
 }

这解决了错误问题。但是,我不知道这是如何确保成功在线下成功解锁并在设备上线时同步的,这在我上面引用的文档中得到了保证。在我看来,解锁事件将被忽略,因为mGoogleApiClient.isConnected()在离线时返回false,并且Google Play游戏无法知道该成就一旦上线就脱机解锁,因为没有关于解锁事件的信息离线存储。 (在" if" block语句之后没有" else"阻止语句,其中将处理离线成就解锁)

我错过了什么吗?开发人员有责任在设备离线时存储有关成就解锁的信息,然后告诉Google Play在设备上线时解锁成就吗?

1 个答案:

答案 0 :(得分:1)

缺少的链接是您可以在离线时拨打mGoogleApiClient.connect() - 即使离线时Google Play游戏也会连接,您可以拨打unlock()和任何其他API。< / p>