uni-app 一加手机收到离线消息点击通知栏能打开应用但无法触发click事件

uni-app 一加手机收到离线消息点击通知栏能打开应用但无法触发click事件

操作步骤:

  • 收到离线消息点击通知栏打开应用

预期结果:

  • 收到离线消息点击通知栏消息打开应用并触发click事件获取自定义参数信息

实际结果:

  • 收到离线消息点击通知栏能打开应用,无法触发click事件

bug描述:

  • OPPO应用商店已上架,集成离线推送功能,一加手机能够收到在线和离线消息,在线消息点击通知栏能打开应用且触发click事件,但离线消息点击通知栏能打开应用无法触发click事件,使用intent且格式按照要求,华为手机是正常的

| 信息类别       | 详细信息           |
|----------------|--------------------|
| 产品分类       | uniapp/App         |
| PC开发环境     | Windows            |
| PC开发环境版本 | Windows 10 专业版  |
| HBuilderX类型  | 正式               |
| HBuilderX版本  | 4.08               |
| 手机系统       | Android            |
| 手机系统版本   | Android 10         |
| 手机厂商       | 一加               |
| 手机机型       | 一加7 Pro          |
| 页面类型       | vue                |
| vue版本        | vue2               |
| 打包方式       | 云端               |
| 项目创建方式   | HBuilderX          |

更多关于uni-app 一加手机收到离线消息点击通知栏能打开应用但无法触发click事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 一加手机收到离线消息点击通知栏能打开应用但无法触发click事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,如果在一加手机上收到离线消息并点击通知栏打开应用时,无法触发 click 事件,可能是由于以下原因导致的:


1. 应用未完全启动

  • 当应用从后台被唤醒时,可能还没有完全初始化,导致 click 事件无法触发。
  • 解决方法:确保应用在启动时完成初始化逻辑。可以在 App.vueonLaunchonShow 生命周期中检查通知栏点击事件的处理逻辑。

2. 通知栏点击事件未正确传递

  • 在 Android 平台上,通知栏点击事件需要手动处理。uni-app 默认可能没有自动触发 click 事件。
  • 解决方法:在 App.vueonShow 生命周期中,通过 plus.push.getClientInfo().payload 获取通知栏点击的附加数据,并手动触发对应逻辑。
export default {
  onShow(options) {
    const payload = plus.push.getClientInfo().payload;
    if (payload) {
      // 处理通知栏点击事件
      console.log('Notification payload:', payload);
      this.handleNotificationClick(payload);
    }
  },
  methods: {
    handleNotificationClick(payload) {
      // 根据 payload 执行相应逻辑
    }
  }
}

3. 一加手机的优化策略

  • 一加手机(或其他 Android 设备)可能会对后台应用进行优化,导致应用在点击通知栏时无法立即响应。
  • 解决方法
    • AndroidManifest.xml 中,确保应用具有正确的权限和启动模式。
    • App.vueonShow 中增加延迟处理逻辑,确保应用完全启动后再执行事件。
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
// App.vue
onShow(options) {
  setTimeout(() => {
    const payload = plus.push.getClientInfo().payload;
    if (payload) {
      this.handleNotificationClick(payload);
    }
  }, 1000); // 延迟 1 秒处理
}
回到顶部