Files
youle_cocos/docs/superpowers/plans/2026-09-06-login-scenes-and-contract.md
T

7.4 KiB
Raw Blame History

登录场景与原工程接线

用户已确认:启动、加载、登录分别组织;协议由独立 PopupRoot 动态实例化;按钮显示和调用按 Game_Surface_3。

最新协议要求覆盖本文早期验收记录:默认已勾选;所有登录方式都要求当前勾选,未勾选统一提示“未同意协议”。LoginAccounts 持有唯一协议状态,授权、回调、游客、手机、快速/隐藏入口和缓存自动登录统一拦截;LocalPlatformLogin 诊断入口同步。175 项相关测试通过。

实施顺序

  1. 在 assets/framework/presentation/login-policy.ts 集中实现 JumpWxAuth 的显示顺序,配置缺省仅在来源定义。测试覆盖审核、设备、游客、QQ、缓存账号组合,并保留 QQ 最后覆盖的源行为。
  2. 在登录适配器实现 accreditlogin(2/1)、sharelogin 回调、游客/设备/手机账号、缓存与 player_login。手机号使用原字段 telphone/smmcode/telphoneAuto,不增加服务器接口。验证码按钮沿用“请通过相关渠道获取”。针对接口参数、协议勾选及缓存编写测试。
  3. 创建常驻启动组件与 Loading/Login 场景宿主,保留单个 Runtime/连接;使用 director.loadScene,等待场景绑定后展示数据。Logo 继续复用既有倒计时和进度行为。
  4. 使用 Cocos MCP 移除 Login prefab 内协议实例,场景中设置 PopupRoot。协议和手机窗口独立加载、重复点击防重入、场景销毁取消加载与清理监听。
  5. 用原生 Cocos 节点和预览核对启动场景顺序、按钮显示、协议开关和滑动;执行相关测试与类型检查,记录既有失败。对比改动前资源哈希,确认只修改任务资源。

验收边界

  • 初始 check=false;点击两次回到 false;微信未同意时不调用授权;QQ/游客遵循原分支。
  • 审核、正式、showVisitor、deviceLogin、qqLogin 和缓存组合符合源码。
  • 授权参数 2/1,原回调字段映射与手机请求字段精确一致。
  • Login prefab 无 Layer10_Protol 子节点;弹层在 PopupRoot 下,关闭后释放。
  • Startup → Loading → Login 使用真实场景切换;Runtime 和网络连接不重复创建。
  • 不修改服务器,不覆盖既有 scene/meta 工作,不提交无关文件。

