Files
youle_cocos/docs/superpowers/reports/2026-09-06-invite-wiring.md
T

31 lines
3.4 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.
# 邀请码接线验证
分支:`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、非数字和小数字符串仍作为非法状态拒绝,且不提交状态。预览脚本也已改用字符串成功/失败响应。