快速实现音视频通话

更新时间: 2024/09/27 10:50:00

IM uni-app Demo 是基于网易云信即时通讯 SDK(简称 NIM SDK)为 uni-app 开发者提供的一款 Demo,它提供了一些通用的功能,包含会话、聊天、群组等,您可以基于源码搭建自己的 IM 业务逻辑。自 V1.5.0 起,uni-app Demo 引入呼叫组件,您可以在 Demo 中集成呼叫组件,实现音视频通话能力。

本文主要介绍如何在 uni-app Demo 中快速实现音视频通话。

平台支持

当前 IM uni-app Demo 的音视频通话功能仅支持 Android、iOS 平台。

前提条件

在引入呼叫组件之前,请确保:

  • 网易云信控制台 创建的应用(AppKey)已开通音视频功能。若未开通,请参考 开通音视频能力 进行开通。

  • 网易云信控制台 创建的应用(AppKey)已设置多端登录。若未开通,请参考 配置多端登录

  • 已完成 IM uni-app 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 目录下。

JavaScript// #ifdef APP-PLUS
// 音视频通话插件
const nimCallKit = uni.requireNativePlugin('netease-CallKit'))
// #endif

步骤 2:初始化呼叫组件

在实现音视频通话前,需要先初始化呼叫组件。

JavaScriptnimCallKit.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:登录呼叫组件

呼叫组件初始化完成后才能进行登录,您可以将登录信息写入初始化接口的完成回调中,可参考以下示例:

JavaScriptnimCallKit.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:发起音视频通话

JavaScriptnimCallKit.toCallPage({
    calledAccount:'123456',
    type:2
}, function(ret) {
    if (ret.code != 200) {
        var msg = '呼叫失败\n 错误码:' + ret.code + '\n 错误信息:' + ret.message;
        uni.showToast({
          title: msg,
          icon: 'none',
        })
    } else {
        uni.showToast({
          title: '呼叫成功',
          icon: 'none',
        })
    }
})

步骤 5:退出登录

JavaScriptnimCallKit.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 PictureVoice over IP 两项即可。

Xcode 选项.png

iOS 退出登录崩溃

严格按照 logout 接口的要求传递参数,第二个参数为 callback,如果只传递一个参数,会造成崩溃。

同时集成呼叫组件和推送插件,制定自定义基座打包报错

nativeplugin/netease-CallKit/package.json 目录下,添加 excludeDependencies,请参考以下示例代码:

JSON"excludeDependencies": [
        "com.netease.nimlib:basesdk",
        "com.netease.nimlib:push"
      ],
打包出错.png
此文档是否对你有帮助?
有帮助
去反馈
  • 平台支持
  • 前提条件
  • 实现音视频通话
  • 步骤 1:引入呼叫组件
  • 步骤 2:初始化呼叫组件
  • 步骤 3:登录呼叫组件
  • 步骤 4:发起音视频通话
  • 步骤 5:退出登录
  • API 参考
  • 常见问题
  • iOS 离线打包,退出后台听不见声音
  • iOS 退出登录崩溃
  • 同时集成呼叫组件和推送插件,制定自定义基座打包报错