Files
ft/CodexOutput/upserver/阶段1验收.md

37 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 阶段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以后仍须上一阶段完整验收通过。