z***@zhongruigroup.com
z***@zhongruigroup.com
  • 发布:2025-12-16 14:21
  • 更新:2025-12-16 14:22
  • 阅读:23

【报Bug】app在前台运行时,接收到一条推送,弹出了2个通知栏(同时走了“离线推送”和“在线推送”的逻辑)

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: MacOS26

HBuilderX类型: 正式

HBuilderX版本号: 4.75

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iPhone16ProMax

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

App.vue内实现的监听推送代码

onLaunch((ctx) => {  
  console.log('App Launch 启动')  
  // 监听消息推送  
  uni.onPushMessage((res) => {  
    console.log('个推 pushMessage', res)  
    if (res.type === 'click') {  
      // 后台推送,跳转到动态页  
      uni.switchTab({  
        url: '/pages/status/index',  
      })  
    } else if (res.type === 'receive') {  
      // 在前台需要自己创建通知栏消息  
      uni.createPushMessage({  
        title: res.data.title,  
        content: res.data.content,  
        payload: res.data.payload,  
        success: (res) => {  
          console.log('创建通知栏消息成功', res)  
        },  
        fail: (err) => {  
          console.log('创建通知栏消息失败', err)  
        },  
      })  
    }  
    // 将app角标置为0  
    plus.runtime.setBadgeNumber(0)  
  })  
})

操作步骤:

App.vue内监听推送,app停留在前台,后端给app发一条推送

预期结果:

App.vue内监听到推送后,手动创建通知栏(在线推送的逻辑)

实际结果:

App.vue内监听到推送后,即出现了手动创建的通知栏(在线推送的逻辑),又出现了系统创建的通知栏(离线推送的逻辑)。

bug描述:

app在前台运行,接收到一条推送,结果同时走了“离线推送”和“在线推送”的逻辑,导致手机上1条推送出现了2个通知栏。

后端推送参数 force_notification:0 (不自动创建通知栏)。从视频里2个通知栏的标题来看(分别是“尾巴信标”、“设备提醒”),一个是“离线推送”时系统创建的通知栏,一个是“在线推送”app内部手动创建的通知栏。

2025-12-16 14:21 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该bug反馈内容完整,描述了问题现象、环境信息、代码示例及复现步骤。代码示例清晰展示了onLaunch中监听推送并手动创建通知栏的逻辑,可直接复现。预期结果合理:根据文档,当force_notification:0且应用在前台时,应仅触发在线推送逻辑(需手动创建通知栏),不应出现系统自动创建的通知栏。

bug成立。依据知识库:

问题可能源于iOS平台特殊性:即使App在前台,iOS系统仍可能通过APNs通道下发消息,导致unipush SDK同时走在线/离线双通道。用户使用的iOS 26(测试版)可能存在系统级变更影响推送行为。建议检查:

  1. 是否正确配置了iOS推送证书
  2. 尝试升级至最新HBuilderX正式版(当前4.75非最新)
  3. 在onPushMessage回调中增加type判断逻辑,避免重复创建通知栏

此非概念性误报,属真实推送通道处理异常,需结合iOS平台特性排查。

内容为 AI 生成,仅供参考

要回复问题请先登录注册