更新记录

4.8.2(2026-07-17) 下载此版本

New Features

  • 支持在通话中通过 JS 选人页邀请新成员加***呼。
  • 支持配置群呼邀请入口及邀请回调。
  • 新增全局事件 onGroupRtcJoinSuccess,每次成功加入 RTC 房间后回调群呼 RTC 信息。
  • 新增 currentGroupRtcInfo,用于查询当前群呼的 callIdcidselfRtcUid
  • 该接口和回调用于让业务方在群呼成功加入 RTC 房间后获取本次 RTC 入会信息。

Bug Fixes

  • 修复 Android 群呼邀请页可能拉起失败的问题。

Compatibility

  • 兼容 Android CallKit 4.8.2 版本
  • 兼容 iOS CallKit 4.8.2 版本

4.8.0(2026-07-06) 下载此版本

Bug Fixes

  • Android 修复群呼邀请离线用户后,被叫重新上线时偶现不弹起被呼叫画面的问题。

Compatibility

  • 兼容 Android CallKit 4.8.0 版本
  • 兼容 iOS CallKit 4.8.0 版本

4.7.5(2026-06-22) 下载此版本

[4.7.5] - 2026-06-17

New Features

  • 新增 getCallInfo 接口,支持获取当前通话信息(callId、通话类型、通话状态、主被叫、信令/rtc 频道信息等)。
  • iOS 支持 enableAutoFloatingWindowWhenHome,开启后视频通话退后台自动启动应用外小窗(需在 Xcode 工程配置 Background Modes → Picture in Picture)。

Compatibility

  • 兼容 Android CallKit 4.7.5 版本
  • 兼容 iOS CallKit 4.7.5 版本
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 14.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:13 - 18

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


本文档介绍基于 Vue 框架(支持 Vue 2&Vue 3)快速集成网易云信 RTC 音视频通话点对点呼叫组件。

插件概述

网易云信音视频呼叫(呼叫组件 NECallKit)是网易云信推出的含 UI 组件,您只需要几行代码,就可以快速实现音视频呼叫,在 App 中添加包括呼叫、接通、拒接、以及通话中音频和视频的开关控制功能,并包含呼叫的 UI 界面。

呼叫组件基于云信信令、音视频通话 2.0 和 IM 即时通讯产品封装的融合性场景组件,简化了呼叫流程,将呼叫功能以 UI 组件化的形式提供给客户,提高接入效率、降低使用成本。

呼叫组件(NECallKit)支持的功能如下表所示。

功能
描述
音视频呼叫 App 通过此功能通知被叫用户呼叫请求,呼叫请求类型包括音频和视频呼叫。
音视频通话 接通后可依照呼叫类型进行实时通话。
音视频控制 通话过程中可以控制本端音频或视频的开关,以及摄像头方向等。
话单 每次通话结束后都会收到对应的话单消息,标记本次通话是否接通以及通话时间、类型等数据。

限时优惠活动

如果您在 Dcloud 平台下载了该组件,您可登录云信控制台(Dcloud专属链接)进行开通与管理。

此外通过以上 Dcloud 平台的专属链接成功注册账号并开通服务的用户,云信将提供特别的优惠价,可在开通账号后联系云信销售或技术支持。

效果图

技术支持

网易云信提供多种服务,包括客服、技术支持、热线服务、全流程数据监控等,建议扫码添加我们的技术支持,协助接入、测试以及定制需求。 微信咨询 在线咨询 电话咨询
点击在线咨询 4009-000-123

准备工作

1. 申请 AppKey

用户在使用本插件之前需要获取AppKey,AppKey 申请的具体流程请参见 创建应用并获取AppKey

2. 获取账号

本插件使用中需要 account 和 token,具体请参见 注册云信IM账号

3. 开通服务

使用音视频呼叫(呼叫组件)之前,需要开通部分能力,开通的具体流程请参见 开通服务

4.开发环境

  • HBuilderX
  • sass(sass-loader 版本 <= 10.1.1)
  • node(16.0.0 <= node 版本 <= 17.0.0, 推荐使用 Node.js 官方 LTS 版本 16.17.0)
  • npm(版本请与 node 版本匹配)

快速接入

说明

本项目为App原生语言插件,请参考原生语言插件的集成方式进行集成。

