更新记录

1.0.4(2024-09-15)

增加后端发送接口数据回调

1.0.3(2024-09-14)

  1. 重构业务结构

1.0.2(2024-09-11)

  1. provider.initProvider增加参数
查看更多

平台兼容性

HbuilderX/cli最低兼容版本
3.6.8

uni-app

Vue2 Vue3
?
app-vue app-nvue app-android app-ios app-harmony
? ? ? ? ?
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
? ? ? ? ? ? ? ? ?
微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序 钉钉小程序 快手小程序 飞书小程序 京东小程序
? ? ? ? ? ? ? ? ?
快应用-华为 快应用-联盟
? ?

uni-app x

app-android app-ios
? ?
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
? ? ? ? ? ? ? ? ?

VOIP,唤醒未启动app、后台app

集成步骤

  1. 拷贝demo里的nativeResources、Info.plist文件到项目根目录
  2. (可选项)勾选manifest.json里的app模块配置Push(消息推送),如果勾选了Push模块,删除nativeResources/ios/UniApp.entitlements
  3. nativeResources/ios/UniApp.entitlements文件里的aps-environment对应的值是development、production,一般开发阶段使用development,生产发布使用production,根据情况设置
  4. ios打包的.mobileprovision需要包含消息推送功能
  5. 集成插件,集成插件步骤请参考 https://www.cnblogs.com/wenrisheng/p/18323027

接口


import {
    UTSVoipMgr,
    UTSLocalNotification,
    UTSCXProvider
} from "@/uni_modules/wrs-uts-voip"

let provider = new UTSCXProvider()
  • 请求通知权限

// 请求通知权限
UTSLocalNotification.requestAuthorization({
    types: ["badge", "sound", "alert"]
}, (resp) => {
    let flag = resp.flag
    if (!flag) { // 请求权限失败
        console.log("requestAuthorization:" + JSON.stringify(resp))
    }

})
  • 设置VOIP回调

// 流程:
// 1. app把token上传给后端
// 2. 后端调用苹果的apn接口发送数据给苹果服务器
// 3. 苹果服务器会把消息转发给手机
// 4. 手机app收到后,先回调didReceiveIncomingPush接口
// 5. 如果消息体里的数据符合插件里定义的voip数据(消息体参考文档),则会自动拉起接听电话界面
// 6. 用户接听或拒绝电话
UTSVoipMgr.onCallback((resp) => {
    let opt = resp.opt
    switch (opt) {
        //  获取到本机token,需要上传给后端,后端发送voip时需要token参数,token可以理解为手机的ID
        case "didUpdatePushCredentials":
            let token = resp.token
            console.log("token:" + token)
            break;
            // 收到后端发送的数据
        case "didReceiveIncomingPush":
            console.log("didReceiveIncomingPush:" + JSON.stringify(resp))
            break;
            // 拉起接听电话界面结果
        case "startCall":
            getApp().globalData.uuid = resp.uuid
            console.log("startCall:" + JSON.stringify(resp))
            break;
            // 用户接听了电话
        case "performAnswerCall":
            console.log("performAnswerCall:" + JSON.stringify(resp))
            break;
            // 电话挂断
        case "performEndCall":
            console.log("performEndCall:" + JSON.stringify(resp))
            break;

        default:
            console.log(JSON.stringify(resp))
            break;
    }
})

后端接口发起voip参数如下:


      const payload = {
        business: {
          type: 0, // 0: 自动拉起电话接听界面
          params: { // 参数
            hasVideo: true,
            localizedCallerName: "张三来电",
            remoteHandle: {
              type: 1, // 1: generic 2:phoneNumber 3: emailAddress
              value: "18820406059"
            }
          }
        }
      };
  • 设置通知回调

// 设置通知回调
UTSLocalNotification.onCallback((resp) => {
    let opt = resp.opt
    switch (opt) {
        // 将要显示通知
        case "willPresent":
            break;
            // 用户点击打开通知
        case "didReceive":
            console.log("用户点击打开通知:" + JSON.stringify(resp))
            break;
        default:
            break;
    }
})
  • 初始化本地通知

UTSLocalNotification.notificationInit()
  • 初始化provider

// 初始化
// provider.initProvider({
//      localizedName: "voip APP", // 系统来电页面显示的app名称和系统通讯记录的信息
//   maximumCallsPerCallGroup: 1, //最大通话组
//   supportsVideo: true, //是否支持视频
//   ringtoneSound:  "Ringtone.aif",//来电铃声
//   iconTemplateImageData: "/aa/aa/aa.png"
// })
  • 发送本地通知

// 发送本地通知
UTSLocalNotification.add({
    title: "张三来电",
    subtitle: "VOIP",
    body: "您收到了一条新消息",
    sound: "default",
    trigger: {
        timeInterval: 0.2,
        repeats: false
    },
    identifier: "123456"
}, (notResp)=>{

})
  • 设置桌面icon角标

let badge = 0
UTSLocalNotification.setBadgeNum(badge, (resp)=>{
    console.log(JSON.stringify(resp))
})

隐私、权限声明

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

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

插件不采集任何数据

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问