快速实现音视频通话
更新时间: 2024/05/09 14:54:00
IM uni-app Demo 是基于网易云信 NIM SDK 的一款 uniapp Demo,它提供了一些通用的功能,包含会话、聊天、群组等,您可以基于源码搭建自己的 IM 业务逻辑。
自 V1.5.0 起,uni-app Demo 引入呼叫组件,您可以在 Demo 中集成呼叫组件,实现音视频通话能力。
本文主要介绍如何在 uni-app Demo 中快速实现音视频通话。
平台支持
当前 IM uni-app Demo 仅支持 Android、iOS、H5、和微信小程序。
前提条件
在引入呼叫组件之前,请确保:
-
在云信控制台创建的应用(AppKey)已开通音视频功能。若未开通,请参考开通音视频能力进行开通。
-
在云信控制台创建的应用(AppKey)已设置多端登录。若未开通,请参考配置多端登录。
-
已完成 IM uniapp Demo 的引入和初始化,具体请参考初始化。
-
已完成自定义基座的制作,具体请参考自定义基座。
-
开发环境满足如下要求:
- HBuilderX
- sass(sass-loader 版本 <= 10.1.1)
- node(16.0.0 <= node 版本 <= 17.0.0, 推荐使用 Node.js 官方 LTS 版本 16.17.0)
- npm(版本请与 node 版本匹配)
实现音视频通话
步骤1:引入呼叫组件
前往 DCloud 下载呼叫组件,将下载的组件放置项目工程的 nativeplugin 目录下。
// #ifdef APP-PLUS
// 音视频通话插件
const nimCallKit = uni.requireNativePlugin('netease-CallKit'))
// #endif
步骤2:初始化呼叫组件
在实现音视频通话前,需要先初始化呼叫组件。
nimCallKit.initConfig(
{
appKey: '', // 请填写你的appkey
account: '', // 请填写你的account
token: '', // 请填写你的token
apnsCername: '',
pkCername: '',
},
(ret: any) => {
if (ret.code != 200) {
uni.showToast({
title: '音视频通话插件初始化失败',
icon: 'none',
})
console.log(
'-------------callkit init失败\n错误码:' +
ret.code +
'\n错误信息:' +
ret.msg
)
} else {
uni.showToast({
title: '音视频通话插件初始化成功',
icon: 'none',
})
console.log('-------------callkit 开始登录------------')
}
}
)
步骤3:登录呼叫组件
呼叫组件初始化完成后才能进行登录,您可以将登录信息写入初始化接口的完成回调中,可参考以下示例:
nimCallKit.initConfig(
{
appKey: '', // 请填写你的appkey
account: '', // 请填写你的account
token: '', // 请填写你的token
apnsCername: '',
pkCername: '',
},
(ret: any) => {
if (ret.code != 200) {
uni.showToast({
title: '音视频通话插件初始化失败',
icon: 'none',
})
} else {
uni.showToast({
title: '音视频通话插件初始化成功',
icon: 'none',
})
nimCallKit.login(
{
account: opts.account,
token: opts.token,
},
function (ret: any) {
if (ret.code != 200) {
uni.showToast({
title: '音视频通话插件登录失败',
icon: 'none',
})
} else {
uni.showToast({
title: '音视频通话插件登录成功',
icon: 'none',
})
}
}
)
}
}
)
步骤4:发起音视频通话
nimCallKit.toCallPage({
remoteUserAccid: '',
currentUserAccid: '',
type: '',
remoteShowName: '',
})
步骤5:退出登录
nimCallKit.logout({}, (ret) => {
if (ret.code != 200) {
uni.showToast({
title: '登出失败',
icon: 'none',
})
} else {
uni.showToast({
title: '登出成功',
icon: 'none',
})
}
})
相关参考
API 参考
呼叫组件相关 API 详情请参见插件接口 。
常见问题
iOS 离线打包,退出后台听不见声音
在 XCode 中打开工程,勾选 Audio, AirPlay, and Picture in Picture
和 Voice over IP
两项即可。
iOS 退出登录崩溃
严格按照 logout
接口的要求传递参数,第二个参数为 callback
,如果只传递一个参数,会造成崩溃。
同时集成呼叫组件和推送插件,制定自定义基座打包报错
在 “nativeplugin/netease-CallKit/package.json” 目录下,添加 excludeDependencies
,请参考以下示例代码:
"excludeDependencies": [
"com.netease.nimlib:basesdk",
"com.netease.nimlib:push"
],