建置、簽章與上架
建置
bash
npx im-miniapp build [--dev-key keys/developer.pem] [--platform-key keys/dev-platform.pem] [--out dist]CLI 依序:
- 讀取並驗證
miniapp.config.ts(錯誤一次全部列出)。 - 用 Vite 建置畫面層(
base: './'、語法目標 Safari 15/Chrome 111)。 - 雙執行緒時,另外把
logic打包成單一檔案logic.js(ES2020、壓縮)。 - 檢查包內容:沒有保留路徑、有
index.html、icons指向的檔案存在。 - 計算每個檔案的 sha256 與體積,依效能預算檢查;任何一項超標就失敗,不產生
.imapp。 - 產生
manifest.json,用開發者私鑰簽出signature.sig(有給--platform-key時另外簽platform.sig)。 - 輸出
dist/<id>-<version>.imapp;sourcemap 放在dist/sourcemaps/,不進包。
完整選項見 CLI 參考。
離線包內容
<id>-<version>.imapp(zip)
├── manifest.json # CLI 產生
├── signature.sig # 開發者簽章
├── platform.sig # 平台簽章(審核通過後由平台加上)
├── index.html
├── logic.js # 雙執行緒才有
└── assets/… # Vite 輸出,檔名含 hashmanifest.json 由 CLI 依 miniapp.config.ts 產生,另外包含 files(每個檔案的 sha256)、sizes(體積)、builtAt、buildTool。不要手動修改包內任何檔案:任何改動都會讓雜湊或簽章驗證失敗。
簽章
| 簽章 | 誰簽 | 用途 |
|---|---|---|
signature.sig | 開發者私鑰(放在你的 CI) | 證明包是你建置的 |
platform.sig | 平台私鑰(只在平台後台) | 證明包已通過審核。容器只認這個 |
- 兩者都是對
manifest.json原始位元組的 Ed25519 簽章。 - 容器內建平台公鑰,下載安裝時驗
platform.sig,並逐檔比對files的 sha256。缺少platform.sig、簽章不符、檔案被改、多出沒列出的檔案,一律拒絕安裝。容器不檢查signature.sig(由後台檢查)。 - 送審的包必須帶
signature.sig(--dev-key)。 - 本機測試用的「開發用平台金鑰」只有測試版 App 信任;正式版 App 不會載入用它簽的包。
- 用
im-miniapp keygen <名稱>產生金鑰:<名稱>.pem是私鑰(PKCS8),<名稱>.pub是公鑰(32 位元組的 base64)。私鑰不得進版本控制。
版本號
- 用語意化版本:
主.次.修訂,可以帶預發布標記(1.2.0-beta.1)。 - 內容有任何改動都要升版,包含只改文案或樣式。容器以版本號判斷要不要更新,沒升版的改動不會送到使用者手機。
- 新版在使用者下次開啟時生效(見生命週期 → 版本更新)。
- 用到新的容器能力時,同步提高
minContainer(見容器版本)。提高之後,容器版本較舊的 App 使用者會看到「请更新 App 后使用该小程序」。
上架流程
在平台後台(<平台網址>/console/)完成,帳號由平台管理員邀請。
上傳(草稿)→ 送審 → 通過 ─┬→ 全量發佈 ─→ 線上
↘ 退回 └→ 灰度發佈 ─→ 調整比例 ─→ 轉全量
(修改後可重新送審) 線上隨時可:暫停 ⇄ 恢復、回滾到之前的版本、下架第一次使用
- 接受邀請、設定密碼。
- 到「账号设置 → 签名公钥」登記
im-miniapp keygen產生的.pub(上傳的包必須用對應的私鑰簽)。 - 要用 CLI 上傳就建立「CLI 令牌」,執行
im-miniapp login。
1. 上傳
在後台拖曳 .imapp,或執行 im-miniapp upload。後台會自動檢查並給出一份報告:
| 檢查 | 不通過時 |
|---|---|
解壓、manifest.json 格式、ID 與版本號(要高於線上版本、不能重複) | 錯誤,不建立版本 |
| 開發者簽章(小程序任一成員登記的公鑰) | 錯誤 |
每個檔案的 sha256、沒有多出或缺少的檔案、不用 __im/ | 錯誤 |
| 體積重算與效能預算 | 錯誤 |
minContainer 不高於最新 App 的容器版本 | 錯誤;比線上版本高時提醒 |
| 權限:不存在的權限是錯誤;新增的權限、容器尚未支援的能力、需要核准的權限是提醒 | |
新增的網域、靜態掃描(eval、document.cookie、prefers-color-scheme、color-mix() 等) | 提醒 |
- 有錯誤時不建立版本,修正後重新上傳即可(版本號可以沿用)。
- 報告會列出與線上版本的差異:檔案增刪改、體積變化、新增的權限與網域,審核員也看得到。
- 第一次上傳某個 ID 時自動建立小程序,名稱、年齡分級、圖示(
icons)從包帶入。
2. 體驗
新上傳的版本自動成為體驗版。在「成员与体验」加入體驗成員的 IM 使用者 ID,他們在測試版 App 裡打開小程序就是體驗版(不用送審)。體驗版用體驗金鑰簽章,正式版 App 不會載入。
3. 填資料、送審
送審前要補齊:名稱、簡介(至少 10 個字)、圖示、分類、年齡分級,以及每個權限的用途說明。缺什麼後台會直接列出。
- 同一時間只能有一個版本在審核;要換版本先「撤回」。
- 可以勾選「審核通過後自動全量發佈」。
- 審核員會逐項確認:功能可用、內容合規、權限與用途相符、體驗規範、資料與功能一致、年齡分級、沒有付費。被退回時會附原因,修改後可以重新送審。
4. 發佈
- 全量:所有使用者下次打開時更新。
- 灰度:指定比例(同一個使用者永遠落在同一組)與/或指定使用者 ID;觀察「數據」頁的失敗率與啟動耗時,再調整比例或轉全量,有問題就停止灰度。
- 發佈後 App 的清單即時更新;使用中的畫面不會被打斷,新版在下次打開時生效。
5. 線上維運
| 操作 | 說明 |
|---|---|
| 暫停/恢復 | 立即生效,開著的畫面會顯示「该小程序已暂停服务」;恢復不需重審。被平台暫停的只能由平台恢復 |
| 回滾 | 退回之前上線過的任一版本,立即生效 |
| 下架 | 從 App 與索引頁移除 |
| 數據 | 每日開啟(冷/熱啟動)、使用者數、啟動耗時 p75 對照執行期目標、失敗原因、版本分佈、sdk.telemetry 自訂事件 |
| 檢舉 | 使用者的檢舉會通知你與平台 |