更新记录
1.0.4(2024-09-15)
增加后端发送接口数据回调
1.0.3(2024-09-14)
- 重构业务结构
1.0.2(2024-09-11)
- provider.initProvider增加参数
查看更多
平台兼容性
HbuilderX/cli最低兼容版本 |
3.6.8 |
uni-app
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
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
? |
? |
? |
? |
? |
? |
? |
? |
? |
VOIP,唤醒未启动app、后台app
集成步骤
- 拷贝demo里的nativeResources、Info.plist文件到项目根目录
- (可选项)勾选manifest.json里的app模块配置Push(消息推送),如果勾选了Push模块,删除nativeResources/ios/UniApp.entitlements
- nativeResources/ios/UniApp.entitlements文件里的aps-environment对应的值是development、production,一般开发阶段使用development,生产发布使用production,根据情况设置
- ios打包的.mobileprovision需要包含消息推送功能
- 集成插件,集成插件步骤请参考
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))
}
})
// 流程:
// 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.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)=>{
})
let badge = 0
UTSLocalNotification.setBadgeNum(badge, (resp)=>{
console.log(JSON.stringify(resp))
})