diff --git a/docs/acceptance/b225-network-fix.md b/docs/acceptance/b225-network-fix.md new file mode 100644 index 0000000..cd7633a --- /dev/null +++ b/docs/acceptance/b225-network-fix.md @@ -0,0 +1,99 @@ +# B-225 双端验收包无法联网 + +分支:`agent/agent/a4ad7eed`(基于问题基线 `18d890ae7fdf66fa4df67360469f0f143641666a`) +施工依据:B-148 第13阶段返工;对照旧包 `v1.0.6-internal-test`、故障预发布 `v3.8.3-internal-acceptance`、本卡新源码与新产物。 +本卡只修客户端/构建配置并重打候选包,不改现网服务、不覆盖 Gitea 预发布 tag、不把构建成功当成真机联网通过。 + +**结论:Windows 根因是 Vite 未注入 `VITE_*`,登录打到 `undefined`;Android 根因是默认 host 为官方占位域名,且回退端口 10008/10009 已关闭。候选包产物级已写入公司内网地址。真机登录未测。** + +## 根因(产物对照,不是猜) + +公司内网现况(构建机只读探测 `192.168.200.11`):10001 / 10002 / 10010 / 17880 开;官方 chat 默认口 10008 / 10009 关。账号服务 `POST /api/login` 有业务响应。 + +| 对照项 | 旧可用包 `v1.0.6-internal-test` | 故障预发布 `v3.8.3-internal-acceptance` | 本卡源码 + 候选包 | +|---|---|---|---| +| Windows 登录 | asar 字面量 `http://192.168.200.11:10010/api/login` | asar 为 `` `${{}.VITE_ACCOUNT_URL}/api/login` ``(Vite 空对象) | asar 字面量 `http://192.168.200.11:10010` 等四条地址 | +| Windows IM / LiveKit | `:10002` / `:10001` / `:17880` 字面量 | 同样未注入 | 同上,四条均字面量 | +| Android `libapp.so` | 仅公司地址 | 公司地址 + `your-server-ip or your-domain` + `:10008` | 公司四条地址;`your-server-ip` / `:10008` / `:10009` 为 0 | + +Windows 直接原因:仓库根 `.gitignore` 忽略 `.env`,B-213 打包时没有 `.env` / `.env.production`,`vite build` 把 `import.meta.env.VITE_*` 编成空对象属性。 + +Android 直接原因:`Config._host` 不是 IP,启动默认走 HTTPS 假域名;`HttpUtil.init()` 在 `CompanyBootstrap` 之前拍死 `dio.baseUrl`;`ApiService.setBaseUrl` 曾只写 host 不带 `http://` 和端口;`Urls` 的 `static final` 第一次读取会冻结错误 URL;官方 chat 口已关,公司账号口是 10010。 + +## 最小修复 + +| 端 | 改动 | 作用 | +|---|---|---| +| PC | 新增 `pc-client/.env.production`(可入库) | `vite build` 默认 production 能注入内网地址 | +| PC | 新增 `pc-client/src/config/endpoints.ts`,登录/目录/RTC/IM 改走兜底常量 | 即使漏加载 env,也不会变成 `undefined` | +| Android | `Config._host = 192.168.200.11`;auth/chatToken 回退 10008/10009 → 10010 | 默认不再走假域名和已关闭端口 | +| Android | `HttpUtil.setBaseUrl`;bootstrap 写入完整 `AppEndpoints.apiAddr` | 启动后 Dio / ApiService 指向 `http://192.168.200.11:10002` | +| Android | `Urls` 改为 getter | DataSp 写入后 URL 会跟着更新 | + +未改:`account-service/`、docker、端口、现网数据、`mobile/` 旧工程。 + +## 提交与回退 + +从新到旧回退:先本验收记录,再联网修复。 + +| 主题 | SHA | 文件 | +|---|---|---| +| 本验收记录 | 本文件当次提交 | `docs/acceptance/b225-network-fix.md` | +| 联网修复 | `bbc4dce0b61b44447f84732d841b8a66e3a2f4be` | `pc-client/.env.production`、`pc-client/src/config/endpoints.ts`、PC 调用点、Android Config/Urls/HttpUtil/bootstrap | + +回退示例(新到旧): + +``` +git revert <本验收提交> +git revert bbc4dce0b61b44447f84732d841b8a66e3a2f4be +``` + +用户侧继续用旧包 `v1.0.6-internal-test`。不要回退到故障预发布 `v3.8.3-internal-acceptance`。 + +代码侧也可把分支重置回 `18d890ae7fdf66fa4df67360469f0f143641666a`。回退不影响现网服务与已发布旧包。 + +## 环境 + +- Flutter 3.24.5 / Dart 3.5.4(`C:\devtools\flutter_3.24.5`) +- Temurin JDK 17.0.20 +- Android SDK:platform-tools、platforms;android-34、build-tools;34.0.0 +- Node v24.5.0;`pc-client` `npm install --ignore-scripts` 后 `npm run build` + `npx electron-builder --win --x64` +- `GRADLE_OPTS=-Xmx4096M` + +## 候选包(未发布,未覆盖 `v3.8.3-internal-acceptance`) + +构建基线 HEAD:`18d890ae7fdf66fa4df67360469f0f143641666a` + 本卡两提交。 + +| 产物 | 版本 | 大小 | SHA256 | 路径 | +|---|---|---|---|---| +| Android release APK | 3.8.3 | 53,288,459 B | `3709E9B24F2F8B12B9BD931D6633DC101C186367B5C3E704DD91D67DCB791B86` | `mobile-next/build/app/outputs/flutter-apk/app-release.apk` | +| Windows NSIS EXE | 1.0.2 | 105,893,401 B | `F16B421857C341016E4375A869C53FF80B1028E49F84A59FE43C93D50FCC866C` | `pc-client/release/Base/1.0.2/畅联_1.0.2.exe` | + +故障预发布对照(不要当候选): + +| 产物 | SHA256 | +|---|---| +| APK `v3.8.3-internal-acceptance` | `41261A1BEBD00597D16B50A0D01A261AF592129C5F28014B423A1AAE07AE7C73` | +| EXE `v3.8.3-internal-acceptance` | `25491BA9A19E181144602F81991993DBF3350A3981BD1CC82354949A83B0E645` | + +产物抽检: + +- 新 EXE `app.asar`:`http://192.168.200.11:10010` / `:10002` / `ws://...:10001` / `:17880` 各 1 次;`VITE_ACCOUNT_URL`、`{}.VITE_`、`undefined/api/login` 为 0。 +- 新 APK `lib/arm64-v8a/libapp.so`:上述四条公司地址各 1 次;`your-server-ip`、`:10008`、`:10009` 为 0。 + +APK 内嵌时间戳,哈希不可位级复现。构建期告警同前:Flutter Gradle apply-script 弃用;部分依赖 Kotlin metadata 1.8.0 vs 工程预期 1.6.0。均属上游,release 通过。 + +## 已测 / 未测 + +已测: + +- 构建机到 `192.168.200.11` 的 10001/10002/10010/17880 端口开,10008/10009 关 +- 账号服务对错误工号返回业务 JSON(服务本身在) +- `npm run build`、`electron-builder --win --x64`、`flutter build apk --release` 成功 +- 新旧产物字符串对照如上 + +未测(不得写成已通过): + +- 公司内网真机 / 真 PC 用工号登录 +- 登录后会话列表、发消息、音视频 +- 本候选包安装覆盖旧包后的升级路径