步骤一:导入插件

  1. 购买 uni-app 原生插件 登录 uni 原生插件市场,并访问 netease-CallKit 插件,在插件详情页中购买(免费插件也可以在插件市场0元购)。购买后才能够云端打包使用插件。购买插件时请选择正确的 appid,以及绑定正确包名。
  1. 制作自定义调试基座 (请使用真机运行自定义基座) 购买插件后在项目的 manifest.json 页面的 App原生插件配置项下单击选择云端插件,选择netease-CallKit插件。

注意

  • 自定义基座不是正式版,真正发布时,需要再打正式包。使用自定义基座是无法正常升级替换 APK 的。
  • 请尽量不要使用本地插件,插件包超过自定义基座的限制,可能导致调试收费。

步骤二:在 vue 页面中引入原生插件

使用 uni.requireNativePlugin 的 API 在 vue 页面中引入原生插件,参数为插件的 ID。

var NECallKit = uni.requireNativePlugin("netease-CallKit")
const NECallKitEvent = uni.requireNativePlugin('globalEvent');

步骤三:初始化并登录组件

接口

login({params}, callback(ret))

params

appKey:

account:

token:

rtcUid:

  • 类型:Number
  • 描述:(可选值)云信 RTC Uid

apnsCername:

  • 类型:String
  • 描述:(可选值)云信 Apns 推送证书名

pkCername:

  • 类型:String
  • 描述:(可选值)云信 PushKit 推送证书名

language

  • 类型:String
  • 描述:(可选值)语言,zh为中文,en为英文,不填默认跟随系统

enableFloatingWindow

  • 类型:布尔类型
  • 描述:(可选值)是否开启悬浮窗,true开启,false不开启

enableAutoFloatingWindowWhenHome

  • 类型:布尔类型
  • 描述:(可选值)是否开启回到桌面自动开启悬浮窗,true开启,false不开启
    • Android:按 Home 键回到桌面时,自动将通话界面收缩为系统悬浮窗
    • iOS:App 退到后台时自动启用画中画(PiP),需在 Xcode 工程中配置 UIBackgroundModes 包含 audiopicture-in-picture

enableForegroundService

  • 类型:布尔类型
  • 描述:(可选值)是否开启前台服务,true开启,false不开启

enableAudio2Video

  • 类型:布尔类型
  • 描述:(可选值)是否显示语音转视频的按钮,true开启,false不开启,默认显示

enableVideo2Audio

  • 类型:布尔类型
  • 描述:(可选值)是否显示视频转语音的按钮,true开启,false不开启,默认显示

enableAudio2VideoConfirm

  • 类型:布尔类型
  • 描述:(可选值)是否开启语音转视频的时候需要同意,true开启,false不开启,默认不开启

enableVideo2AudioConfirm

  • 类型:布尔类型
  • 描述:(可选值)是否开启视频转语音的时候需要同意,true开启,false不开启,默认不开启

enableGroupCallInviteMembers

  • 类型:布尔类型
  • 描述:(可选值)是否显示群呼通话中邀请成员入口(+),true 显示,false 不显示,默认不显示。开启后,群呼接通状态点击 + 会通过 onGroupCallInviteMembersRequested 事件交给 JS 自定义选人页处理。

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    code:200,                      // number类型;失败登录返回 code(登录成功返回 200)
    message:''                     // String 类型;失败登录接口信息    
}

示例代码

NECallKit.login({
    appKey: AppConfig.appKey,
    account: this.account,
    token: this.currentToken,
    rtcUid: this.rtcUid ? Number(this.rtcUid) : undefined,
    apnsCername: this.apnsCername,
    pkCername: this.pkCername,
    language: this.language,
    enableFloatingWindow: true,
    enableAutoFloatingWindowWhenHome: true,
    enableForegroundService: true,
    enableAudio2Video: true,
    enableVideo2Audio: true,
    enableAudio2VideoConfirm: true,
    enableVideo2AudioConfirm: true,
    enableGroupCallInviteMembers: true
}, 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',
        })
    }
})

可用性

  • iOS系统:可提供的 11 及更高版本
  • Android系统:可提供的 21 及更高版本

步骤四:拨打通话

接口

toCallPage({params}, callback(ret))

params

accountList:

  • 类型:string[]
  • 描述:被叫账号列表,即 account 账号列表

type:

  • 类型:number
  • 描述:呼叫类型(1: 音频呼叫, 2: 视频呼叫)

rtcChannelName:

  • 类型:String
  • 描述:(可选值)云信 RTC 频道名称

isGroupCall:

  • 类型:布尔类型
  • 描述:(可选值)是否为群组呼叫,true为群组呼叫,false为点对点呼叫,默认为false

