廢話不多說直接上代碼
以下代碼需寫在onlaunch生命周期內
onlaunch(){// onlaunch應用級生命周期 :當uni-app 初始化完成時觸發(全局只觸發一次)
//#ifdef APP-PLUS
const cInfo = plus.push.getClientInfo() // 獲取當前設備的客戶端id,傳給后台,實現指定用戶
info && uni.setStorageSync('clientInfo', info) //儲存cInfo
plus.push.addEventListener("click", function(msg) { //監聽消息點擊事件
let payload;
// iOS 環境下
if(uni.getSystemInfoSync().platform == 'ios') {
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) { //此處是預防兩次響應推送后的執行事件,此處很玄乎
// let messageType = payload.messageType;
// onLaunch 生命周期里,頁面跳轉有問題,跳不過去
// 應該是頁面還沒加載,加上定時后,就可以了;
setTimeout(() => { //做相應的跳轉
uni.navigateTo({
url: payload.payload
})
}, 1000)
}
} else { // Android
payload = msg.payload;
if (payload != null || payload != undefined) { //此處是預防兩次響應推送后的執行事件,此處很玄乎
// onLaunch 生命周期里,頁面跳轉有問題,跳不過去
// 應該是頁面還沒加載,加上定時后,就可以了;
setTimeout(() => { //做相應的跳轉
uni.navigateTo({
url: payload
})
}, 1000)
}
}
}, false);
//收到透傳消息
//只有APP在線時,才會觸發receive事件,透傳消息不會觸發系統消息,需要創建本地消息
plus.push.addEventListener("receive", function(msg) {
//業務代碼
// IOS
if(uni.getSystemInfoSync().platform == 'ios') {
//【APP離線】收到消息,但沒有提醒(發生在一次收到多個離線消息時,只有一個有提醒,但其他的沒有提醒)
//【APP在線】收到消息,不會觸發系統消息,需要創建本地消息,但不能重復創建。必須加msg.type驗證去除死循環
if (msg.type == "receive") {
//創建本地消息,發送的本地消息也會被receive方法接收到,但沒有type屬性,且aps是null
plus.push.createMessage(msg.content, JSON.stringify(msg), {title: messageTitle});
}
} else { // Android
var payload = JSON.parse(msg.content);
var messageTitle = payload.title;
var messageContent = payload.content;
plus.push.createMessage(messageContent, payload, {title: messageTitle})
}
}, false);
//#endif
}
來源:https://www.icode9.com/content-4-999837.html