使用的技术是uniapp里面的unipush
首先需要去我的应用里面申请开通unipush的权限,有unipush2.0 和3.0的,这里面用的是2.0
主要代码为前端App.vue文件中的
首先需要获取到当前用户的唯一Cid 然后用来确定消息发到哪个用户中, 这个会在用户安装应用的时候,给一个Cid ,并且每次重复下载安装后,Cid会重置
setTimeout(() => {
plus.push.getClientInfoAsync((info) => {
let cid = info["clientid"];
// console.log(cid);
uni.setStorageSync('cid', cid)
});
}, 1000)
然后需要添加消息监听的事件,主要用的是透传消息,后端.NET的代码需要用到个推官网里面的SDK,来实现发送消息到前端的plus.push.addEventListener("receive" )这个监听方法中去,这边会监听到,然后创建消息弹窗
plus.push.addEventListener("receive",(msg)=>{
if (msg.payload != "LocalMsg")
{
//声音
let main = plus.android.runtimeMainActivity();
let RingtoneManager = plus.android.importClass("android.media.RingtoneManager");
let uri = RingtoneManager.getActualDefaultRingtoneUri(main, RingtoneManager.TYPE_NOTIFICATION);
let MediaPlayer = plus.android.importClass("android.media.MediaPlayer");
let player = MediaPlayer.create(main, uri);
player.setLooping(false);
player.prepare();
player.start();
var options = {cover:false,sound:'system',title:msg.title};
// //通知栏参数
// // let options = {
// // "cover": false,
// // "sound": 'system',
// // "title":msg.title
// // };
plus.push.createMessage(msg.content, msg, options );
}
//如果是透传消息的话,走这个if
if(msg.type=='receive')
{
//声音
let main = plus.android.runtimeMainActivity();
let RingtoneManager = plus.android.importClass("android.media.RingtoneManager");
let uri = RingtoneManager.getActualDefaultRingtoneUri(main, RingtoneManager.TYPE_NOTIFICATION);
let MediaPlayer = plus.android.importClass("android.media.MediaPlayer");
let player = MediaPlayer.create(main, uri);
player.setLooping(false);
player.prepare();
player.start();
var options = {cover:false,sound:'system',title:msg.title};
// //通知栏参数
// // let options = {
// // "cover": false,
// // "sound": 'system',
// // "title":msg.title
// // };
plus.push.createMessage(msg.content, msg, options );
}
// if (msg.payload != "LocalMsg" && plus.os.name == "iOS") {
// plus.push.createMessage(msg.payload.content, "LocalMsg", null)
// }
},false)
最后添加消息点击的事件
plus.push.addEventListener("click", (msg) => {
clearTimeout(timer);
timer = setTimeout(() => {
if (msg.payload != "LocalMsg" && temp.isbackground == false) {
var dataurl = JSON.parse(msg.payload.url);
uni.navigateTo({
url: '../' + dataurl.url
});
}
// if(msg.payload){
// uni.navigateTo({
// url:msg.payload
// })
// }
}, 1500)
}, false)