已开启
[Bug] setBadge 无法通过 badge=0 清除应用角标(RNOH 0.72) #54
JustVugg创建于  4 天前
JustVugg
JustVugg
4 天前 创建

问题描述

在 JPush 已正常初始化,并且能够通过 setBadge 设置非零角标的情况下,再调用 setBadge({ badge: 0 }) 无法清除应用角标。

HarmonyOS 实现会先判断:

if (n && n > 0) {
  JPushInterface.setBadgeNumber(n)
}

由于 0 是 falsy 值,清零请求不会传递给 JPushInterface.setBadgeNumber,此前设置的非零角标会一直保留。

本问题只描述“已完成初始化后,badge=0 仍被过滤”的库实现问题。JPush 未初始化会导致非零和清零操作都失败,属于独立的使用前置条件。

复现步骤

  1. 正常初始化 JPush,确认推送服务可用。
  2. 调用 JPush.setBadge({ badge: 5, appBadge: 5 })
  3. 确认应用角标显示为 5。
  4. 调用 JPush.setBadge({ badge: 0, appBadge: 0 })
  5. 返回桌面观察应用图标角标。

预期结果

badge=0 被正常传递到原生接口,应用角标被清除。

实际结果

badge=0 被条件判断过滤,没有调用 JPushInterface.setBadgeNumber(0),应用仍保留此前的非零角标。

复现概率

必现(100%)。

前提是 JPush 已完成初始化,并且非零角标能够正常设置。

环境信息

  • React Native 0.72.5 / @react-native-ohos/jpush-react-native 3.1.3-rc.2
  • React Native 0.77.1 / @react-native-ohos/jpush-react-native 3.2.1-rc.2
  • master 基线 / @react-native-ohos/jpush-react-native 3.3.0-beta.3
  • 极光 HarmonyOS 原生 SDK:@jg/push 1.4.0

DEMO

import JPush from 'jpush-react-native';

// 前提:JPush 已正常初始化
JPush.setBadge({ badge: 5, appBadge: 5 });

// 确认非零角标设置成功后执行
JPush.setBadge({ badge: 0, appBadge: 0 });

影响范围

所有在 HarmonyOS 上使用 setBadge({ badge: 0 }) 清除通知角标的场景。

设置正数不受影响,清除角标功能受影响。

likedislike