needPush:

  • 类型:布尔类型
  • 描述:(可选值)是否需要推送,true需要推送,false不需要推送,默认为false

pushContent:

  • 类型:String
  • 描述:(可选值)推送内容,当needPush为true时生效

pushPayload:

  • 类型:String 或 Object(内容为json结构)
  • 描述:(可选值)推送载荷,当needPush为true时生效,用于传递自定义推送数据

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    code:200,                   // number类型;错误码(呼叫成功返回 200)
    message:''                  // String 类型;错误信息(呼叫接口信息)
}

示例代码

点对点呼叫示例:

NECallKit.toCallPage({
    accountList: ['123456'],
    type: 2  // 2: 视频呼叫, 1: 音频呼叫
}, 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',
        })
    }
})

多人呼叫示例(包含推送配置):

NECallKit.toCallPage({
    accountList: ['123456', '654321', '789012'],
    isGroupCall: true,
    type: 2,  // 2: 视频呼叫, 1: 音频呼叫
    rtcChannelName: this.rtcChannelName || undefined,
    // push settings
    needPush: (getApp().globalData && getApp().globalData.multiCallSettings && typeof getApp().globalData.multiCallSettings.needPush === 'boolean') ? getApp().globalData.multiCallSettings.needPush : false,
    pushContent: (getApp().globalData && getApp().globalData.multiCallSettings && getApp().globalData.multiCallSettings.pushContent) || undefined,
    pushPayload: (getApp().globalData && getApp().globalData.multiCallSettings && getApp().globalData.multiCallSettings.pushPayload) || undefined
}, 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: 'success',
        })
    }
})

可用性

  • iOS系统:可提供的 11 及更高版本
  • Android系统:可提供的 21 及更高版本

步骤五:更多特性

一、登出

NECallKit.logout({}, (ret) => {
    if (ret.code != 200) {
        uni.showToast({
          title: '登出失败 ' + ret.code,
          icon: 'none',
        })
    } else {
        uni.showToast({
          title: '登出成功 ',
          icon: 'none',
        })
    }
})

二、设置降噪

NECallKit.setAINSMode({
    rtcAINSMode: 1          // number类型;0:关闭;1:开启(正常模式);2:开启(加强模式)
}, (ret) => {
    if (ret.code != 200) {
        var msg = '设置失败\n错误码:' + ret.code + '\n错误信息:' + ret.message;
        uni.showToast({
            title: msg,
            icon: "none"
        })
    } else {
        uni.showToast({
            title: '设置成功',
            icon: "success"
        })
    }
})

三、获取当前通话信息

接口

getCallInfo({params}, callback(ret))

params

无必填参数,当前保留 {} 作为扩展参数。

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    code: 200,
    message: 'success',
    callInfo: {
        callId: 'call-id',
        currentAccount: 'alice',
        currentAccId: 'alice',
        callType: 2,
        callStatus: 3,
        callerInfo: {
            accId: 'alice',
            uid: 1001,
            isMuteAudio: false, // Android 返回
            isMuteVideo: false  // Android 返回
        },
        calleeInfo: {
            accId: 'bob',
            uid: 1002,
            isMuteAudio: false, // Android 返回
            isMuteVideo: false  // Android 返回
        },
        signalInfo: {
            channelId: 'signal-channel-id',
            requestId: 'request-id',
            channelName: 'signal-channel-name',
            extraInfo: '',
            globalExtraCopy: ''
        },
        rtcInfo: {
            channelId: 123,
            channelName: 'rtc-channel-name',
            token: 'rtc-token',
            cid: 456
        }
    }
}

空闲态、未初始化或当前无通话时,code 仍返回 200callInfo 返回 null

callInfo 字段

字段 类型 描述
callId String 当前通话唯一 ID
currentAccount String 当前登录账号,与 currentAccId 一致
currentAccId String 当前登录账号
callType Number 通话类型,1 为音频,2 为视频
callStatus Number 当前通话状态
callerInfo Object 主叫用户信息
callerInfo.accId String 主叫 IM 账号
callerInfo.uid Number 主叫 RTC uid
callerInfo.isMuteAudio Boolean 主叫音频是否静音,Android 支持返回
callerInfo.isMuteVideo Boolean 主叫视频是否关闭,Android 支持返回
calleeInfo Object 被叫用户信息
calleeInfo.accId String 被叫 IM 账号
calleeInfo.uid Number 被叫 RTC uid
calleeInfo.isMuteAudio Boolean 被叫音频是否静音,Android 支持返回
calleeInfo.isMuteVideo Boolean 被叫视频是否关闭,Android 支持返回
signalInfo Object 信令信息
signalInfo.channelId String 信令频道 ID
signalInfo.requestId String 信令邀请唯一标识
signalInfo.channelName String 信令通道名称
signalInfo.extraInfo String 透传扩展信息
signalInfo.globalExtraCopy String 全局抄送扩展信息
rtcInfo Object RTC 频道信息
rtcInfo.channelId Number RTC 频道 ID
rtcInfo.channelName String RTC 频道名
rtcInfo.token String RTC 进房 token
rtcInfo.cid Number RTC cid,iOS 支持返回,Android 可能不返回

