# 实时消息中心 · App 构建说明

本项目提供 **两种原生 App 方案**，二选一即可出真包（APK / IPA）。

> **推荐方案：uni-app 云打包（见方案一）**——**无需本地装 Android SDK，也无需 Mac**，
> 由 DCloud 云服务器编译，点几下就产出可下载安装的 APK / IPA。这正是「一键出 App」的路径。
> Capacitor 方案（方案二）需本机或 CI 装 SDK，列作备选。

---

## 方案一：uni-app + 云打包（推荐，零本地环境）

工程目录：`uniapp/`（标准 HBuilderX 工程，内含「设置服务器地址」页 + WebView 加载网页版）。

### 安卓 APK —— 一键云打包
1. 下载安装 [HBuilderX](https://www.dcloud.io/hbuilderx.html)。
2. 菜单 **文件 → 导入 → 从本地目录导入**，选择本项目下的 `uniapp/` 文件夹。
3. 首次会提示「创建 appid」，点一下自动生成（写入 `manifest.json` 的 `appid`）。
4. 菜单 **发行 → 原生 App 云打包（云端）**：
   - 选择 **Android**，包名默认 `com.realtime.msgcenter`（可改）。
   - 证书选「使用公共测试证书 / 或自有证书」。
   - 点「打包」，等待几分钟。
5. 打包完成会给一个 **下载链接**，下载得到的 `xxx.apk` 即**真实可安装**的安装包，可直接发给安卓手机安装。

### iPhone / iPad IPA —— 云打包
1. 同样在 HBuilderX 里 **发行 → 原生 App 云打包（云端）** → 选择 **iOS**。
2. 需填入 **iOS 证书 / 描述文件**（个人/企业/App Store 均可，按你的分发需求）。
3. 打包完成下载得到 `.ipa`，用 **Apple Configurator / 爱思助手** 装到手机，或走 TestFlight / App Store。

> 说明：iOS 的「上架 App Store」始终需要苹果开发者账号；但「出真机可装的 ipa」云打包即可完成，无需你本地有 Mac。

### App 内「切换服务器地址」
- 首次打开 App 进入「设置服务器地址」页，填你的服务器地址
  （局域网 `http://电脑IP:3000` 或正式 `https://你的域名`），保存即进入。
- 之后随时点右上角 **「设置」** 按钮可重新填写（地址存 App 本地，不上传）。
- 同一个安装包，内网 / 局域网 / 正式环境通吃。

---

## 方案二：Capacitor（需本机或 CI 装 SDK，备选）

目录：`android/`（Android Studio）、`ios/`（Xcode，需 Mac）、`app-shell/`（设置页）、
`capacitor.config.json`、`.github/workflows/build-android.yml`（GitHub Actions 云端出 APK）。

### 安卓 APK
- **本机**：用 Android Studio 打开 `android/` → **Build → Build APK(s)**。
- **云端**：推 GitHub 后 **Actions → Build Android APK** 下载 Artifact（无需本机 SDK）。

### iPhone / iPad
- Mac 上 `npx cap sync ios` → Xcode 打开 `ios/App/App.xcworkspace` → Archive / TestFlight。

---

## 三、把安装包挂到网页「下载 App」入口

网页底部「下载 App」弹层已分 Android / iPhone / 网页版 三块。
把出好的包放到 `public/` 后，把对应按钮的 `href` 指过去即可：
- `public/app-release.apk`（安卓）
- iOS 暂无直链，按钮指向本说明文档（用户按文档装 ipa）。

---

## 四、后续可增强（未做，按需再加）
- **消息推送**：云打包后可集成 DCloud 个推/uni-push，或 Capacitor 接 FCM/APNs；届时 App 内容需改为「本地打包」而非远程加载，才能拿到推送桥。
- **应用图标 / 启动图**：替换 `uniapp/` 下的图标资源（HBuilderX 里「App 图标配置」可视化上传），建议绿色圆角「讯」logo 保持品牌一致。
- **包名 / appid**：`uniapp/manifest.json` 的 `appid` 与 Android 包名改成你自己的反向域名，避免冲突。
