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

3.4 KiB
Raw Blame History

邀请码接线验证

分支: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、非数字和小数字符串仍作为非法状态拒绝,且不提交状态。预览脚本也已改用字符串成功/失败响应。