Android 和 iOS 均返回当前 native NECallInfo 可提供的公开字段;Android 的 NEUserInfo 包含 isMuteAudioisMuteVideo,iOS 当前 NEUserInfo 仅包含 accIduid

示例代码

NECallKit.getCallInfo({}, function(ret) {
    console.log('getCallInfo ' + JSON.stringify(ret));
    if (ret.code === 200 && ret.callInfo) {
        uni.showToast({
            title: '当前通话:' + ret.callInfo.callId,
            icon: 'none'
        })
    } else {
        uni.showToast({
            title: '当前无通话信息',
            icon: 'none'
        })
    }
})

可用性

  • iOS 系统:11 及更高版本
  • Android 系统:21 及更高版本

四、开启/关闭来电横幅

来电横幅功能开启后,收到来电时将在屏幕顶部以横幅形式展示,用户无需离开当前页面即可接听或拒绝来电。

接口

enableIncomingBanner({params})

params

enable:

  • 类型:布尔类型
  • 描述:是否开启来电横幅,true 开启,false 关闭

示例代码

NECallKit.enableIncomingBanner({ enable: true });

可用性

  • iOS 系统:11 及更高版本
  • Android 系统:21 及更高版本

五、群呼通话中邀请成员

群呼接通后,native 通话页面会显示邀请入口(+)。用户点击 + 后,组件不会展示 native 通讯录或输入框,而是通过 JS 事件把“需要选择邀请成员”的请求抛给业务层。业务层可以使用自己的通讯录、组织架构、好友列表或自定义输入页完成选人,然后调用回传接口把账号列表交还给 native,native 会继续执行当前群呼的邀请流程。

说明:

  • 该能力仅用于“已在群呼通话中继续邀请新成员”,不改变 toCallPage 发起新通话的语义。
  • 该能力默认关闭,需要在 NECallKit.login 中传入 enableGroupCallInviteMembers: true 后才显示 + 入口。
  • JS 侧不感知 callIdgroupId 等 native 内部上下文,只需要处理 requestId 和账号列表。
  • 业务自定义 UI 属于接入方页面能力,可完全由 JS 实现。

接入流程

  1. 在全局入口(例如 App.vue)监听 onGroupCallInviteMembersRequested
  2. 收到事件后保存 requestIdinCallUsers,跳转到业务自定义选人页面。
  3. 选人页面展示自定义 UI,并过滤 inCallUsers 中已在通话内的账号。
  4. iOS 自定义选人页需要展示到最上层时,调用 dismissGroupCallView 临时让出 native 群呼全屏视图。
  5. 用户确认或取消时调用 replyGroupCallInviteMembers
  6. native 收到回包后恢复通话页,并继续邀请或取消本次邀请。

Android 接入说明

Android 端点击 native 群呼页面 + 后,会进入 CallUIKit 的 contactSelector 回调。插件内部会:

  • 生成一次性 requestId
  • 记录当前 pending 请求和 CallUIKit observer。
  • 将 uni-app 宿主页拉到前台。
  • 触发 onGroupCallInviteMembersRequested 事件给 JS。
  • pending 期间避免 native 群呼 Activity 抢回前台。
  • JS 回传后恢复群呼 Activity,并把过滤后的账号列表交给 CallUIKit 继续邀请。

Android 接入方只需要实现 JS 监听和回传,不需要调用额外 Android 专属接口。

iOS 接入说明

iOS 端点击 native 群呼页面 + 后,会进入 NECallUIKitDelegateinviteUsersWithCallId:inCallUsers:completion: 回调。插件内部会:

  • 生成一次性 requestId
  • 记录当前 pending 请求和 CallUIKit completion。
  • 触发 onGroupCallInviteMembersRequested 事件给 JS。
  • 等 JS 页面调用 dismissGroupCallView 后,临时降低 CallUIKit 全屏 window 层级,使 JS 自定义选人页显示在上层。
  • JS 回传后恢复 CallUIKit window,并把过滤后的账号列表交给 CallUIKit 继续邀请。

