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在设备上线时解锁成就吗?
答案 0 :(得分:1)
缺少的链接是您可以在离线时拨打mGoogleApiClient.connect()
- 即使离线时Google Play游戏也会连接,您可以拨打unlock()
和任何其他API。< / p>