fm:app没有运行时 离线 也要有收到推送消息 然后 就得用到厂商推送 一般的话 需要去配置 对应厂商的 appid
然后选择UNIPush 透传
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=应用包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
以上是安卓 离线时做法
ios 离线收到推送 payload 的格式跟在线发的数据的格式一样
{"title":"title","body":"body","click_type":"url","url":"/pages/schedule/index"}
离线的时候 收到的是系统消息 所以更多的是监听click事件
所以离线的时候 简单的操作就是跳转 直接跳转
plus.push.addEventListener("click", function(msg) {
console.log(msg)
uni.switchTab({
url: "/pages/msg/index"
})
}, false);
在线的时候 收到的是本地创建的消息 所以是监听receive事件
在线还要判断是ios 还是安卓 如果是安卓直接本地创建 如果是ios 的话 msg会返回一个aps 和一个type 这个只要在ios环境下才会返回 所以不腰惊讶为什么安卓手机调试 type没有打印出来
//收到透传消息
//只有APP在线时,才会触发receive事件,透传消息不会触发系统消息,需要创建本地消息
plus.push.addEventListener("receive", function(msg) {
console.log("(receive):" + JSON.stringify(msg));
if (app.isIOS()) { //如果是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});
}
}
if (app.isAndroid()) { //如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。
var payload = JSON.parse(msg.payload);
var messageTitle = payload.messageTitle;
var messageContent = payload.messageContent;
plus.push.createMessage(messageContent, msg.payload, {title: messageTitle});
}
}, false);
附上相关链接 https://ask.dcloud.net.cn/article/36622?notification_id-760228__item_id-32878