import type { CapacitorConfig } from '@capacitor/cli'; /** * Capacitor 配置 —— Android 打包的**唯一真源**(2026-11-15) * * ## 为什么 webDir 指到 dist/fmode-app-v2/browser * * 本项目是 Angular `@angular/build:application`,产物落在 * `dist//browser/`。Capacitor 只认这个静态目录, * 所以必须先 `npm run build` 再用 `npx cap sync` 把它拷进 `android/app/src/main/assets/public/`。 * * ## 为什么必须锁 server.hostname / androidScheme * * 🔴 这是打包后**最容易踩的坑**: * · 默认 `hostname = localhost`、`androidScheme = https` → origin 变成 `https://localhost` * · Capacitor 的 `_capacitor_file_` 协议下,WebView 对跨域请求的限制与浏览器一致 * · 我们实测过 `s3.fmode.cn` / `server.fmode.cn` / `matrix.fmode.cn` 三个域名 * 都能对 `https://localhost` 正常回 CORS 头,所以**直连可行** * * 锁死这两项是为了让 origin 稳定 —— 以后若要给平台报白名单, * 报的就是 `https://localhost` 这一个值,不会随版本漂移。 * * ## 关于推送 * * 本期**不接极光 SDK**(用户 2026-11-15 裁决)。原因见 * `docs/02-design/plans/2026-11-14-手机端UX优化与Android打包方案.md`: * 没有服务端推送触发链路时,极光的核心价值(离线推送)用不上, * 本地通知用官方 `@capacitor/local-notifications` 即可。 */ const config: CapacitorConfig = { /** 🔴 用户 2026-11-15 拍板:一旦分发后改名 = 换签名 + 重装 */ appId: 'cn.fmode.app', appName: 'Fmode', /** Angular 生产构建输出目录 */ webDir: 'dist/fmode-app-v2/browser', /** * 追加 UA 标记。 * * 服务端 / 埋点可以据此区分「Web 访问」与「App 内访问」, * 也方便线上排查时确认用户到底跑的是哪个壳。 */ appendUserAgent: 'FmodeApp/2.0', server: { /** * 固定为 https —— Android WebView 在 http 下会禁用部分能力 * (Service Worker、部分安全上下文 API)。 */ androidScheme: 'https', /** * 固定 hostname:origin 稳定为 `https://localhost`。 * 不去改它,避免 origin 随 Capacitor 版本漂移。 */ hostname: 'localhost', }, android: { /** * 允许明文流量**关闭**(默认值,显式写出来是为了防止有人后来误开)。 * 我们的后端全部是 https,没有例外。 */ allowMixedContent: false, }, }; export default config;