保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
6.4 KiB
C3b UserID兼容接线裁决与执行记录
实施依据与完整边界
用户明确“按此执行操作即可,需要迁移的项目,需要测试,现在无法确定服务端的操作,如果测试中报错了我会通知服务端”。采纳刚确认的完整兼容方案:KV使用认证返回PlayerId,经IUserService.UserId传给原请求字段;字段名、路由、原业务顺序及错误语义保持;对方ID保留对方新UserID;InternalId及业务对象ID不混换。已审同合同替换连续执行,不因服务端内部未知而暂停或重新询问产品需求。
只读核对:KVUserService已公开UserId/ApiPlayerId;FriendService的本人/对方字段已由该接口或调用参数进入原DTO。水族馆、俱乐部、伙伴、普通活动请求也沿用新身份或服务器返回的对方ID。无需为体现工作量改名、全局替换字段或重复包一层ID工具。
原好友邀请码将ID字符串按16进制编码、按16进制解码,是可逆的字符串映射;对于当前规范数字ID101/102,往返仍是原字符串,不应只改编码一端为十进制导致搜索错误。旧挖沙随机种子转换也不在本轮顺手改算法。问卷既有十进制抽样适配保留。
本轮实施精确范围:原ServiceHost.csproj加入真实FriendService.cs与FriendModel.cs编译;Stubs.cs只补无关UI/配置与SDK调用哨兵的编译支持;M2MergedGameplayTests.cs增加101/102兼容场景和可检查原HTTP请求的固定记录;新增C3IdentityCompatibilityTests.cs验证实际服务方法。全部位于CodexOutput测试宿主,不修改生产源码。新增编译输入的每一项服务于真实好友请求测试,不新增生产接口、管理器或状态。
验证:KV101/102本人和对方ID、原字段名/路由/参数/回包、业务错误码与HTTP失败、旧身份失效、PF十六进制身份和邀请码往返。真实FriendService+真实CustomServerMgr+真实KVUserService参与;HTTP为内存handler,不发送正式请求、不操作真实好友关系。原测试断言保留,测试失败自修,只修夹具接线而不改变业务。
直接PlayFabSDK读取/统计/匹配不能仅靠改ID变成KV请求;本次不编造服务器新路由,不因字段兼容已验而声称这些替代能力已接通。实际线上兼容未知继续如实记录,后续测试发现具体错误按原路由/ID/响应给用户汇总,不访问服务器代码。
开工前三个既有测试文件已逐字节备份。生产C2d和用户规则增量保持,HomePanel不动,仅Unity CLI Loop、不打包。
实施结果
本轮核对发现现有普通游戏服请求已使用统一身份接口或对方ID参数,不需要再次更改生产代码。实际执行的是接线核查与针对性验证,不能把“没有重复改代码”误记为没有验证,也不能声称剩余直接PlayFab SDK调用已迁移。
真实FriendService与FriendModel已进入离线ServiceHost编译;101/102场景使用真实KVUserService、原handle/租约及真实CustomServerMgr,通过内存HttpMessageHandler检查最终HTTP请求。PF对照用真实FriendService+原DTO,运输为捕获代理,不声称PF真实网络已验。
| 已测原动作 | 核对内容 |
|---|---|
| AddFriend | MySelf.PlayFabId=本人UserID、FriendPlayFabId=对方UserID,原MyFriendCount/Level及字段集合不变 |
| SearchFriend | PlayFabId=对方UserID,响应Info.PlayFabId原样保留;不改成本人ID |
| AcceptFriend | 本人/对方ID分开,Status原值保留 |
| GetHomePage / GetRecommendedFriends | 原目标ID与PageNo保留,不改变分页与请求路由 |
| IsFriendWaitingForAccept | 两方玩家ID按原字段分别发送 |
| GetInvitedList | 原空字符串请求体保持,身份仍由原认证会话承载,不增加自造ID字段 |
| DeleteFriend | 原失败保留列表、原成功更新列表,目标ID保持 |
| 邀请码 | 101、102及PF十六进制ID按原编码和UI解码规则往返一致,不需要改算法 |
| 错误/退出 | 业务Code=-3/-1原样处理;HTTP500原null且不伪造注销;401撤销身份后新请求被原not-ready异常拦截,HTTP记录不增加 |
NON_ANDROID与ANDROID+AGG最终均21组380断言通过,formalRequests=0;原宿主断言保留。增加的3组为PF、KV101、KV102真实好友请求兼容。非Editor两类验证工厂不可用探针通过,仍不代表Unity Player构建。
第一次新增撤销断言误期待null,实际原CustomServerMgr在not-ready时抛InvalidOperationException。已按既有已审合同修正测试预期,生产异常逻辑不改;首败日志M2-C3b-revoked-expectation-first-failure.log保留。没有把此离线注入失败当成线上服务端错误。
其他身份路径只读核对(未冒充逐功能运行覆盖)
- AquariumManager.cs:72/647/663:请求playFabId来自捕获用户的UserId。
- ClubService.cs:251/325:playerId来自ApiPlayerId;成员列表返回playerId/userIDList仍映射到原展示字段playFabId。
- DataCenter.SmallGame.cs:463/480:本人playerID来自UserId;对手ID继续来自原响应字段,不替换为本人。
- InGameMailHandler.cs:156:本地邮件缓存按UserId加载;mail/fetch、send、updateState原会话身份及原协议不加新字段。C2d原邮件成功/失败语义回归仍保留。
- AntiCheatManager.cs:262:CheckBan的playerID来自UserId。
- ChatService.cs:464/498:原消息里的玩家身份来自UserId。
交付与未完成边界
仅修改三个已有测试文件并新增C3IdentityCompatibilityTests.cs。生产源码、HomePanel、服务器、场景、调试配置不变;本轮不需要重编未变化的Unity源码,沿用C2d编译证据并明确时间。C3b新增overlay记录测试变更,不重写C2d/C3a原hash。AGENTS已有用户授权增量继续单独追踪。
“旧字段名+新UserID”的普通游戏服身份方案已按上述范围核对并测试。线上是否接受新ID尚未实测,不因这一未知再次要求前置服务端审批;后续在允许的测试窗口遇到具体错误,记录实际路由、HTTP/业务错误码及最小脱敏参数给用户转达服务端,不猜服务端实现。
等级榜统计/读取、PF好友列表、他人资料SDK及匹配票据属于直接SDK替代工作,当前没有凭ID替换自动完成;继续按已有迁移要求核对应的KV入口,不能猜路由或跳过功能。真实首场景/Player/新进程恢复及最终门控清理仍未关闭。本轮未发正式请求、未Play、未付费或打包。