更新记录

1.0.0(2026-09-02)

支持平台:Android 7.0(API 24)及以上,不支持 iOS、H5 和各类小程序端。 正式提交前请在自己的 DCloud 开发者账号中确认该标识可用。若市场提示已占用,应使用发布者前缀,并同步修改 ZIP 一级目录、package.json.id、Android module 注册名和所有 requireNativePlugin 调用。如需帮助***:1057588825 微信:tyh998998


平台兼容性

uni-app(5.25)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

其他

多语言 暗黑模式 宽屏模式
× ×

微信 WMPF VoIP UTS 插件

插件说明

本插件通过 UTS 原生混编封装腾讯微信硬件平台 WMPF Android SDK,支持:

  • WMPF 初始化和运行状态查询;
  • 小程序设备注册状态查询及不可逆注册;
  • 通话小程序预加载、语音/视频通话启动;
  • 正常挂断、强制关闭、当前通话查询;
  • 通话状态、通话记录及小程序 Channel 事件回传。

插件 ID:wechat-voip-uts

版本:1.0.0

平台:Android 7.0(API 24)及以上;支持 uni-app 的 Vue 2/Vue 3 和 uni-app x 的 Android App,不支持 iOS、Web、nvue 和各类小程序端。

最低 HBuilderX:4.27。插件包含 Java 原生混编代码和本地 AAR,调试时必须重新制作自定义基座或云打包,普通热刷新不会集成原生依赖。

上架前必须确认

插件内的 wmpf-cli-2.2.0.aar 属于腾讯 WMPF SDK。发布者必须确认自己具有在 DCloud 插件市场中再分发该 SDK 的授权,并确认版本、来源、许可证及校验和。若没有再分发授权,请不要公开上传包含该 AAR 的 ZIP,应改为在文档中指导购买者自行取得 SDK。

正式发布前还应确认 wechat-voip-uts 在自己的 DCloud 账号下可用。若 ID 已占用,请改成带发布者前缀的唯一 ID,并同步修改插件目录名和示例工程中的导入路径。

安装

将插件目录放到项目:

uni_modules/wechat-voip-uts

然后在 HBuilderX 中重新制作 Android 自定义基座,或直接提交云打包。

页面中从插件根目录导入,不要直接导入 utssdk 内部文件:

import {
  initialize,
  getStatus,
  getDeviceRegistrationState,
  registerDevice,
  preloadMiniProgram,
  startCall,
  hangup,
  forceClose,
  getActiveCall,
  onEvent,
  offEvent
} from '@/uni_modules/wechat-voip-uts'

数据与密钥安全

插件不包含业务服务器地址、接口路径、产品密钥、签名私钥、真实设备标识和用户信息。

以下数据必须由已登录的宿主应用从自己的业务服务端动态取得:

  • signaturesnTicket
  • hostAppIdproductIdkeyVersion
  • 设备 ID/SN、小程序 AppID、modelId 和页面路径;
  • voipOpenId、通话对象及其他个人信息。

不要在客户端保存 hostAppSecret 或实现产品密钥签名算法,也不要在日志中输出完整票据、设备标识或个人信息。

事件监听

onEvent 是持续回调,同一时刻只保留最后一次注册的监听器。不再使用时必须调用 offEvent(),避免页面销毁后仍持有回调。

onEvent(event => {
  console.log(event.type, event.data)
})

// 页面卸载
offEvent()

事件类型包括:runtimeStateruntimeErrordeviceActivationdeviceRegistrationcallStatecallRecordvoipEventchannelEventRegisteredchannelEventUnregistered

初始化

initialize({
  hostAppId: runtimeConfig.hostAppId,
  productId: Number(runtimeConfig.productId),
  keyVersion: Number(runtimeConfig.keyVersion),
  deviceId: runtimeConfig.deviceId,
  signature: runtimeConfig.signature,
  features: ['voip-device']
}, result => {
  console.log(result.code, result.message)
})

必填字段不能写死。同一进程内若更换启动参数会返回 RESTART_REQUIRED,需要完全结束并重启应用进程。

查询状态

getStatus(result => console.log(result))
getDeviceRegistrationState(result => console.log(result))
getActiveCall(result => console.log(result))

注册小程序设备

设备注册不可逆,必须先由用户核对参数并明确确认:

registerDevice({
  miniProgramAppId: registration.miniProgramAppId,
  modelId: registration.modelId,
  sn: registration.sn,
  snTicket: registration.snTicket,
  irreversibleConfirmed: true
}, result => {
  console.log(result.code, result.message)
})

预加载和发起通话

preloadMiniProgram({
  appId: callConfig.miniProgramAppId
}, result => console.log(result))

startCall({
  requestId: callConfig.requestId,
  requireRegistered: true,
  miniProgram: {
    appId: callConfig.miniProgramAppId,
    path: callConfig.miniProgramPath,
    appType: callConfig.appType,
    landscapeMode: callConfig.landscapeMode
  },
  dial: {
    sn: callConfig.deviceSn,
    callType: callConfig.callType,
    durationLimitSeconds: callConfig.durationLimitSeconds,
    callName: callConfig.callName,
    voipOpenId: callConfig.voipOpenId,
    studentUuid: callConfig.studentUuid,
    parentUuid: callConfig.parentUuid,
    businessData: callConfig.businessData
  },
  camera: callConfig.camera
}, result => {
  console.log(result.code, result.message)
})

必填项:miniProgram.appIdminiProgram.pathdial.sndial.voipOpenIddial.callType 只能为 voicevideo

挂断与关闭

hangup(result => console.log(result))

forceClose({
  appId: currentMiniProgramAppId
}, result => console.log(result))

