4.1 KiB
阶段1:PlayFab → KV 映射与评审
日期:2026-09-16。客户端f40a816cc及已有RTService选项修改;服务端858fe7c。用户已授权按TODO开始执行,并指定测试ID 101/102。
调用盘点
全Assets的C#调用索引见《存档调用清单.json》,包含位置及上下文;搜索索引见《存档调用清单.txt》。剔除单行注释后匹配80个文件、159个UpdateUserDataValue、50个GetLocalData、2个SyncDataImmidiate;这是静态调用点数量,不是唯一key数量。预处理分支与动态key均保留,不假定所有分支运行。
| 入口 | 归属/替代 |
|---|---|
| UserService.LoginPlayFab 的 InfoResultPayload.UserData | 本人全量Get;随后加载玩法字典 |
| UserService.GetPlayLv 的 GetUserDataAsync,key=Lv | 任意目标玩家资料,不能走本人KV;后续玩家资料接口适配 |
| PlayFabTools.LoginWithCustomID/InfoResultPayload.UserData,key=NewPlayerDataDic | 按SDK ID查目标账号资源的工具链;不能冒充当前账号KV,单独列入外围迁移 |
| PlayFabMgr.SyncData / SyncDataImmidiate 两个UpdateUserData SDK入口 | 本人Set;保留字符串值,不解析玩法JSON |
| 159个业务UpdateUserDataValue | 全部流入上述统一存档入口;key包括字面量、常量、typeof/nameof及动态表达式,原样保留 |
| 50个GetLocalData | 读取本人初始化后的本地字典,不逐次发送Get |
| 捕鱼NewPlayerDataDic、转盘TurntableRoll立即同步 | Set;失败/未知结果不得当成玩法成功,阶段4一起改 |
| remote参数:PlayerData.NewPlayerDataDic、FishingEventData.TurntableRoll | 为false时仅本地,不能入远端待写队列 |
| 删除 | 未发现KeysToRemove等SDK删除调用;提供独立Delete能力并测试,不新增玩法删除入口 |
完整差异裁决
- 新接口只收发string字典,没有UserDataRecord/LastUpdated。阶段2不负责合并、不伪造时间;阶段3采用已提出的云端基线+待写日志三方比较,冲突暂停,保证边界为单客户端顺序写;不宣称跨设备强一致。
- 上述默认推荐路线随用户“开始执行”授权执行;若后续要求跨设备严格防覆盖,必须重评服务端版本条件写,不能扩大当前保证。
- Set/Delete 200空正文成功;Get必须有对象data且全部value为字符串,缺失/空正文/非法JSON为协议失败。data={}才是空存档。
- keys空列表/null按Get全量语义保留;Set/Delete不传playerId,以调用方专属HttpClient内Cookie决定身份。
- 键最大128字符,空字符串值有效,null值不可写;动态key在适配层统一运行时校验,不以静态扫描声称全部可能key已验证。
- 新账号/环境缓存隔离,旧PlayFab缓存不自动导入;非本人数据明确排除在本次私有KV中。
阶段2开发边界(代码修改前记录)
通过:新增Assets/Scripts/Services/PlayerData/PlayerKVModels.cs和PlayerKVClient.cs及meta;测试宿主放CodexOutput/upserver/KVContractTests。使用项目现有Newtonsoft程序集与HttpClient,不增加包。 接口:构造注入绑定会话的HttpClient和固定API基址;返回结构化Success/StatusCode/ErrorKind/Data;支持CancellationToken。调用方拥有HttpClient生命周期,登录/换号需新实例;适配层不切换身份、不自动重登或重试、不处置注入客户端。 HTTP逐次发送绝对地址,规范化基址;不改共享DefaultRequestHeaders/BaseAddress。读写构造独立请求快照;参数错误不发网络;网络/超时/取消/授权/HTTP/解析分别返回错误。错误不携带完整服务器正文或存档。 不修改当前PlayFabMgr、正式登录、存档初始化、配置、玩法或SDK包。测试执行项目实际源文件;Unity编译与真实服务端验证分别记录,不互相替代。
验收裁决
G1通过:读写/工具/他人资料/本地读取路径均已分类,接口差异和失败行为已明确,存档策略有界,独立KV层可实施。 阶段2联调账号101/102已获用户指定,仅写入任务前缀key并清理。阶段3以后仍须上一阶段完整验收通过。