2015-11-01 68 views
0

的谷歌播放文檔狀態:谷歌播放成就離線解鎖和同步

An achievement can be unlocked offline. When the game comes online, it syncs with the Google Play games services to update the achievement's unlocked state.

我嘗試使用解鎖的成就脫機:

Games.Achievements.unlock(mGoogleApiClient, achievementID); 

不過,我收到以下錯誤:

java.lang.IllegalStateException: GoogleApiClient is not connected yet. at com.google.android.gms.internal.jx.a(Unknown Source) at com.google.android.gms.common.api.c.b(Unknown Source) at com.google.android.gms.games.internal.api.AchievementsImpl.unlock(Unknown Source)

爲了防止出現這種情況,我用檢查連接的方式打開了解鎖語句:

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

這是由谷歌玩遊戲提供的示例中使用的解決方案:

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

這解決了錯誤的問題。但是,我不知道這是如何確保成功地在離線狀態下成功解鎖並在設備上線時同步的,正如我在上面引用的文檔中所保證的那樣。在我看來,解鎖事件將被忽略,因爲mGoogleApiClient.isConnected()在離線時返回false,並且Google Play遊戲無法知道該成就在線上線後無法離線解鎖,因爲沒有關於解鎖事件的信息離線存儲。 (在「if」塊語句之後沒有「else」塊語句,其中離線成就解鎖將被處理)

我錯過了什麼嗎?開發者有責任在設備脫機時存儲關於成就解鎖的信息,然後告知Google Play在設備上線時解鎖成就嗎?

回答

1

缺少的一環是,你可以調用mGoogleApiClient.connect()而離線 - 谷歌玩遊戲離線即使連接,讓您打電話unlock()以及任何其他API。