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