正常挂断依赖通话小程序注册 handleHungUp 事件。没有注册时会返回 HANGUP_EVENT_NOT_REGISTEREDforceClose 用于强制关闭小程序。

小程序 Channel 约定

命令 方向 说明
get_sn 小程序 → 插件 获取本次通话设备 SN
get_camera 小程序 → 插件 获取相机方向和镜像配置
device_dial_info 小程序 → 插件 获取本次通话参数
call_record 小程序 → 插件 回传通话记录事件
voip_event 小程序 → 插件 回传扩展通话事件
EndVoip 小程序 → 插件 结束并关闭当前通话小程序
handleHungUp 插件 → 小程序 宿主请求正常挂断

权限说明

  • INTERNETACCESS_NETWORK_STATE:WMPF 服务及通话小程序通信;
  • CAMERA:视频通话;
  • RECORD_AUDIOMODIFY_AUDIO_SETTINGS:语音和视频通话;
  • WAKE_LOCK:通话期间保持必要运行状态。

敏感权限应在用户主动使用对应功能时,由宿主应用按平台要求说明用途并请求授权。

常见错误

错误码 处理建议
INVALID_ARGUMENT 检查必填参数和数字范围
WMPF_NOT_READY 等待 initialize 成功
WMPF_INIT_FAILED 检查 Service APK、产品登记、设备 ID 和动态签名
RESTART_REQUIRED 完全结束进程后用新参数重新初始化
CONFIRMATION_REQUIRED 用户确认不可逆注册后传确认标记
REGISTER_FAILED_* 检查小程序 AppID、modelId、SN 和一次性票据
CALL_IN_PROGRESS 结束当前通话后再发起
HANGUP_EVENT_NOT_REGISTERED 在通话小程序注册 handleHungUp

验收范围

源码编译和插件 ZIP 校验不能代替真实环境验收。发布前至少使用真实 WMPF 产品、已安装的 com.tencent.wmpf Service APK 和 Android 真机验证:初始化、激活、注册确认、语音、视频、挂断、强制关闭、通话记录及事件回传。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 权限列表: 1. android.permission.INTERNET 用途:用于腾讯 WMPF Service、小程序加载、设备激活及微信语音/视频通话的网络通信。 2. android.permission.ACCESS_NETWORK_STATE 用途:用于判断当前网络连接状态,辅助 WMPF 初始化及通话连接。 3. android.permission.CAMERA 用途:用户主动发起视频通话时采集摄像头画面;不使用视频通话时无需使用摄像头。 4. android.permission.RECORD_AUDIO 用途:用户主动发起语音或视频通话时采集麦克风音频。 5. android.permission.MODIFY_AUDIO_SETTINGS 用途:语音/视频通话期间调整通话音频模式、扬声器及麦克风相关状态。 6. android.permission.WAKE_LOCK 用途:通话过程中保持必要的运行状态,避免因设备休眠导致通话中断。 其中 CAMERA 和 RECORD_AUDIO 属于敏感权限,应由宿主应用在用户主动使用语音/视频通话功能时说明用途并申请。用户拒绝授权后,相关通话功能将无法正常使用。本插件不会在无用户操作的情况下主动采集摄像头或麦克风数据。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件不内置插件开发者的业务服务器地址,不会把数据上传到插件开发者自有服务器。 为实现微信硬件平台 WMPF 初始化、设备注册、小程序运行和语音/视频通话,插件会处理以下由宿主应用主动传入的数据: 1. WMPF 初始化数据 包括 hostAppId、productId、keyVersion、deviceId/设备SN、动态 signature。 用途:完成 WMPF 设备身份校验、初始化和设备激活。 2. 小程序设备注册数据 包括小程序 AppID、modelId、设备SN和一次性 snTicket。 用途:完成微信小程序设备注册。设备注册属于不可逆操作,插件要求调用方明确确认后才能执行。 3. 通话业务数据 包括请求编号、设备SN、通话类型、通话时长限制、接听人称呼、voipOpenId,以及调用方可选传入的用户标识、业务扩展数据和相机方向配置。 用途:启动指定的微信通话小程序,并通过 WMPF Channel 向通话小程序提供本次通话所需参数。 4. 通话结果数据 通话小程序可能向插件返回通话记录、通话状态和扩展事件。 用途:通过插件回调交还宿主应用处理,是否保存及保存期限由宿主应用自行决定。 5. WMPF Service 状态 插件仅查询指定包名 com.tencent.wmpf 是否安装及其版本号,不会遍历用户的应用列表。 用途:检查运行环境是否满足 WMPF 使用要求。 插件不持久化动态 signature、snTicket、voipOpenId、用户标识或通话业务数据;这些数据仅在当前应用进程及本次通话期间使用。插件只会在应用私有存储中保存 WMPF Channel 的事件注册标识,用于完成事件回调,不包含用户身份或通话内容。 服务器地址说明: 本插件代码中没有写死业务服务器地址。宿主应用如需获取 signature、snTicket或通话对象,应访问接入方自己的业务服务器,具体地址及其隐私合规责任由接入方负责。 本插件依赖第三方腾讯 WMPF SDK及包名为 com.tencent.wmpf 的 WMPF Service。该组件会为设备激活、身份校验、小程序下载和运行、微信语音/视频通话等功能与腾讯/微信服务器进行网络通信。具体服务域名、第三方数据处理规则及隐私政策以腾讯微

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

本插件不包含任何广告,不接入广告SDK,不展示开屏广告、插屏广告、信息流广告、横幅广告或激励视频广告,也不会进行广告统计、用户画像或商业推广。

暂无用户评论。