uni-app unipush离线推送监听click失效
uni-app unipush离线推送监听click失效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10
HBuilderX类型:正式
HBuilderX版本号:3.1.22
手机系统:Android
手机系统版本号:Android 11
手机厂商:华为
手机机型:SEA-AL10
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
示例代码:
intent格式
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=x.xx.xxx/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
onLaunch: function() {
// #ifdef APP-PLUS
let info = plus.push.getClientInfo()
let cid = info.clientid;
plus.push.addEventListener('click', function(message) {
console.log('---click---',message)
}, false);
// #endif
}
操作步骤:
app离线状态,发送推送消息,手机收到消息推送,点击消息,启动app
预期结果:
console.log('---click---',message) 能打印出来东西message
实际结果:
没有进来click回调
bug描述:
在uniPush后台手工推送
app在前台时能通过plus.push.addEventListener("click", function ( msg ) {})方法监听到click回调,
app离线,能收到推送消息,点击消息,监听不到click回调。
更多关于uni-app unipush离线推送监听click失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
6 回复
求解
我也遇到这个问题 没人解决的吗
我也遇到了
我也遇到了
根据你的描述,这是一个典型的离线推送点击监听失效问题。以下是可能的原因和解决方案:
1. 推送消息格式问题 你的intent格式看起来是OPPO通道的配置,但华为手机应该使用华为通道。确保在uniPush后台正确配置了厂商通道(华为、小米、OPPO等),并且推送时选择了正确的通道。
2. 监听时机问题
onLaunch中的监听可能在某些情况下注册太晚。建议在App.vue的onShow生命周期中也添加监听:
onShow: function() {
// #ifdef APP-PLUS
plus.push.addEventListener('click', function(message) {
console.log('---onShow click---', message)
}, false)
// #endif
}
3. 离线启动的特殊处理 当app完全退出(非后台)时点击推送消息,app会重新启动。这种情况下需要确保监听代码在app启动的最早期执行。
4. 厂商通道配置检查
- 在uniPush后台检查华为通道配置是否正确
- 确保华为推送证书有效
- 检查app打包时是否包含了华为推送所需的配置
5. 测试建议
- 先测试在线推送的click监听是否正常
- 使用不同厂商手机测试,确认是否是华为特定问题
- 查看手机系统日志,确认推送消息是否正确传递
6. 代码优化 可以尝试更完整的初始化代码:
onLaunch: function() {
// #ifdef APP-PLUS
// 获取客户端推送标识
const info = plus.push.getClientInfo()
console.log('推送客户端信息:', info)
// 监听点击事件
plus.push.addEventListener('click', this.onPushClick)
// 监听接收事件
plus.push.addEventListener('receive', this.onPushReceive)
// #endif
},
methods: {
onPushClick(message) {
console.log('推送点击:', message)
// 处理payload数据
if(message.payload) {
console.log('payload:', message.payload)
}
},
onPushReceive(message) {
console.log('推送接收:', message)
}
}

