UniApp App(Android / iOS)Demo
倉庫中的 sdk/uniapp/demo-app 是一個面向 UniApp App(App-Plus,Android 和 iOS)的完整 IM 示例,使用 @deeprespond/im-uniapp/app 和 uni_modules 中的原生外掛(IM 和 RTC 的原生橋、裝置推送、系統來電介面)。同一份程式碼也能編譯為 H5,在瀏覽器中除錯和自動化測試;App 專有的功能在 H5 中自動隱藏,或提示不可用。
功能範圍
| 模組 | 覆蓋內容 |
|---|---|
| 賬號 | 密碼登入和註冊、自動恢復登入、臨時修改伺服器地址、執行日誌 |
| 會話 | 未讀角標、置頂、標為未讀、草稿、正在輸入、搜尋、清空聊天記錄、tabBar 上的未讀角標 |
| 訊息 | 文字、表情、圖片、影片、檔案、語音、位置;撤回、表情回應、轉發、重發;自動標記已讀 |
| 好友 | 傳送、接受和拒絕好友申請,備註、黑名單、刪除;通訊錄搜尋 |
| 群聊 | 發起群聊、邀請和移除成員、改群名、退群、解散,群內的系統提示 |
| 音影片 | 一對一通話(來電浮層,接聽、結束通話、靜音、開關攝像頭);RTC 頻道頁(原生和 H5 兩種渲染方式) |
| App 專有 | 裝置推送註冊、系統來電介面(iOS CallKit、Android Telecom)、原生影片渲染元件 dr-rtc-video |
執行(App 真機 / 模擬器,主路徑)
- 複製
.env.example為.env.local,填寫公開的appKey和apiUrl;不要放服務端的金鑰。 - 用 HBuilderX 開啟
sdk/uniapp/demo-app,安裝uni_modules依賴,選擇 Android 或 iOS 的真機、模擬器執行(UTS 外掛自動編譯)。 - 在
manifest.json和原生外掛的配置中填寫包名、推送證書(FCM、華為、榮耀、小米、OPPO、vivo、魅族)、CallKit 和 Telecom 的許可權,以及 RTC 服務的地址。 - 先在“訊息”“通訊錄”中確認登入和收發訊息正常,再在“RTC 頻道”頁確認媒體許可權和畫面渲染。
UTS 原生外掛的離線包可以從 UniApp SDK 接入與下載 獲取。
執行(H5 瀏覽器聯調 / 自動化測試)
bash
cd sdk/uniapp/demo-app
cp .env.example .env.local
# 编辑 .env.local;不要提交真实密码、Ticket 或长期密钥。
pnpm install
pnpm dev:h5 # http://127.0.0.1:5187Vite 的開發代理把 /client(含 WebSocket)轉發到 IM 服務(預設 IM_HARNESS_URL=http://127.0.0.1:18480),把 /im-private、/im-public(檔案的簽名下載地址)轉發到 S3 相容儲存(預設 IM_S3_URL=http://127.0.0.1:9010)。
環境變數
| 變數 | 說明 |
|---|---|
VITE_IM_APP_KEY | 應用的 App Key,預設 org#app |
VITE_IM_API_URL | IM 服務地址;H5 除錯時填本地服務即可(由開發代理轉發) |
VITE_IM_WS_URL | WebSocket 地址,可選 |
平臺條件編譯與降級
工程用 #ifdef APP-PLUS 和 #ifdef H5 區分平臺(原生橋在 core/native.js,建立客戶端在 core/client.js):
- App:推送註冊、系統來電介面(Telecom、CallKit)和原生影片渲染
dr-rtc-video可用。 - H5:頁面邏輯和 SDK 的呼叫與 App 共用;推送註冊被條件編譯去掉,不顯示系統來電介面,通話和頻道的媒體使用瀏覽器的 WebRTC(LiveKit);錄音、定位、選擇檔案依賴瀏覽器的能力,不可用時介面顯示 SDK 給出的失敗原因。
測試邊界與原始碼包
H5 目標可以在 Linux 或 CI 中用 Playwright 做三賬號的端到端測試,原生橋可以做靜態檢查。Android 和 iOS 的構建,以及推送、系統來電介面、原生影片渲染等功能,需要用相應的開發機和真機測試。
Demo 原始碼包(1.0.1,不含依賴和本地配置):deeprespond-uniapp-demo-app-1.0.1.zip
