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 首页判断是否有离线音讯,有的话再执行跳转音讯详情页面。