外观
uni-app 接入
密信 IM 使用标准 uni-app Vue 3,通过统一模块组织页面与通信能力;App、H5 和微信目标分别使用对应的 SDK 适配。
先选择编译目标
| 目标 | IM 路径 | Call 范围 |
|---|---|---|
| H5 | TypeScript + Web 适配 | Web Call SDK/UIKit |
| Android App | UTS → 原生 IM SDK | 原生媒体桥与通话展示 |
| iOS App | UTS → 原生 IM SDK | 前台媒体桥;不含 CallKit、PushKit、后台/锁屏来电 |
| 微信小程序 | TypeScript + 微信适配 | 不提供 Call SDK/UIKit |
密信 IM 开发版 5.0 的四个 uni-app 模块名为 mixinim-sdk、mixinim-uikit、mixinim-call-sdk 和 mixinim-call-uikit,具体模块版本与原生依赖按授权交付清单配套。微信目标只接入前两类。
安装与原生基座
从授权套件取得配套 uni_modules 与目标平台接入资料。App 运行需要包含当前原生 SDK/媒体依赖的自定义基座,普通基座不具备这些原生能力。
更新 UTS、原生内核、Manifest 或媒体依赖后,重新制作包含这些依赖的自定义基座,再构建 App。H5 与微信使用各自的目标构建配置。
创建 SDK
授权模块的 client.js 提供统一工厂。宿主账号控制器先执行 const im = createImClient(config) 并保留实例,再调用下面的连接函数。config 和 session 来自本项目的部署与业务登录流程:
js
import { createImClient } from '@/uni_modules/mixinim-sdk/client.js'
export async function connectIm(im, session) {
await im.connect(session)
}App 配置的 nativeTarget 必须为真实的 android 或 ios。Session 平台与设备码由后端绑定;uniapp 是框架名称,不能替代 Session 的平台值。H5/微信目标由对应适配器处理环境差异。
连接失败时,宿主仍持有 im,可按错误类型处理;确定放弃该实例或退出账号时执行 await im.dispose(),不要直接丢弃引用并新建实例。页面卸载只清理页面订阅,全应用 SDK 由账号生命周期管理。
使用 UIKit
宿主持有 im 后,聊天组件可绑定同一个实例:
vue
<mixinim-chat :client="im" />组件按授权包的注册方式接入。消息、通讯录、页面导航、业务账号与设置的组合由宿主负责;需要发起通话时,宿主消费聊天组件的 start-call 事件并交给同账号 Call SDK。
H5 Call Host 与 App 原生通话浮层的管理不同。App 最小化后应恢复已有通话,不能因页面重挂载再创建第二个媒体实例。
通知与前后台
实时 Socket 消息可生成本地通知,界面结合免打扰与系统通知权限显示提醒。厂商离线推送是独立通道,需配置应用标识、厂商服务和终端权限。
微信目标使用消息与聊天界面;iOS App 的通话在前台使用,不包含 CallKit、PushKit 与后台来电。
联调重点
确认设备与平台绑定、重连、附件选择/上传/打开、页面返回与键盘、退出切号,以及当前基座和页面版本是否配套。媒体、系统通知和后台行为应使用真实目标设备验证。
下一步:账号与 Session · UIKit 接入 · Call 平台差异