uni-app(小程序)

最近更新时间:2024-11-05 10:22:02

我的收藏
TUIRoomKit 是腾讯云推出的多人音视频 UI 组件。组件提供房间管理、音视频控制、屏幕共享、成员管理、麦位管理、即时聊天、自定义布局切换等丰富的功能交互,同时支持中英文切换,一键换肤等能力。



本文介绍 TUIRoomKit (Uniapp) 的接入指引,助力您快速上线企业会议、在线教育、医疗问诊、在线巡视、远程定损等业务场景。
您可以单击 Github/Gitee 下载 TUIRoomKit 代码,并参见代码仓库 README.md 文档跑通 TUIRoomKit Uniapp 示例工程。

小程序 Demo

如果您想要直接跑通一个新工程,请直接阅读 uni-app demo 快速跑通
如果您想要亲自集成 TUIRoomKit 组件,搭建一个多人音视频房间小程序,请跟随本文档。

开发环境要求

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

步骤1:开发前准备

1. 开通小程序权限

由于 TUIRoomKit 所使用的小程序标签有更苛刻的权限要求,因此集成 TUIRoomKit 的第一步就是要开通小程序的类目和标签使用权限。否则无法使用,这包括如下步骤:
小程序推拉流标签不支持个人小程序,只支持企业类小程序。需要在 注册 时填写主体类型为企业,如下图所示:


小程序推拉流标签使用权限暂时只开放给有限 类目
符合类目要求的小程序,需要在 微信公众平台 > 开发 > 开发管理 > 接口设置中自助开通该组件权限,如下图所示:



2. 在小程序控制台配置域名

微信公众平台 > 开发 > 开发管理 > 开发设置 > 服务器域名中设置 request 合法域名socket 合法域名,如下图所示:
request 合法域名
https://official.opensso.tencent-cloud.com
https://yun.tim.qq.com
https://cloud.tencent.com
https://webim.tim.qq.com
https://query.tencent-cloud.com
https://web.sdk.qcloud.com
socket 合法域名
说明:
自 Chat v3.4.6起,SDK 支持独立域名,您需要配置独立域名可更好地保障服务稳定性。
例如您的 SDKAppID 是 1400xxxxxx,则独立域名为: wss://1400xxxxxxw4c.my-imcloud.com
wss://${SDKAppID}w4c.my-imcloud.com
wss://wss.im.qcloud.com
wss://wss.tim.qq.com




3. 开通服务

在使用 TUIRoomKit 发起会议前,您需要前往控制台开通 TUIRoomKit 专属的多人音视频互动服务,具体步骤请参见 开通服务

步骤2:准备 Uniapp 工程代码

注意:
打开您已有 Uni 工程,可跳过该步骤。如果无 Uni 项目,可选择以下方式生成模板工程。
生成 Vue3 + Vite + TS 模板工程,参见文档:通过 vue-cli 创建 uni-app 项目
#全局安装 vue-cli
npm install -g @vue/cli
#创建以 typescript 开发的工程
npx degit dcloudio/uni-preset-vue#vite-ts tui-room-uniapp-demo
成功生成 Vue3 + Vite + TS 模板工程后,执行以下脚本:
cd tui-room-uniapp-demo
npm install

步骤3:下载并引用 TUIRoom 组件

注意
因为小程序对主包大小的限制,这里 TUIRoom 建议采用分包方案,以下是对分包方案的接入指引。

3.1 下载 TUIRoom 代码

前往 Github,克隆或下载 TUIRoomKit 仓库代码。

3.2 npm 依赖安装

npm i pinia@2.0.36 sass mitt @tencentcloud/tuiroom-engine-wx --legacy-peer-deps
注意
vue 3.3 及以上版本,对应 pinia@2.1.0 及以上版本。 vue 3.3 及以下版本,对应 pinia@2.0.36 版本。

3.3 项目目录以及相关依赖准备

