You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:27:22