|
|
пре 4 месеци | |
|---|---|---|
| .. | ||
| utssdk | пре 4 месеци | |
| changelog.md | пре 4 месеци | |
| encrypt | пре 4 месеци | |
| package.json | пре 4 месеци | |
| readme.md | пре 4 месеци | |
服务器代码在demo/static/project-voip-server下 nodeJS语言需要cer和p12转成pem
cer转pem:
openssl x509 -inform DER -in voip_services.cer -outform PEM -out cer.pem
p12转pem:
openssl pkcs12 -in voiptext.p12 -nodes -password pass:1234 -legacy -out key.pem
将cer.pem、key.pem文件分别替换project-voip-server/customer_cer/mine下的文件 修改project-voip-server/src/app.controller.ts代码下的passphrase证书密码:
// 证书密码
const passphrase = '123456';
进入project-voip-server文件夹执行启动安装依赖和启动服务命令:
// 安装依赖
npm install
// 启动服务
npm run start:dev
浏览器或postman调用接口:
token的值替换成app项目里获取到的token
http://127.0.0.1:3000/apn?token=xxxxxx
依赖下面第三方,具体实现接口百度有很多,有需要可以咨询作者 java语言需要cer和p12转成一个p12
<dependency>
<groupId>com.turo</groupId>
<artifactId>pushy</artifactId>
<version>0.13.10</version>
</dependency>
import {
UTSVoipMgr,
UTSLocalNotification
} from "@/uni_modules/wrs-uts-voip"
请求通知权限
// 请求通知权限
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: "张三来电",
timeout: 5,// 可选参数,单位秒,传了timeout参数,无论用户有没有接听电话,定时器到了都会挂断电话,如果想取消定时器请调用deleteWaitingResponseUuid接口取消定时器
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()
发送本地通知
// 发送本地通知
UTSLocalNotification.add({
title: "张三来电",
subtitle: "VOIP",
body: "您收到了一条新消息",
sound: "default",
trigger: {
timeInterval: 0.2,
repeats: false
},
identifier: "123456"
}, (notResp)=>{
})
挂断电话
UTSVoipMgr.endCall({
uuid: getApp().globalData.uuid
}, (resp)=>{
console.log(JSON.stringify(resp))
})
取消自动挂断电话
UTSVoipMgr.deleteWaitingResponseUuid({
uuid: "xxx"
})
获取app运行状态,仅支持iOS
let state = UTSVoipMgr.getApplicationState()
switch (state) {
// active
case 0:
break;
// unactive
case 1:
break;
// background
case 2:
break;
default:
break;
}
设置桌面icon角标
let badge = 0
UTSLocalNotification.setBadgeNum(badge, (resp)=>{
console.log(JSON.stringify(resp))
})