已把原生客户端、后端、GitHub issue 和发布流程统一排查。逐项回复如下:
- 安卓找回密码:后端已有找回密码接口,Android 手机客户端缺少页面和调用链,属于客户端遗漏。计划补齐验证码发送、密码重置、错误提示、本地化和测试。Android TV 的登录与恢复路径在实施基线中单独核实,本报告不预设为不适用。
- 安卓点击购买显示“暂无可用套餐”:已作为独立 AND-PURCHASE 处理。后端目录健康;Android 把鉴权、网络、解码与域名切换失败统一吞成空列表,购买入口又把加载态和名称不匹配显示为真实空目录,所以结账未开始。Fable5 本次调用无可恢复输出,诚实标记 INCONCLUSIVE;现以证据冻结合同、补红测,再单独 PR、CodexLoop、CI 与合并,不混入密码或节点改动。
- 续费后没有节点、需要重新登录:源码已确认多个原生客户端把账户状态、订阅定位和节点目录分开缓存,支付完成、恢复前台和返回页面常没有走完整链;登录则是所有平台都稳定执行的全量链,所以常能恢复。Apple App 内支付大多另有完整流程。生产工单中各原因占比仍要用真实版本和请求轨迹确认。
- 账户、设置与节点刷新:采用双通道。账户状态可在登录、支付和恢复前台时同步;节点目录日常只由用户手动刷新,不做 5/15 分钟轮询或缓存年龄强刷。登录或新账户、本地账户 / 权益 / 定位指纹变化、缓存缺失 / 损坏 / 无法解密、换号和凭据拒绝恢复属于正确性事件,可自动拉取一次。节点使用本地加密缓存,成功才原子替换;网络、超时、解析或无类型空响应等暂时失败且账户仍有效时保留旧节点与原“上次成功检查”时间;权威无套餐、到期、禁用、额度耗尽、撤销或会话失效则清除或隔离。当前纯目录轮换保持手动发现。
- 流量额度合同:已纠正旧结论。生产语义不是“0 代表不限量”:完整响应中的 0 或负数表示无额度;缺失、空值或畸形字段属于结果不确定;正总额未用尽才可用,达到或超过即耗尽。Fable 5 同意 98 / 100。六端各自用独立 QUOTA PR 修复,不能混进节点刷新。
- 统一查看 issue:issue 继续归所属代码仓库,不复制、不移动。“VPNCheap 产品问题中心”已建立,现有 12 条 issue 已回填,包含 16 个字段与 5 个视图;首批 6 仓 caller 的 6 个独立 PR 已全部合并,余下原生仓随各自功能链完成后接入,不需要定时 AI、定时任务或 token。
- 一键发布链接:原生客户端不是共用一个 Flutter 发布入口。Windows CI 已通过 PR #12 合并;Apple TV CI / TestFlight 闸门已通过 PR #6 合并且包测试 160/160。两端签名交付都在受保护环境和团队凭据配置前 fail-closed;iOS TestFlight 与独立 macOS 既有链也不代表修复已到达用户。Android、Android TV 与共享 Apple macOS仍需分别建设,Android TV 的发布凭据安全风险闭环前继续停发。
- 最低系统版本:当前源码基线是 iOS 17、共享与独立 macOS 14、tvOS 17.4。建议先保持,等真实付费用户、安装和客服数据证明旧系统覆盖有商业价值后,再评估下调和增加测试成本。App Store 上传使用最新 SDK,与客户端最低系统版本不是同一件事。
- 执行顺序:先处理 Android TV 发布安全并建立线上版本、来源分支和安装 cohort 基线,再并行修 Android、Apple、Windows 根因;随后接刷新入口和统一问题中心;最后做真机支付、前台、离线、账户切换和分批发布。未经真机与用户到达验证的项目只标为“已实现待验证”,不会当作已解决。