uniapp 實現資訊推送(App)
阿新 • • 發佈:2021-08-07
廢話不多說直接上程式碼
以下程式碼需寫在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 }