uni-app 安卓通过push创建的通知 点击通知栏会触发两次重复生命周期onShow和onHide

uni-app 安卓通过push创建的通知 点击通知栏会触发两次重复生命周期onShow和onHide

问题描述

安卓通过push创建的通知栏,点击通知栏会触发两次onShow和onHide
这个问题会导致我onShow重复连接socket导致连接失败的问题
请问怎么解决?

附件

demo1.zip

5 回复

用的plus.push.createMessage ?请提供代码示例。

更多关于uni-app 安卓通过push创建的通知 点击通知栏会触发两次重复生命周期onShow和onHide的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好,我得demo已经上传了,华为P9 ,安卓8.0.0系统

回复 benqiao: 我测试了一下你的例子,并没有复现,确定一下是否连续点击了两个通知?

特定设备型号才会出现,后期优化。

在 uni-app 中,当通过推送通知(如通过 uni.push 或其他推送服务)创建的通知被点击时,如果触发了两次重复的 onShowonHide 生命周期事件,可能是由于以下原因之一:


1. 推送通知的处理逻辑问题

推送通知的处理逻辑可能在某些情况下导致页面被重复加载或激活,从而触发多次生命周期事件。

解决方法:

  • 检查推送通知的处理逻辑,确保在点击通知时只执行一次页面跳转或激活操作。
  • onShowonHide 中增加调试日志,确认触发的原因。

2. 页面栈管理问题

如果页面栈管理不当,可能会导致页面被重复加载或返回操作触发多次生命周期事件。

解决方法:

  • 确保在点击通知时使用 uni.navigateTouni.redirectTo 进行页面跳转,避免使用 uni.reLaunchuni.switchTab 导致页面栈混乱。
  • 在跳转前检查页面栈,避免重复加载同一页面。

3. uni-app 框架的兼容性问题

在某些版本的 uni-app 框架中,可能存在与推送通知相关的兼容性问题,导致生命周期事件被多次触发。

解决方法:

  • 更新 uni-app 到最新版本,确保使用的是最新的稳定版。
  • 查阅 uni-app 官方文档或社区,查看是否有类似问题的解决方案。

4. 推送 SDK 的配置问题

如果使用了第三方推送 SDK(如极光推送、个推等),可能是 SDK 的配置或回调逻辑导致了生命周期事件的重复触发。

解决方法:

  • 检查推送 SDK 的配置,确保在点击通知时只执行一次页面跳转或回调逻辑。
  • 在 SDK 的回调中增加防重处理,避免重复触发生命周期事件。

5. 生命周期事件的防重处理

如果以上方法无法解决问题,可以在 onShowonHide 中增加防重逻辑,避免重复执行某些操作。

示例代码:

let isShowTriggered = false;

export default {
  onShow() {
    if (isShowTriggered) return;
    isShowTriggered = true;

    // 正常的 onShow 逻辑
    console.log('onShow triggered');
  },
  onHide() {
    isShowTriggered = false;

    // 正常的 onHide 逻辑
    console.log('onHide triggered');
  }
};
回到顶部