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 回复

解决了吗,大佬

更多关于uni-app unipush离线推送监听click失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


求解

我也遇到这个问题 没人解决的吗

我也遇到了

我也遇到了

根据你的描述,这是一个典型的离线推送点击监听失效问题。以下是可能的原因和解决方案:

1. 推送消息格式问题 你的intent格式看起来是OPPO通道的配置,但华为手机应该使用华为通道。确保在uniPush后台正确配置了厂商通道(华为、小米、OPPO等),并且推送时选择了正确的通道。

2. 监听时机问题 onLaunch中的监听可能在某些情况下注册太晚。建议在App.vueonShow生命周期中也添加监听:

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)
  }
}
回到顶部