『/*
推送代码
- 在App.vue中onLaunch中调用这个方法
- @param {(payload) => void} handler
*/
export const monitorPush = handler => {
// #ifdef APP-PLUS
const _handlePush = function(message, source) {
const { globalData } = getApp()
if (!globalData || globalData.isBackground == null) {
uni.showModal({
content:
'使用推送,请在App.vue中定义globalData.isBackground,然后在对应的应用生命周期中,改变这个bool值'
})
return
}
if (globalData.isBackground) {
// App处于后台时,iOS收到推送,从消息中心弹出推送,此时还未点击推送消息
// 就自动触发了click事件,从而执行到这里 这个是框架的一个bug
console.log(${source}推送,但app处于后台,为避免触发2次,忽略掉此次触发
)
return
}
const isAndroid = message.UUID && /^android/i.test(message.UUID)
console.log(是否是安卓推送:${isAndroid}
)
let payload = message.payload
if (typeof payload === 'string') {
payload = JSON.parse(decodeURIComponent(payload))
}
console.log(payload: ${payload}
)
if (payload.local) {
console.log(收到本地推送:${decodeURIComponent(JSON.stringify(message))},直接返回
)
return
}
if (handler) {
handler(payload)
}
if (isAndroid) {
// 如果是安卓的话 因为使用透传模板,推送消息不会出现在通知栏中,需要主动创建一个本地消息
plus.push.createMessage(payload.content, JSON.stringify({ local: true }))
}
}
plus.push.addEventListener('click', function(message) {
console.log('click message: ', message)
_handlePush(message, 'click')
})
plus.push.addEventListener('receive', function(message) {
console.log('receive message: ', message)
_handlePush(message, 'receive')
})
// #endif
}
//接收代码
plus.push.addEventListener('receive', message => {
console.log('接收到推送', message)
// 接收到消息
if (message.payload) {
try {
const payload = JSON.parse(message.payload)
if (payload && payload._local) return // 本地消息不做处理
} catch (e) {
console.log('推送payload解析对象失败', message.payload)
}
}
// 把消息保存到vuex中
this.updatePushMessage(message)
// ios平台接收到的在线消息(透传消息),要使用本地通知提醒
if (!message.aps && uni.getSystemInfoSync().platform === 'ios') {
console.log('ios平台接收到透传消息,使用本地通知提醒', message)
plus.push.createMessage(message.content, JSON.stringify({ _local: true }))
}
})
』
1 个回复
8***@qq.com
老哥解决了吗?遇到同样的问题