1. 程式人生 > 其它 >uniapp 實現資訊推送(App)

uniapp 實現資訊推送(App)

廢話不多說直接上程式碼

以下程式碼需寫在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