iOS 接入方在自定义选人页需要显示到最上层时调用 dismissGroupCallView。为保证双端代码一致,建议使用 typeof 判断后调用;Android 不实现该方法时会自动跳过。

事件:onGroupCallInviteMembersRequested

native + 被点击后触发该事件。

const NECallKitEvent = uni.requireNativePlugin('globalEvent');

NECallKitEvent.addEventListener('onGroupCallInviteMembersRequested', function(e) {
    console.log('onGroupCallInviteMembersRequested ' + JSON.stringify(e));
});

事件参数:

参数 类型 必填 说明
requestId String 本次选择请求唯一 ID。调用回传接口时必须原样带回。
inCallUsers Array 当前已在通话内的账号列表。业务选人页应过滤这些账号,避免重复邀请。

示例:

NECallKitEvent.addEventListener('onGroupCallInviteMembersRequested', function(e) {
    const requestId = e && e.requestId;
    const inCallUsers = Array.isArray(e && e.inCallUsers) ? e.inCallUsers : [];
    if (!requestId) return;

    const app = getApp();
    if (!app.globalData) app.globalData = {};
    app.globalData.groupCallInviteRequest = {
        requestId: requestId,
        inCallUsers: inCallUsers
    };

    uni.navigateTo({
        url: '/pages/group-invite/group-invite?requestId=' + encodeURIComponent(requestId),
        fail: function() {
            NECallKit.replyGroupCallInviteMembers({
                requestId: requestId,
                accountList: [],
                cancelled: true
            });
        }
    });
});

接口:replyGroupCallInviteMembers

JS 选择完成或取消后调用,用于把结果回传给 native。

NECallKit.replyGroupCallInviteMembers({params}, callback(ret))

params:

参数 类型 必填 说明
requestId String onGroupCallInviteMembersRequested 中收到的请求 ID,必须原样带回。
accountList Array 要邀请的新增账号列表。cancelledtrue 时可传空数组。
cancelled Boolean 是否取消本次选择。true 表示取消,native 不发起邀请;默认 false

callback(ret):

字段 类型 说明
code Number 200 表示 native 已接收并处理本次回传。
message String 处理结果描述。
requestId String 本次处理的请求 ID。
acceptedAccountList Array native 过滤后实际交给 CallUIKit 的账号列表。

native 会兜底过滤以下账号:

  • 空账号
  • 当前登录账号
  • 已在通话内账号
  • 重复账号

示例:

NECallKit.replyGroupCallInviteMembers({
    requestId: requestId,
    accountList: ['user1', 'user2'],
    cancelled: false
}, function(ret) {
    console.log('replyGroupCallInviteMembers ' + JSON.stringify(ret));
    if (!ret || ret.code !== 200) {
        uni.showToast({
            title: '邀请成员失败:' + ((ret && ret.message) || ''),
            icon: 'none'
        });
    }
});

取消示例:

NECallKit.replyGroupCallInviteMembers({
    requestId: requestId,
    accountList: [],
    cancelled: true
});

接口:dismissGroupCallView

iOS 专用。JS 自定义选人页面需要显示到最上层时调用,用于临时让出 native 群呼全屏视图。该方法不会挂断或结束当前群呼;native 会在 replyGroupCallInviteMembers 回传、请求超时或通话结束后恢复通话视图。

NECallKit.dismissGroupCallView({params}, callback(ret))

params:

参数 类型 必填 说明
requestId String onGroupCallInviteMembersRequested 中收到的请求 ID。

callback(ret):

字段 类型 说明
code Number 200 表示处理成功。
message String 处理结果描述。
requestId String 本次处理的请求 ID。

推荐写法:

onReady() {
    if (!this.requestId || !NECallKit || typeof NECallKit.dismissGroupCallView !== 'function') {
        return;
    }
    this.$nextTick(() => {
        setTimeout(() => {
            NECallKit.dismissGroupCallView({
                requestId: this.requestId
            }, function(ret) {
                console.log('dismissGroupCallView ' + JSON.stringify(ret));
            });
        }, 500);
    });
}

完整选人页回传示例

