3.4 KiB
3.4 KiB
邀请码接线验证
分支:codex/invite-code-wiring。
行为与来源
Layer8_Notice/Spirit235沿用更多菜单显隐规则;点击发送agent/get_player_invitecode,字段仅为agentid/playerid/unionid/openid,收到响应后打开Layer16_Bind。Spirit365原生 EditBox:450×60、20 号字,保留前导零,不限制六位长度。Spirit366粘贴剔除非数字;settings 无参数调用,WVJB 传空字符串并使用回调。纯浏览器调用 Clipboard API,失败显式提示。Spirit367关闭弹窗并发送agent/binding_invitecode,字段仅为agentid/playerid/invitecode。成功才更新玩家邀请码,显示服务器error提示;已绑定隐藏输入、粘贴、提交并显示绑定码。Spirit362关闭。- 身份来源遵循登录模式:非设备登录来自授权账号,设备登录来自回包;重连保留该来源,unionid 保持 string/number 原类型。
- 查询/提交等待期间抑制重复请求,超时和断线释放等待状态;迟到粘贴不会影响已关闭弹窗。
- 序列化资源仅经 Cocos MCP、引擎序列化和 asset-db 保存。输入文本采用 EditBox 需要的左上锚点;已绑定文本采用左锚点,左距 403 对应源工程 x=243 加 1600/1280 画布差的一半。
权威依据:docs/protocol/02-协议-agent路由.md 邀请码章节、04-数据结构.md 登录身份说明;原工程 11_GameUI.js 的 235/362/366/367 分支和 OpenBind,06_Player.js 绑定响应,05_Func.js 粘贴接口,save/Layer00016.xml 输入尺寸。
验证
- 233 项相关回归通过(platform 全部测试、platform-handlers、lobby-menu、invite-clipboard)。覆盖两种登录模式、数字 unionid、重连、准确出包、失败状态不覆盖和数据非法时不提交。
- Cocos Game View 中运行
cocoscreator_projects/scripts/verify-invite-preview.mjs,29 项断言通过:实际 prefab、Runtime/Router/Store/UI 全链路,记录出包并注入响应。包括输入、粘贴、重复点击、成功/失败提示、反复打开、已绑定状态、文字边界和断线。 - 未绑定及已绑定截图已人工检查:
YouleNexus/temp/mcp-captures/invite-full.png、invite-bound.png。 - prefab 的 5 个资源引用全部有效;导入边界检查通过。
- 框架类型检查通过,命令附加
--lib es2022,dom;Cocos 脚本类型检查附加--ignoreDeprecations 6.0 --skipLibCheck --lib es2022,dom --types node --strictNullChecks后通过。未修改现有 tsconfig;原始配置存在旧库目标/引擎声明兼容问题。
预览使用隔离记录端口,没有向真实账号提交绑定。原生桥参数由自动测试验证,尚未进行手机真机剪贴板验收。
联调修正:字符串 state 导致断线
用户实际绑定时收到字符串 state,初版 requireInteger(raw.state) 拒绝字符串,沿 Router → PlatformRuntime fatal 路径主动关闭连接。原工程的 state == 0 支持字符串状态;初版数字回包测试漏掉了这类实际数据。
修复限定在 applyInviteBinding 的协议入口:整数型字符串先归一化,再校验整数;未改变共享校验器和服务器。新增完整运行时回归覆盖 0/"0"/1/"1"/-1/"-1",断言显示服务器反馈、连接关闭次数保持 0、继续查询可用。空串、null、boolean、非数字和小数字符串仍作为非法状态拒绝,且不提交状态。预览脚本也已改用字符串成功/失败响应。