Unity开发Android游戏:Google Play Game Service重装后存档读取异常求助
问题:Google Play Game Service重装游戏后加载云端数据返回空值(状态成功)
我用Unity开发Android游戏,已将玩家进度保存到Google Play Game Service云端。卸载游戏后,Play Games的已玩游戏列表仍显示该游戏及对应进度,但重装游戏后,调用加载API时状态返回成功,却获取到空数据。加载数据的代码如下:
PlayGamesPlatform.Instance.SavedGame.OpenWithAutomaticConflictResolution("Data", DataSource.ReadCacheOrNetwork, ConflictResolutionStrategy.UseLongestPlaytime, (status, metadata) => { switch (status) { case SavedGameRequestStatus.Success: PlayGamesPlatform.Instance.SavedGame.ReadBinaryData(metadata, (requestStatus, bytes) => { switch (requestStatus) { case SavedGameRequestStatus.Success: callback(JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(bytes))); Debug.Log("Data loaded"); break; default: callback(null); Debug.Log("Data failed to Load: "+ status.ToString()); break; } }); break; default: callback(null); Debug.Log("Data failed to Load: "+ status.ToString()); break; } });
排查与解决步骤
- 检查返回字节数组的长度:在
ReadBinaryData的成功回调里,先打印bytes.Length。如果长度为0,说明云端返回的就是空文件,需优先排查数据保存逻辑是否真的写入了有效内容。 - 强制从云端拉取数据:当前代码使用
DataSource.ReadCacheOrNetwork,重装后本地缓存为空时可能优先返回空缓存。修改为DataSource.ReadNetworkOnly强制读取云端数据测试:PlayGamesPlatform.Instance.SavedGame.OpenWithAutomaticConflictResolution("Data", DataSource.ReadNetworkOnly, // 切换数据源 ConflictResolutionStrategy.UseLongestPlaytime, (status, metadata) => { // 后续逻辑保持不变 }); - 确认账号登录状态:重装游戏后需确保玩家已正确登录对应Google Play账号,加载前可通过
PlayGamesPlatform.Instance.IsAuthenticated()验证登录状态,未登录则先触发登录流程。 - 验证云端存档配置:在Google Play Console的游戏服务设置中,确认Saved Game的跨设备同步开关已开启,且存档对当前账号可见。
- 回溯保存逻辑:检查保存数据的代码,确保调用
SaveBinaryData时传入的字节数组非空,且保存回调确实返回SavedGameRequestStatus.Success。示例保存逻辑参考:byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(yourProgressData)); PlayGamesPlatform.Instance.SavedGame.SaveBinaryData(metadata, data, (saveStatus) => { if (saveStatus == SavedGameRequestStatus.Success) { Debug.Log("数据保存成功"); } else { Debug.Log("保存失败: " + saveStatus); } }); - 清除本地缓存测试:在Android系统设置中找到游戏应用,清除其缓存后重新登录加载,验证是否能获取云端数据。
内容的提问来源于stack exchange,提问作者Fadi Abuzant
相关产品推荐
相关产品推荐

