feat: migrate platform login scenes and native login flows

This commit is contained in:
2026-09-06 09:06:00 +08:00
parent f2a948f059
commit 695d3be25c
140 changed files with 7599 additions and 4397 deletions
@@ -0,0 +1,67 @@
# 登录场景与原工程接线
用户已确认:启动、加载、登录分别组织;协议由独立 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 项全项目类型错误仍存在。
- 对比操作前哈希,删除范围之外的已有序列化资源无变化。