export default {
    data() {
        return {
            requestId: '',
            inCallUsers: [],
            accountInput: '',
            submitted: false
        };
    },

    onLoad(options) {
        this.requestId = options && options.requestId ? decodeURIComponent(options.requestId) : '';
        const pending = getApp().globalData && getApp().globalData.groupCallInviteRequest;
        this.inCallUsers = pending && Array.isArray(pending.inCallUsers) ? pending.inCallUsers : [];
    },

    onUnload() {
        if (!this.submitted && this.requestId) {
            this.replyInvite([], true);
        }
    },

    methods: {
        selectedAccounts() {
            const inCallUsers = this.inCallUsers || [];
            return (this.accountInput || '')
                .split(/[,,\s]+/)
                .map(account => account.trim())
                .filter(account => account.length > 0)
                .filter((account, index, accounts) => accounts.indexOf(account) === index)
                .filter(account => inCallUsers.indexOf(account) === -1);
        },

        confirmInvite() {
            this.replyInvite(this.selectedAccounts(), false);
        },

        cancelInvite() {
            this.replyInvite([], true);
        },

        replyInvite(accountList, cancelled) {
            if (this.submitted) return;
            this.submitted = true;
            NECallKit.replyGroupCallInviteMembers({
                requestId: this.requestId,
                accountList: accountList || [],
                cancelled: !!cancelled
            }, function() {
                uni.navigateBack();
            });
        }
    }
}

可用性

  • iOS 系统:11 及更高版本
  • Android 系统:21 及更高版本

六、通话状态监听

如果您的业务需要 监听通话的状态,例如:异常、通话开始、结束等,可以监听以下事件:

//接收到邀请
// e.callType 呼叫类型,1: 语音呼叫;2: 视频呼叫
// e.callerAccount 呼叫账号
NECallKitEvent.addEventListener('onReceiveInvited', function(e) {
      console.log('onReceiveInvited' + JSON.stringify(e));
});

//通话建立
// e.callType 呼叫类型,1: 语音呼叫;2: 视频呼叫
// e.callId 通话Id
// e.callerAccount 呼叫账号
// e.calledAccount 被呼账号
// e.currentAccount 当前账号
NECallKitEvent.addEventListener('onCallConnected', function(e) {
  console.log('onCallConnected' + JSON.stringify(e));
});

//通话类型变更
// e.callType 呼叫类型,1: 语音呼叫;2: 视频呼叫
NECallKitEvent.addEventListener('onCallTypeChange', function(e) {
  console.log('onCallTypeChange' + JSON.stringify(e));
});

//通话结束
//  e.code 错误码 
// (code:12 手动取消;code:2 超时取消;code:14 对方拒接通话;code:15 接听并自己结束通话;code:16 接听并对方结束通话)
//  e.message 错误信息
NECallKitEvent.addEventListener('onCallEnd', function(e) {
  console.log('onCallEnd' + JSON.stringify(e));
});

// 远端用户是否开启视频流采集
//  e.account 账号
//  e.mute 是否静音
NECallKitEvent.addEventListener('onVideoMuted', function(e) {
  console.log('onVideoMuted' + JSON.stringify(e));
});

// 远端用户是否开启音频流采集
//  e.account 账号
//  e.mute 是否静音
NECallKitEvent.addEventListener('onAudioMuted', function(e) {
  console.log('onAudioMuted' + JSON.stringify(e));
});

常见问题

1、iOS需要配置麦克风和摄像头权限

需要在项目根目录的manifest.json中的“App权限配置”中配置麦克风和摄像头权限

2、同时集成呼叫组件和推送插件后无法正常呼叫

需要在控制台开通IM的多端登录

3、iOS 画中画(退后台自动悬浮窗)不生效

如果需要开启 enableAutoFloatingWindowWhenHome 功能,iOS 端需要在 Xcode 工程中配置后台模式:

  • Info.plistUIBackgroundModes 中添加 audiopicture-in-picture
  • 使用 uni-app 自定义基座调试时,可在 HBuilder-Hello 工程的 Capabilities 中勾选 "Audio, AirPlay, and Picture in Picture"

隐私、权限声明

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

"android.permission.ACCESS_NETWORK_STATE" - 网络状态权限 "android.permission.CAMERA" - 相机权限 "android.permission.RECORD_AUDIO" -录音权限 "android.permission.FOREGROUND_SERVICE" -后台服务权限 "android.permission.SYSTEM_ALERT_WINDOW" -弹窗权限

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

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

许可协议

MIT License

Copyright (c) 2022 NetEase, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.