帮你快速理解、总结文档立即下载

微信小程序(uni-app)

最近更新时间:2026-07-23 15:55:57

我的收藏
本文将介绍如何快速接入 TUICallKit 组件。您可以在 10 分钟内完成以下关键步骤,最终获得一个功能完备的音视频通话界面。
语音通话
视频通话



准备工作

环境要求

微信 App iOS 最低版本要求:8.0.40。
微信 App Android 最低版本要求:8.0.40。
小程序基础库最低版本要求:2.10.0。
注意:
由于小程序测试号不具备 <live-pusher> 和 <live-player> 的使用权限,请使用企业小程序账号申请相关权限进行开发。
由于微信开发者工具不支持原生组件(即 <live-pusher> 和 <live-player> 标签),需要在真机上进行运行体验。
不支持企业微信小程序

开通服务

在使用腾讯云提供的音视频服务前,您需要前往控制台,为应用开通音视频服务。具体步骤详见 开通服务。开通服务后,请记录 SDKAppID、SecretKey,在后续的步骤中会用到。

开通企业类小程序

小程序推拉流标签不支持个人小程序,只支持企业类小程序。需要在 注册 时填写主体类型为企业,如下图所示:


在小程序控制台开启实时音视频接口

小程序推拉流标签使用权限暂时只开放给有限类目,具体支持类目参见该地址
符合类目要求的小程序,需要在 微信公众平台 > 开发 > 开发管理 > 接口设置中自助开通该组件权限。

登录小程序控制台更新隐私保护政策,勾选麦克风摄像头


在小程序控制台配置域名

微信公众平台 > 开发 > 开发管理 > 开发设置 > 服务器域名中设置 request 合法域名 socket 合法域名

将以下域名添加到 socket 合法域名:
域名
说明
是否必须
wss://${SDKAppID}w4c.my-imcloud.com
v3.4.6起,SDK 支持独立域名,可更好地保障服务稳定性。
例如您的 SDKAppID 是 1400xxxxxx,则独立域名为: wss://1400xxxxxxw4c.my-imcloud.com
必须
wss://wss.im.qcloud.com
Web IM 业务域名
必须
wss://wss.tim.qq.com
Web IM 业务域名
必须
wss://wssv6.im.qcloud.com
Web IM 业务域名
必须
将以下域名添加到 request 合法域名:
域名
说明
是否必须
https://web.sdk.qcloud.com
Web IM 业务域名
必须
https://boce-cdn.my-imcloud.com
Web IM 业务域名
必须
https://api.im.qcloud.com
Web IM 业务域名
必须
https://events.im.qcloud.com
Web IM 业务域名
必须
https://webim.tim.qq.com
Web IM 业务域名
必须
https://wss.im.qcloud.com
Web IM 业务域名
必须
https://wss.tim.qq.com
Web IM 业务域名
必须
将以下域名添加到 uploadFile 合法域名:
域名
说明
是否必须
https://${SDKAppID}-cn.rich.my-imcloud.com
从 2024年9月10日起,新增应用默认分配 COS 独立域名。
例如您的 SDKAppID 是 1400xxxxxx,则 COS 独立域名为:https://1400xxxxxx-cn.rich.my-imcloud.com
必须
https://cn.rich.my-imcloud.com
文件上传域名
必须
https://cn.imrich.qcloud.com
文件上传域名
必须
https://cos.ap-shanghai.myqcloud.com
文件上传域名
必须
https://cos.ap-shanghai.tencentcos.cn
文件上传域名
必须
https://cos.ap-guangzhou.myqcloud.com
文件上传域名
必须
将以下域名添加到 downloadFile 合法域名:
域名
说明
是否必须
https://${SDKAppID}-cn.rich.my-imcloud.com
从 2024年9月10日起,新增应用默认分配 COS 独立域名。
例如您的 SDKAppID 是 1400xxxxxx,则 COS 独立域名为:https://1400xxxxxx-cn.rich.my-imcloud.com
必须
https://cn.rich.my-imcloud.com
文件下载域名
必须
https://cn.imrich.qcloud.com
文件下载域名
必须
https://cos.ap-shanghai.myqcloud.com
文件下载域名
必须
https://cos.ap-shanghai.tencentcos.cn
文件下载域名
必须
https://cos.ap-guangzhou.myqcloud.com
文件下载域名
必须

