1 . 在app.vue页面onLaunch中添加
onLaunch: function() {
var platform = uni.getSystemInfoSync().platform;
// #ifdef APP-PLUS
plus.screen.lockOrientation("portrait-primary");
//推送
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid; //客户端标识
console.log('cid:' + cid);
const _self = this;
const _handlePush = function(payload) {
var pages = getCurrentPages();
console.log('----------', payload)
//页面栈为0,标记app是被push唤醒,在欢迎页执行跳转逻辑
if (payload.alive === false) {
console.log('设置storage')
uni.setStorage({
key:'appLaunchedByPush',
data:payload
})
}
else { //app在线,收到push可以直接跳转
uni.navigateTo({
url: '/pages/index'
});
}
};
plus.push.addEventListener('click', function(message) {
console.log('push click =======', message)
if (platform == 'ios') {
//离线是payload为object , 在线时本地创建的为string(本地创建通知只能传string,否则无法传递payload)
if (typeof message.payload == 'string') {
console.log('string')
var payload = JSON.parse(message.payload);
} else {
console.log('obj')
var payload = message.payload;
}
_handlePush(payload);
return
}
//这里可以写跳转业务代码
_handlePush(message.payload);
});
plus.push.addEventListener('receive', function(message) {
console.log('push receive ======', message);
if (message.type == "receive"){ // 这里判断触发的来源,否则一直推送。
if (platform == 'ios') {
console.log('ios receive', message);
if (typeof message.payload == 'string') {
plus.push.createMessage(
message.content,
message.payload, {
cover: false,
title: message.title,
});
} else {
plus.push.createMessage(
message.content,
JSON.stringify(message.payload), {
cover: false,
title: message.title,
});
}
}
else {
console.log('android receive======', message);
//执行跳转判断或添加本地通知
plus.push.createMessage(
message.content,
JSON.stringify(message.payload), {
cover: false,
title: message.title
});
}
}
});
}
2 . 处理离线消息跳转在app默认跳转页面添加我这里是登录页面
uni.switchTab({
url: '/pages/workplace/index',
success: () => {
//处理app被push唤醒时消息推送的跳转
const payload = uni.getStorageSync('appLaunchedByPush')
console.log('appLaunchedByPush', payload)
if (payload) {
setTimeout(()=> {
console.log(payload + 'setTimeout')
uni.navigateTo({
url: '/pages/index'
});
uni.setStorage({
key:'appLaunchedByPush',
data:null
})
})
}
}
})
3 . 在manifest.json =》 App模块配置中勾选消息推送及uniPush选项开启消息推送功能
4 . 在unicloud开发者中心添加项目应用,添加好后进入应用在 Uni push=》消息推送中发送消息测试是否可以收到推送的消息
5 . 在unicloud开发者中心 =》 你创建的应用 =》Uni push=》厂商推送设置中配置各厂商推送设置(app在线时消息走的是第三方消息推送平台,离线时走的是手机厂商的推送通道,所以这个必须配置,如果不配置在app离线时会收不到离线消息),配置完成app离线时也可以收到推送消息啦
遇到的问题:
1 . 华为离线消息推送收不到?
(1)厂商推送是否配置完成,agconnect-services.json文件是否上传(2)打包或打自定义基座必须使用自有证书,共有证书收不到消息推送(3)华为手机会默认把离线消息归为营销通知,离线时消息是收到的只是不展示出来,在手机设置=》通知=》你的app=》打开营销通知选项才可以正常显示离线消息
2 . ios在线离线消息都收不到?
(1)是否申请ios证书(2)在开发者中心=》消息推送=》应用配置=》查看是否配置ios相关证书(3)打自定义基座时是否正确上传证书文件及私钥证书
3 . 离线消息收到了,但是不能正常跳转,点击后只能跳转到首页?
离线消息点击后会默认先跳转到首页或者欢迎页,这时在app.vue里写的跳转消息详情的页面也执行跳转,页面会报错提示不要重复跳转详情页。离线消息点击跳转到首页后,需要在app首页判断是否有离线消息,有的话再执行跳转消息详情页面。