1. ./tui-room-uniapp-demo/src 目录下创建 roomkit 文件夹。
2. 复制 MiniProgram/src/roomkit/TUIRoom 文件夹到已有项目同级目录下,如./tui-room-uniapp-demo/src/roomkit
3. 复制 MiniProgram/src/roomkit/config 文件夹到已有项目同级目录下,如./tui-room-uniapp-demo/src/roomkit
4. 复制 MiniProgram/src/locales 文件夹到 ./tui-room-uniapp-demo/src
5. 复制 MiniProgram/wxmini_dev.shMiniProgram/wxmini_prod.sh 文件到 ./tui-room-uniapp-demo
6. 复制 ./node_modules/@tencentcloud/tuiroom-engine-wx/TUIRoomEngine.wasm.br 文件到 ./src/static

3.4 项目配置更改

注意:
以下修改均为增量修改,需要根据自己项目配置进行添加。
1. 修改 ./src/manifest.json 小程序相关配置,开启分包并设置 node_modules 目录,参见文档 自定义 node-modules、miniprogram-npm 位置构建uniapp 分包
/* 小程序特有相关 */
"mp-weixin": {
"setting": {
"urlCheck": false,
"packNpmManually": true,
"packNpmRelationList": [
{
"packageJsonPath": "./package.json",
"miniprogramNpmDistDir": "./"
},
{
"packageJsonPath": "./roomkit/package.json",
"miniprogramNpmDistDir": "./roomkit"
}
]
},
"usingComponents": true,
"optimization": {
"subPackages": true
}
},
2. 修改 ./src/pages.json,添加分包页面以及全局组件引入。
"subpackages": [
{
"root": "roomkit",
"pages": [
{
"path": "pages/room",
"style": {
"navigationBarTitleText": "room"
}
}
]
}
],
"globalStyle": {
"usingComponents": {
"trtc-pusher": "@tencentcloud/trtc-component-wx/trtc-pusher",
 "trtc-player": "@tencentcloud/trtc-component-wx/trtc-player"
}
}
3. 修改 ./src/main.ts ,引入 VueI18n 以及 pinia
import { createApp } from 'vue';
import App from './App.vue';
import { createPinia } from 'pinia';
// locales 为 TUIRoom/locales,因为主包无法使用分包资源,此处拷贝了一份 locales 在 src 路径下
import VueI18n from './locales/index';

const app = createApp(App);
app.use(createPinia());
app.use(VueI18n);
4. 修改 ./vite.config.ts,将 @tencentcloud/tuiroom-engine-wx 设置为外部依赖,用于分包减少主包体积。
optimizeDeps: {
include: ['@tencentcloud/tuiroom-engine-wx'],
},
build: {
rollupOptions: {
external: ['@tencentcloud/tuiroom-engine-wx'],
},
},

3.5 在页面引用 TUIRoom 组件

./src/roomkit/pages/room.vue 组件中引入 TUIRoom 组件,room.vue 可以是您自己的组件,也可以重新建一个组件,此处以新建组件举例。
TUIRoom 组件将用户分为主持人角色及普通成员角色。组件对外提供了 init、createRoom、enterRoom 方法。
主持人及普通成员可通过 init 方法向 TUIRoom 组件初始化应用及用户数据,主持人可通过 createRoom 方法创建并加入房间,普通成员可通过 enterRoom 方法加入主持人已经创建好的房间。
注意
在页面中复制以下代码之后,需要修改 TUIRoom 接口的参数为实际数据(sdkAppIduserIduserSigroomId)。
<template>
<room ref="TUIRoomRef"></room>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue';
// 引入 TUIRoom 组件,注意确认引入路径是否正确
import Room from '../TUIRoom/index.vue';
// 获取 TUIRoom 组件元素,用于调用 TUIRoom 组件的方法
const TUIRoomRef = ref();

