前提 :1、Uni Push后台 配置ok (iOS 推送p12证书)
2、通过 this.clientid=plus.push.getClientInfo().clientid 获取客户端id
3、* plus.push.createMessage(message.title,message.content);这段代码必须要有,手机通知栏才会显示通知,也就是说需要在接收消息回调里面 自己注册本地通知才会有通知栏的 ,但经过测试,使用透传方式,app在线状态会收到通知,离线收不到。
继续更新 ....目前已实现安卓、苹果在线离线接收消息。。
在App.vue 文件里 onLaunch: function () {} 方法如下
//判断客户端
var clent=uni.getSystemInfoSync().platform
plus.push.setAutoNotification(true)
const _self = this;
//收到透传消息
//只有APP在线时,才会触发receive事件,透传消息不会触发系统消息,需要创建本地消息
plus.push.addEventListener("receive", function(msg) {
var clent=uni.getSystemInfoSync().platform
console.log("(receive):" + JSON.stringify(msg));
if (clent=='ios') { //如果是IOS
var payload = msg.payload;
//【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)
//【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环
if (msg.aps == null && msg.type == "receive") {
var messageTitle = payload.messageTitle;
var messageContent = payload.messageContent;
//创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null
plus.push.createMessage(messageContent, JSON.stringify(payload), {title: messageTitle});
}
// else{
// var payload = JSON.parse(msg.payload);
// plus.push.createMessage(payload.messageContent, JSON.stringify(payload.payload), {title: payload.messageTitle});
// }
}
if (clent=='android') {
//如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。
var payload = JSON.parse(msg.content);
var messageTitle = payload.messageTitle;
var messageContent = payload.messageContent;
plus.push.createMessage(messageContent, msg.payload, {title: messageTitle});
plus.runtime.setBadgeNumber(1)
}
}, false);
//消息点击事件
//【APP在线】,收到透传消息通过,不会提醒至通知栏目,需要发送本地消息,再进行点击触发的点击事件。
//【APP离线】,收到离线透传消息,必须通过Java后台的Intent字符串携带payload,且符合格式才能触发click事件,格式不符合不会触发
plus.push.addEventListener("click", function(msg) {
var clent=uni.getSystemInfoSync().platform
console.log("(click):" + JSON.stringify(msg));
if (clent=='ios') { //如果是IOS
var payload;
if (msg.type == "click") { //APP离线点击包含click属性,这时payload是JSON对象
payload = msg.payload;
} else { //APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象
payload = JSON.parse(msg.payload);
}
if (payload != null || payload != undefined) {
console.log("payload:"+payload)
//_self.callback(payload+"");
_self.setUniPush_state("1")
_self.setUniPush_url(payload.payload)
uni.reLaunch({
url: '/pages/tabBar/index/index'
})
}
}
if (clent=='android') { //如果是Android,收到playload均是是JSON字符串,需要转为JSON对象
var payload = msg.payload;
console.log("msg.payload:"+msg.payload)
if (payload != null || payload != undefined) {
console.log("payload:"+payload)
// _self.callback(payload+"");
_self.setUniPush_state("1")
_self.setUniPush_url(payload)
uni.reLaunch({
url: '/pages/tabBar/index/index'
})
}
}
}, false);
另外:在 DCloud 平台发送消息时 :注意 intent格式
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.XXXXXX/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=你好,这是标题;S.content=这是通知的内容,你好,这是内容。;S.payload=;end
注意:component 为你的 应用id(io.dcloud.xxx)
可以看下这个链接https://ask.dcloud.net.cn/article/36622?notification_id-760228__item_id-32878写的,我也是根据她的来写的,挺不错的
11 个评论
要回复文章请先登录或注册
freesoul
爱编程的小学究
3***@qq.com
aliang888
qq1563204347
qq1563204347
8***@qq.com
8***@qq.com
jtshushu
07shou