本次验证结果

  • 新入口为 assets/scenes/PlatformStartup.scene,实际浏览器日志依次显示 LoadScene PlatformLoading、LoadScene PlatformLogin。
  • Login prefab 已无协议实例;Startup 引用独立协议/手机 prefab,弹窗归属 PopupRoot。
  • 浏览器实际点击验证 false → true → false、协议内容上下拖动、Spirit253 关闭、遮罩关闭;最终预览 error/warn 为空。
  • Cocos 原生节点验证手机窗口生成两个数字 EditBox,字体取原资源高度 28;协议含原生 ScrollView。
  • 补齐成功设备登录缓存、玩家 ID 写回、global/WVJB 的不同缓存目的地、startlocation(2)/getlocationinfo。正式/审核按钮位置沿用源坐标,关闭对应 Widget 避免静态布局覆盖运行时位置。
  • node --experimental-transform-types --test framework-tests/local-platform-login/*.test.ts:97/97 通过。
  • 全工程类型检查仍有既有 5 条错误:login-sources.ts 的 unknown 字段 3 条、room-contracts.ts 的 0/1 类型 1 条、game-contract-harness.ts 的 node:assert 类型 1 条;本次新增代码没有类型错误。
  • 对比本次资源哈希清单,仅既有 Login prefab 因移除嵌套协议而变化;保留其他已存在的 scene/meta 修改。没有修改服务器或原工程,也没有提交无关文件。
  • 真机微信/QQ 授权、手机号登录成功和原生定位尚未进行端到端联调;当前验证涵盖接口参数、缓存/协议契约及 Cocos UI,不代表真实账号已登录。

远程 showVisitor 排查与修正

  • 实际 POST config_test/update_jsonv2.txt 返回 200。showVisitor=1 属于代理 1B2h0ccl205c390Y28m1Ajdplkuu4wgy;原构建默认代理错误地选择另一分支,且其下没有当前 gameid。
  • 在 BUILD_IDENTITY 单一来源修正为当前 gameid 所属的代理及渠道 aouv0LotK0pYyQ0Pdrx0CsdcaezfzrcG,未修改远程文件、服务端或分层配置读取规则。
  • 实际 marketid=4 还配置了 deviceLogin=true。用户确认保留两个按钮同时显示,调整为游客在左、手机在右,解决原坐标重叠。
  • 预览日志确认 showVisitor=true/deviceLogin=true/qqLogin=false;实际画面确认游客与手机并排、微信隐藏,error/warn 为空。
  • 新增远程层级到 UI policy 的回归测试,并同步已有测试中失效的配置 URL 断言;登录、配置和本地适配器合计 170/170 通过。

游客成功回包 tel 校验修复

  • 新增的设备缓存校验错误地根据全局 deviceLogin 开关强制要求游客回包包含 tel。改为使用本次请求的 DeviceLoginMode,游客成功只记录 playerid,不写设备账号缓存或伪造手机号。
  • 缓存选择为 visitorinfo 时,自动登录也按游客方式提交;同时启用手机按钮不改变这个请求分支。
  • 回归覆盖“两个按钮开启 → 游客提交 → 无 tel 成功回包 → 刷新缓存自动登录”,并保留手机账号缓存测试。172 项相关测试全部通过。
  • 实际浏览器点击游客显示“登录成功”;刷新后缓存游客自动登录也显示“登录成功”,error/warn 均为空。没有修改服务器。

手机登录弹窗对齐

  • 来源:11_GameUI.js 的 3243/3244/3245/3251/3253/3254 分支、openPhoneBind、数字输入面板;12_Logic.js 的 readPhoneCode。
  • 登录入口使用标题第 2 帧“手机登录”;恢复图标和原提示精灵,输入后隐藏对应提示。继续使用原生 EditBox,保留前导零,数字最多 18 位,与原数字面板一致。
  • 使用原 sgame_phoneCode 缓存键恢复手机号和 30 秒剩余时间,验证码不自动回填。倒计时中切等待帧;验证码获取仍仅提示“请通过相关渠道获取”,不发送原工程已注释掉的短信 RPC。
  • 两个输入非空才调用既有 phoneLogin 对应适配器并关闭;Spirit3251 和 Spirit3241 关闭,释放输入监听和定时器。
  • PhoneLoginAssets 通过 MCP 挂载并保存两个帧引用,保证构建资源依赖;没有手改 prefab/meta。
  • 浏览器验证标题、图标、输入位置、前导零、获取提示、空验证码拦截、关闭/重开及遮罩关闭。原生 Cocos 节点验证缓存恢复、倒计时拦截/结束、非空提交一次并关闭、定时器清理。174 项相关测试通过;未发送真实手机号或验证码登录。

2026-09-06 旧诊断入口退役

  • 新流程所需倒计时、节点绑定、登录阶段 GameEntry 已迁入 assets/scripts/platform-login,并补充职责、协议状态、缓存优先级及生命周期注释。
  • 使用 Cocos asset-db 删除 LocalPlatformLogin.scene、scripts/local-platform-login 及其 meta。迁移保留行为测试至 framework-tests/platform-login,删除旧诊断入口专属测试。
  • GameEntry 仍是显式拒绝游戏操作的占位实现,保留诊断 key/route;不代表接入大厅或房间。
  • 按现有 Login_Layer 的 Logining 分组修正头像、昵称、遮罩绑定路径,未修改 prefab。
  • 删除后 93 项相关测试通过;浏览器预览正常进入登录界面,无 error/warn。此前已有的 5 项全项目类型错误仍存在。
  • 对比操作前哈希,删除范围之外的已有序列化资源无变化。