onMounted(async () => {
// 初始化 TUIRoom 组件
// 主持人在创建房间前需要先初始化 TUIRoom 组件
// 普通成员在进入房间前需要先初始化 TUIRoom 组件
await TUIRoomRef.value.init({
// 获取 sdkAppId 请您参见 步骤1
sdkAppId: 0,
// 用户在您业务中的唯一标示 Id
userId: '',
// 本地开发调试可在 https://console.cloud.tencent.com/trtc/usersigtool 页面快速生成 userSig, 注意 userSig 与 userId 为一一对应关系
userSig: '',
// 用户在您业务中使用的昵称
userName: '',
// 用户在您业务中使用的头像链接
avatarUrl: '',
// 用户在您业务中需要的皮肤主题颜色及是否支持切换皮肤主题
theme: {
defaultTheme:'black',
isSupportSwitchTheme: true
}
})
// 默认执行创建房间,实际接入可按需求择机执行 handleCreateRoom 方法
await handleCreateRoom();
})

// 主持人创建房间,该方法只在创建房间时调用
async function handleCreateRoom() {
// roomId 为用户进入的房间号, 要求 roomId 类型为 string
// roomMode 包含'FreeToSpeak'(自由发言模式) 和'SpeakAfterTakingSeat'(上台发言模式) 两种模式,默认为'FreeToSpeak',注意目前仅支持自由发言模式
// roomParam 指定了用户进入房间的默认行为(是否默认开启麦克风,是否默认开启摄像头,默认媒体设备Id)
const roomId = '123456';
const roomMode = 'FreeToSpeak';
const roomParam = {
isOpenCamera: true,
isOpenMicrophone: true,
}
try {
await TUIRoomRef.value.createRoom({ roomId, roomName: roomId, roomMode, roomParam });
} catch (error: any) {
alert('TUIRoomKit.createRoom error: ' + error.message);
}
}

// 普通成员进入房间,该方法在普通成员进入已创建好的房间时调用
async function handleEnterRoom() {
// roomId 为用户进入的房间号, 要求 roomId 类型为 string
// roomParam 指定了用户进入房间的默认行为(是否默认开启麦克风,是否默认开启摄像头,默认媒体设备Id)
const roomId = '123456';
const roomParam = {
isOpenCamera: true,
isOpenMicrophone: true,
}
try {
await TUIRoomRef.value.enterRoom({ roomId, roomParam });
} catch (error: any) {
alert('TUIRoomKit.enterRoom error: ' + error.message);
}
}
</script>
<style>
page {
width: 100%;
height: 100%;
}
</style>

3.6 主包路由跳转到 room 页面

注意
此处需要根据您的业务进行调整,此处以空项目举例。
修改 ./src/pages/index/index.vue,在 script 部分添加 uni.navigateTo({url: '/roomkit/pages/room'})

3.7 跑通小程序项目

注意
使用分包方案将 @tencentcloud/tuiroom-engine-wx 当作外部依赖, uniapp 并不会将此 npm 包编译进入 vendor.js,因此需要我们进入编译后的小程序目录手动 install。
# 执行 bash ./wxmini_prod.sh 根据分包方案安装依赖
# 此处使用的路径为默认路径,如果您对次路径进行了修改需要手动进行调整
npm run build:mp-weixin && bash ./wxmini_prod.sh
打开微信开发者工具,导入项目 ./dist/mp-weixin
构建 npm,微信开发者工具单击工具 > 构建 npm。具体如下图:


单击预览,扫描二维码,体验程序。
注意
此时项目已可以正常运行,记得修改 ./src/roomkit/pages/room.vuesdkAppIduserIduserSigroomId,且注意小程序正常进房需要真机调试,在开发者工具上无法进行推拉流。

步骤6:开始您的第一场会议

单击新建房间,开始您的第一场会议。








其他文档

交流与反馈

欢迎加入 腾讯云实时音视频 TRTC 技术交流群 进行技术交流和问题反馈。