保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
6.3 KiB
C3c 隔离边界修订与复审确认
2026-09-30。按用户“更新一下审核,重新确认”,结合原ZCode第三轮意见与实际跨账号探测,形成本次统一补充。原独立报告不由开发侧改写,本文件供审核端确认修订后的完整方案边界。
一、已确认的本人KV合同
Client/Assets/Scripts/Services/PlayerData/PlayerKVClient.cs:36的GetAsync只有keys/token,请求POST playerdata/Get,身份来自当前认证会话。正常请求示例:
{"keys":["LastLoginTimeUtc","LevelB"]}
示例只说明请求形状,不承诺这两个键目前已有值。不要传playerId、playFabId或userId选择其他账号。 原客户端未传这些字段,不存在需要删除的生产参数;此前添加参数仅在用户明确要求的只读探测中使用,没有写入生产代码。保留keys,不能把“去掉玩家ID参数”理解成删除所需键名或认证会话。
实测101请求102、102请求101,各用JSON三种目标ID参数及query playerId,8/8 HTTP200且只返回本人数据;本人前后摘要稳定。正常无目标参数的本人读取也已成功。因此无需再次测试删除参数能否读取本人,也无需为此新增迁移代码。
第三轮审查将Get/Set/Delete均限定本人账号,本次接受该合同边界;网络实测只覆盖Get,没有跨账号写入或删除测试,不能把它们写成已实测。结论不外推服务器没有其他公开资料接口。
二、对第三轮意见的逐项确认
| 第三轮意见 | 开发侧确认及实施限制 |
|---|---|
| 禁止客户端按目标ID逐个读他人KV | 接受;不扩展PlayerKVClient,不切换/冒用好友登录会话,不增加客户端跨玩家KV接口 |
| 好友、他人资料由服务端内部读取KV后返回 | 接受职责方向;客户端消费已有好友/资料路由,仅做调用与DTO映射。服务端内部实现由对应开发侧处理,本客户端Agent不改服务器代码 |
| LevelB写本人KV,供服务端聚合/资料读取 | 接受作为原统计能力的迁移方向;原计算、触发点、两统计名、调用者时序及错误语义保持。此项修订原R2中完全禁止本人KV统计写的旧方向,不恢复已撤回的临时副本+通用Flush方案;具体写入合同仍须审清 |
| 排行榜前50由服务端聚合 | 接受;不枚举玩家、不客户端拼榜、不把活动榜当等级榜。具体读取路由、统计名与结果映射仍待事实 |
| 公告/匹配走全局内容及协调接口 | 接受方向;保持原消费者和匹配时序,不猜私有键、不以结束匹配冒充迁移 |
| 整体审核通过后编码 | 继续执行;方向确认不等于完整接口、字段和文件边界都已获批 |
第三轮表中“客户端不新增跨玩家读取逻辑”应理解为不新增直接跨账号KV读取;已有好友搜索等业务请求仍然按原协议传目标UserID,不能误删friend/SearchFriend的PlayFabId参数或其他业务目标字段。
三、好友/公开资料的逐字段映射边界
这些是原消费者要求,不是声称服务器已新增的响应字段。返回可以采用兼容DTO,必须有实际协议或服务端确认后确定准确字段名。
| 原PF消费值 | KV业务返回必须提供的同义数据 | 当前证据 |
|---|---|---|
| FriendPlayFabId / PlayerProfile.PlayerId等玩家身份 | 目标新UserID;旧playFabId字段名可保留 | 好友列表与SearchFriend对101/102目标ID已实测正确 |
| DisplayName / AvatarUrl | 原昵称/头像资料,保留原默认昵称和事件流程 | 字段存在;SearchFriend样例内容为空,不据此宣称真实KV资料已投影 |
| Statistics中Name=LevelB的Value | 原触发点更新的同一复合统计分数 | 当前好友/SearchFriend未返回;普通level=1不能替代 |
| Profile.LastLogin | 对应好友的原语义时间,沿已定KV阶段方向核返回 | 现有样例未返回,源账号LastLoginTimeUtc也缺;不得伪造或改过滤 |
| GetPlayLv读取的Lv | 目标玩家普通等级,与复合LevelB区分 | SearchFriend返回1,本人KV分别62/60;数据来源/同步关系待核,不直接采用错误值 |
原Profile/Statistics为空时跳过整条、LastLogin为空时保留原异常表现、列表排序/名次/事件/AGG顺序均不改。既有每日初始化先消费旧LastLoginTimeUtc再保存当前值的时序保持;第三轮提议服务端读取该键,不自动证明它与PF最近登录时间全部等价。缺键、值存在时的投影与更新时点须明确,不能为了补字段改变每日刷新逻辑。
四、本次复审只需收敛的事项
- 本人统计写:本人KV作为原统计持久化来源的实际键/序列化、全球与地区写入顺序及一次原调用的完成/失败映射;不得未经评审引入刷新无关存档、额外等待或重试。
- 好友与公开资料:GetFriendsList/SearchFriend等既有业务路由的LevelB、LastLogin、普通等级字段、缺键和失败返回;源数据与服务端响应是否同义。已有路由和目标ID成功事实无需重审。
- 等级榜:全球/地区统计的读取入口、前50、StatValue/Position/UserID及资料映射;保持原已知语义,不凭空添加同分规则。
- 公告和匹配:准确的现有替代入口及原结果映射。继续属于本次迁移目标,不默认停用或延期。
以上集中在同一C3c完整审查,不再要求用户重新决定是否使用KV、新ID或好友时间阶段方向。涉及服务端字段事实的部分需准确证据,不能由审核意见或客户端代码猜出来。
五、交付与下一步
请审核端在原报告中明确:本文件一至三节是否准确;第四节各项最终合同与允许文件/方法;是否已达到整体可编码,未达到则只列具体事实缺口。当前只记录方向和实测,未冒充整批PASS。
证据:跨账号Get脱敏JSON及结论、SearchFriend脱敏JSON及结论、当前PlayerKVClient源码、原ZCode第三轮意见,统一登记在本次复审增量hash。早先“SearchFriend仅离线”“好友时间待DB/KV重选”“客户端加目标ID读取KV”的旧叙述均不再作为当前执行依据。
本轮没有新网络请求、生产/测试代码变更、服务器修改、Play或打包。完整审核门槛保持。