Files
2026-09-03 08:38:17 +08:00

117 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# uni-app 原生发行配置
H5 构建不依赖厂商证书。`pnpm check:native` 检查 AppID 基础格式、模块、隐私声明及 HTTPS/WSS 地址;不会验证开发者账号、AppID 归属或签名证书,这些仍由 HBuilderX/DCloud 打包流程校验。
1. 在 DCloud 开发者中心创建应用,将实际分配的 AppID 写入 `src/manifest.json` 的 `appid`,不要自行拼造。预检兼容 7 位和 8 位十六进制后缀,保留当前项目已有的 AppID。
2. 在 HBuilderX 的可视化 manifest 中配置应用包名、Android 签名证书和 iOS Bundle ID/证书。证书及密码不要提交到 Git。
3. 按实际厂商填写微信/QQ登录、微信/支付宝支付和 UniPush 参数。客户端只展示后端 `/api/v1/auth/oauth/providers` 与 `/api/v1/payment/channels` 返回且已启用的渠道。
4. 在 `mobile/.env.production` 配置 `VITE_API_ORIGIN` 和 `VITE_WS_ORIGIN`,预检和生产构建都会读取。终端/CI 显式注入的同名变量优先。域名必须具有有效 TLS 证书,反向代理须放行 `/ws` 升级连接。当前配置为 `https://im.bchongw.com` 和 `wss://im.bchongw.com`。
5. Android 仅保留网络、定位、相机、录音和振动权限;iOS 的对应隐私用途说明已写入 manifest。首次使用能力时由页面按需申请,不在启动时集中索权。
6. 运行下面的检查命令,再执行 `pnpm build:app-plus` 或使用 HBuilderX 云打包。
第三方 AppID、密钥、商户证书、短信签名和主体备案信息必须由真实主体申请,仓库不会提供可冒用的演示密钥。
## 在 HBuilderX 中导入及重新编译
本仓库的移动端是 Vue 3 CLI 工程。建议通过「文件 → 导入 → 从本地目录导入」选择 **`D:\web\age\im\mobile` 整个目录**,不要只选择 `mobile/src`。
- 整个工程导入会使用项目依赖,并保留根目录的 `vite.config.ts` 和 `.env` 配置。
- 只导入 `src` 也是 HBuilderX 支持的另一种方式,但会改用 HBuilderX 内置编译器,工程根目录和环境配置位置也会变化,不适合直接沿用本项目的 CLI 配置。
- 如果日志标签显示 `src - Xiaomi ...`,请检查当前选中的是否是单独导入的 `src` 工程。无需删除源码,重新导入并选择完整的 `mobile` 工程即可。
停止旧的运行任务,保存文件,再从「运行 → 运行到手机或模拟器」重新运行。生成安装包则使用「发行 → 原生 App 云打包」,根据实际发布平台填写包名和签名材料;签名/云打包成功才代表生成 APK/IPA。
## 真机调试与生产环境
### HBuilderX 提示找不到本地 Node.js
本机 Node.js 路径是 `C:\nvm4w\nodejs\node.exe`,版本 `v22.22.0`。2026-08-31 已确认 HBuilderX 的 Node 检测先调用 `where node`;原 PATH 遗漏 `C:\Windows\System32`,导致 `where.exe` 找不到,从而误报 Node 未安装。
已仅向当前用户 PATH 补入 `C:\Windows\System32`,原有条目保留,系统级 PATH 未改动。通过 HBuilderX 自带 Node 重现其检测步骤,已能找到本机 Node.js。修改前的 PATH 备份在仓库 `.tools/hbuilderx-path-backup-20260831.json`(不提交到版本库)。
保存文件并完全退出 HBuilderX,再重新打开完整 `mobile` 工程,使新进程读取更新后的环境变量。可在新终端验证:
```powershell
where.exe node
node --version
npm --version
```
不要为解决这一提示删除项目依赖、修改 HBuilderX 插件或重复安装 Node。
### 接口域名
`mobile/.env.production` 用于发行构建;HBuilderX「运行到手机/模拟器」使用 development 模式,不读取 `.env.production`。已在 `mobile/.env.development` 配置部署服务,调试和发行均可访问 `https://im.bchongw.com`,消息地址为 `wss://im.bchongw.com`。测试操作会使用该部署环境的真实数据。
如需独立测试服务器,可在 `mobile/.env.development.local` 覆盖地址。H5 本地开发也会读取 development 配置,请明确选择所需后端:
```dotenv
VITE_API_ORIGIN=https://im.bchongw.com
VITE_WS_ORIGIN=wss://im.bchongw.com
```
连接开发电脑上的后端时需要手机可访问的 HTTPS 地址(也可使用可信的 HTTPS 开发隧道)。手机上的 `127.0.0.1` 指向手机自身,不是开发电脑。不要把后端密钥、数据库密码或商户私钥放进任何 `VITE_` 变量,它们会被编入客户端。
`dev:app-plus` 现在按 `--mode development` 预检,`build:app-plus` 按 `--mode production` 预检,并输出实际 API/WS 地址。预检拒绝回环地址。运行时会区别提示接口配置错误、DNS 失败、证书失败和超时,不会关闭 TLS 证书校验。
`VITE_H5_BASE=/app/` 仅用于 H5 网站,App 构建不会再沿用该网站子路径。环境文件读取位置固定为工程目录,不依赖 HBuilderX 启动时的工作目录。
## 检查与 App 资源编译
在 `mobile` 目录执行:
```powershell
pnpm test:native-components
pnpm test:icons
pnpm test:native-config
pnpm type-check
pnpm check:native
pnpm build:app-plus
pnpm build:h5
```
当前 CLI 编译器将 App 资源输出到 `dist/build/app`,H5 输出到 `dist/build/h5`。App 资源不是已签名 APK/IPA;本次仅验证了资源编译,没有提交云打包、签名或安装到用户手机。
## 已修复的 switch 编译错误
原隐私设置和消息通知页面使用了 `<switch v-model="...">`,App Vue 编译时报 `v-model can only be used on <input>, <textarea> and <select> elements`。
两处均改为 `:checked` 配合 `@change`,在事件处理函数中用 `event.detail.value` 更新表单。已有的保存接口和样式保持不变,加载/保存期间禁止切换。回归测试覆盖全部 Vue 模板中的原生控件绑定,以及两个页面的开/关状态更新。
参考:[switch 官方文档](https://uniapp.dcloud.net.cn/component/switch.html)、[CLI 与 HBuilderX 工程的区别](https://uniapp.dcloud.net.cn/quickstart?id=quickapp)、[Vite 配置说明](https://uniapp.dcloud.net.cn/collocation/vite-config.html)。
## 已修复的 App 内功能图标空白
2026-08-31:截图中头像和文字正常,但底部导航、发布加号、定位等图标一起缺失。原因在共享 `src/components/AppIcon.vue`:之前直接把 `<svg>/<path>` 放在 uni-app 模板中,App-vue 的组件渲染链路不支持这种写法。这不是 COS 图片链接问题,也不是应用桌面启动图标的问题。
现已改为标准 `<view>` 组件,使用内置的 SVG 图片数据作为 CSS 遮罩,保留原有 39 个图标的几何形状、空心/实心状态、主题颜色和尺寸;同时提供 `-webkit-mask-*` 样式。所有图形都在安装包的 JS 中,不需要外网图标地址、字体下载或额外的 static 文件拷贝。
验证方式:
```powershell
# 在 mobile 目录执行。
pnpm test:icons
pnpm test:native-components
pnpm type-check
pnpm build:app-plus
pnpm build:h5
# 单独检查已经生成的 App 资源:
pnpm verify:app-icons
```
`build:app-plus` 已自动执行图标产物检查:必须包含内置 SVG 图片数据、双套遮罩属性和首页/附近/消息/动态/个人主页/聊天/会员 7 个页面的组件样式,不得残留原始 SVG 模板组件。
如需本地可视检查,可运行 `node scripts/preview-icons.mjs`,打开终端显示的本地地址。该预览直接编译实际 `AppIcon` 和 `BottomNav` 组件,使用隔离的未读数示例,不登录账号、不连接生产接口。可检查所有图标、深浅背景、实心切换、颜色切换和底部导航。此次浏览器手机尺寸预览的 51 个图标实例显示正常,颜色/实心切换和构建检查通过;未将浏览器结果当作 Android/iOS 真机验收。
### 如何让手机上的 App 使用修复
1. 在 HBuilderX 选择完整的 `D:\web\age\im\mobile` 工程,保存所有文件并停止旧的运行任务。
2. 真机调试:重新执行“运行到手机或模拟器”,让 HBuilderX 重新编译并同步资源。
3. 安装包:重新执行“发行 → 原生 App 云打包”,安装新生成的包。更新网站、后端或只刷新手机上的旧 APK 不会替换包内组件代码。
4. 如仍看到旧样式,先检查选中的工程路径以及打包时间;不要删除用户数据或卸载 App 来排查缓存。
本次生成的是 `dist/build/app` 资源,不是已签名 APK/IPA;没有提交云打包或安装到用户手机。需要在新包装到手机后确认底部五个图标及页面中的功能图标。
参考:[DCloud 关于 App-vue 中 SVG 图片与模板标签的说明](https://ask.dcloud.net.cn/question/67267)、[CSS mask-image](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/mask-image)。