快速接入

步骤1:创建小程序项目(可选)

注意:
TUICallKit 组件支持 HBuilderX 和 CLI 脚手架两种集成方式。
HbuilderX
CLI 脚手架
1. 在 HBuilder 中创建小程序项目。

2. 在终端输入 npm init -y,创建 package.json 文件。
npm init -y
1. 全局安装 vue-cli:
npm install -g @vue/cli
2. 通过 CLI 创建项目:
Vue3(推荐)
Vue2
创建 js 项目(推荐)
创建 ts 项目
npx degit dcloudio/uni-preset-vue#vite chat-example
npx degit dcloudio/uni-preset-vue#vite-ts chat-example
推荐选择 TypeScript 模板创建项目。
vue create -p dcloudio/uni-preset-vue chat-example
3. 创建完成后,切换到项目所在目录:
cd chat-example

步骤2:下载 TUICallKit 组件

1. 下载组件。
Vue3
Vue2
npm i @trtc/calls-uikit-wx-uniapp
npm i @trtc/calls-uikit-wx-uniapp unplugin-vue2-script-setup @vue/composition-api
2. 拷贝源码。
HbuilderX
CLI 脚手架
MacOS 端
Windows 端
mkdir -p ./TUICallKit && cp -r node_modules/@trtc/calls-uikit-wx-uniapp/TUICallKit/* ./TUICallKit/
xcopy node_modules\\@trtc\\calls-uikit-wx-uniapp\\TUICallKit .\\TUICallKit /i /e
MacOS 端
Windows 端
mkdir -p ./TUICallKit && cp -r node_modules/@trtc/calls-uikit-wx-uniapp/TUICallKit/* ./src/TUICallKit
xcopy node_modules\\@trtc\\calls-uikit-wx-uniapp\\TUICallKit .\\src\\TUICallKit /i /e

步骤3:工程配置

1. 配置页面路由

pages.json 文件注册全局监听页面。在原有代码中追加如下配置。
{
"path": "TUICallKit/components/CallView/CallView",
"style": {
"navigationBarTitleText": "uni-app"
}
},
{
"path": "TUICallKit/plugin/groupCall/components/GroupCallView",
"style": {
"navigationBarTitleText": "uni-app"
}
}

2. 修改 vue.config.js 文件(Vue3 项目请忽略)

修改 vue.config.js 文件,进行 unplugin-vue2-script-setup 插件的使用,若没有 vue.config.js 文件请新建
const ScriptSetup = require('unplugin-vue2-script-setup/webpack').default;
module.exports = {
parallel: false,
configureWebpack: {
plugins: [
ScriptSetup({}),
],
resolve: {
// Prevent webpack from following pnpm symlinks to their real .pnpm store
// paths. UniApp's compiler uses the resolved path to generate component
// references in the output JSON. Without this, it produces unresolvable
// paths like `node-modules/.pnpm/@tencentcloud+trtc-component-uniapp@.../...`.
symlinks: false,
},
},
chainWebpack(config) {
config.plugins.delete('fork-ts-checker');
},
};

3. 修改 main.js 文件(Vue3 项目请忽略)

修改 main.js 文件,进行 @vue/composition-api 插件的使用。
import vueComposition from "@vue/composition-api"
Vue.use(vueComposition)

步骤4:登录组件

说明:
如果您的应用要求用户启动后必须立即登录,建议将登录初始化代码放置在应用入口组件(例如 App.vue)的 onLaunch 生命周期钩子中。
如果您的应用有一个明确的登录按钮,则这段代码应作为该按钮的 onClick 或 @click 事件的处理函数。
import { useLoginState } from '../../TUICallKit/states/LoginState';

const { login } = useLoginState();

const loginHandler = async () => {
const userID = 'denny'; // 请替换为您的 UserID
const SDKAppID = 1400000001; // 请替换为开通服务控制台的 SDKAppID
await login({
userId: userID,
userSig: 'xxxxxxxxxxx', // 您可以在控制台中计算一个 UserSig 并填在这个位置
sdkAppId: SDKAppID,
});
wx.$globalCallPagePath = 'TUICallKit/components/CallView/CallView'; // 配置全局监听页面路径
};
登录接口参数说明
参数
类型
说明
SDKAppID
Number
userID
String
当前用户的唯一 ID,仅包含英文字母、数字、连字符和下划线。
userSig
String
用于腾讯云鉴权的票据。请注意:
开发环境:您可以采用本地 GenerateTestUserSig.genTestSig 函数生成 UserSig 或者通过 UserSig 辅助工具 生成临时的 UserSig。
生产环境:为了防止密钥泄露,请务必采用服务端生成 UserSig 的方式。详细信息请参见 服务端生成 UserSig
更多信息请参见 如何计算及使用 UserSig

步骤5:发起通话

拨打方可以通过调用 calls 函数,并指定通话类型和被叫方的 userID,来发起语音或视频通话。calls 接口同时支持一对一通话和多人通话。当 userIDList 中包含一个 userID 时,为一对一通话;当 userIDList 包含多个 userID 时,则为多人通话。
import { useCallListState } from '../../TUICallKit/states/CallListState';

const { calls } = useCallListState();

const callHandler = async () => {
await calls({
userIDList: ['mike'], // 请输入被呼叫用户的 userID(需确保该用户已完成一次登录),当前仅支持一对一通话
type: 2, // 通话类型:1: 语音通话 2: 视频通话
});
};

步骤6:接听通话

接听端完成登录后,拨打端发起通话,接收端就可以收到通话邀请,同时伴随铃声。
HbuilderX
Cli 脚手架

1. 以编译开发模式的微信小程序为例(编译至其他平台请参考 package.json 文件中 scripts 脚本配置):
npm run build:mp-weixin
2. 编译成功后,启动微信开发者工具导入到 dist/build/mp-weixin 目录。
注意:
第一次使用小程序通话,需要获取摄像头和麦克风权限。

更多功能

设置昵称和头像

首次登录的用户没有头像和昵称信息,您可以通过 setSelfInfo 接口设置头像和昵称。
try {
await TUICallKitAPI.setSelfInfo({
nickName: "jack",
avatar: "http://xxx",
});
} catch (error: any) {
alert(`[TUICallKit] Failed to call the setSelfInfo API. Reason: ${error}`);
}
注意:
因为用户隐私限制,非好友之间的通话,被叫的昵称和头像更新可能会有延迟,一次通话成功后就会顺利更新。

铃声设置

您可通过以下方式设置默认铃声、来电静音模式。
设置默认铃声:通过 setCallingBell 接口设置被叫端收到的来电铃声。
注意:
传入本地铃声文件应为相对当前小程序项目的绝对路径。
try {
await TUICallKitAPI.setCallingBell('/static/ring.mp3'); // 相对当前小程序项目的绝对路径
} catch (error: any) {
alert(`[TUICallKit] setCallingBell API failed. Reason: ${error}`);
}
来电静音模式:您可以通过 enableMuteMode 设置静音模式。
try {
await TUICallKitAPI.enableMuteMode(enable: boolean);
} catch (error: any) {
alert(`[TUICallKit] enableMuteMode API failed. Reason: ${error}`);
}

组件体积速查与插件裁剪指南

TUICallkit 组件接入后以下的功能模块是全量集成的,您可以按需进行裁剪。
功能模块
自身大小
备注
核心通话引擎(必选)
375 KB
若您的项目中已经集成了 聊天能力,则使用核心通话引擎带来的体积增量为 122 KB
1v1 单人通话功能(必选)
111 KB
-
铃声插件(可裁剪)
23 KB
移除铃声插件方式:
删除项目中的这行注册代码(在项目中搜索如下代码即可):
this.registerPlugin(useRingPlugin())
多人通话插件(可裁剪)
27 KB
移除多人通话插件方式:
删除注册代码(在项目中搜索如下代码即可):this.registerPlugin(useGroupCallPlugin());
pages.json 中删除多人通话页面注册(path 含 GroupCallView 的项)。

自定义您的 UI

替换图标按钮

您可以直接修改 TUICallKit/Components/assets 文件夹下的图标组件,以确保整个应用中的图标色调风格保持一致,请在替换时保持图标文件的名字不变。
注意:
v3.2.2+ 支持。


序号
资源路径
1
/TUICallKit/Components/assets/button/mobile/minimize.svg
2
/TUICallKit/Components/assets/button/hangup.svg
3
/TUICallKit/Components/assets/button/accept.svg
4
/TUICallKit/Components/assets/button/microphone-open.svg
5
/TUICallKit/Components/assets/button/speaker-open.svg
6
/TUICallKit/Components/assets/button/camera-close.svg
7
/TUICallKit/Components/assets/button/switchCamera.svg

隐藏按钮

调用 hideFeatureButton 接口隐藏按钮,目前支持 Camera、Microphone、SwitchCamera、InviteUser,具体看枚举类型 FeatureButton
注意:
v3.2.9+ 支持
以隐藏摄像头按钮为例。

// 替换成 TUICallKit 源码中的地址
import { TUICallKitAPI, FeatureButton } from "../../TUICallKit/index";

TUICallKitAPI.hideFeatureButton(FeatureButton.Camera);

自定义通话背景图

通话背景图会在语音通话或者视频通话关闭摄像头后出现,通过调用 setLocalViewBackgroundImage 修改本地用户通话界面背景图,setRemoteViewBackgroundImage 修改远端用户通话界面背景图。
注意:
v3.2.9+ 支持

import { TUICallKitAPI } from "../../TUICallKit/index";

TUICallKitAPI.setLocalViewBackgroundImage('http://xxx.png');
TUICallKitAPI.setRemoteViewBackgroundImage('remoteUserId', 'http://xxx.png');

常见问题

如果您的接入和使用中遇到问题,请参见 常见问题

Vue2 iOS 小程序播放铃声没有声音?

Vue2 的铃声播放只支持线上地址,可以在 TUICallKit/plugin/ring/index.ts 中,将本地的相对路径地址改为您的铃声线上地址。

Vue2 & Vue3 缺少 sass 预处理器报错:Preprocessor dependency "sass" not found. Did you install it?


请按照以下步骤操作:
npm install sass --save-dev

Vue2 & Vue3 装饰器报错: Transforming JavaScript decorators to the configured target environment is not supported yet


可在 tsconfig.json 中添加相关配置,示例:
{
"compilerOptions": {
"experimentalDecorators": true
}
}

Vue2 项目报错 TS 编译器类型检查错误


main.js 中引入组合式 API。
import VueCompositionAPI from "@vue/composition-api";
Vue.use(VueCompositionAPI);
安装 unplugin-vue2-script-setup 依赖。
npm i unplugin-vue2-script-setup
新建或修改项目根目录的 vue.config.js 文件。
const ScriptSetup = require('unplugin-vue2-script-setup/webpack').default;
module.exports = {
parallel: false,
configureWebpack: {
plugins: [
ScriptSetup({}),
],
},
chainWebpack(config) {
config.plugins.delete('fork-ts-checker'); // disable type check and let `vue-tsc` handles it
},
};

如何适配通过 CLI 创建 Vue2JS 项目?

按照本文的步骤集成后,需要在项目的根目录下执行:
vue add typescript
按照如下配置项进行选择(为了保证能同时支持原有 js 代码 与 TUICallKit 中 ts 代码,请您务必严格按照以下五个选项进行配置),安装完成后检查 App.vue 文件代码并重新编译。

260706614-5e2fc00b-ace5-4843-bef6-c0e234225b5d.png (1514×360)



交流与反馈

如果您在使用过程中,有什么建议或者意见,可以 联系我们,感谢您的反馈。