在 JPush 已正常初始化,并且能够通过 setBadge 设置非零角标的情况下,再调用 setBadge({ badge: 0 }) 无法清除应用角标。
setBadge
setBadge({ badge: 0 })
HarmonyOS 实现会先判断:
if (n && n > 0) { JPushInterface.setBadgeNumber(n) }
由于 0 是 falsy 值,清零请求不会传递给 JPushInterface.setBadgeNumber,此前设置的非零角标会一直保留。
0
JPushInterface.setBadgeNumber
本问题只描述“已完成初始化后,badge=0 仍被过滤”的库实现问题。JPush 未初始化会导致非零和清零操作都失败,属于独立的使用前置条件。
badge=0
JPush.setBadge({ badge: 5, appBadge: 5 })
JPush.setBadge({ badge: 0, appBadge: 0 })
badge=0 被正常传递到原生接口,应用角标被清除。
badge=0 被条件判断过滤,没有调用 JPushInterface.setBadgeNumber(0),应用仍保留此前的非零角标。
JPushInterface.setBadgeNumber(0)
必现(100%)。
前提是 JPush 已完成初始化,并且非零角标能够正常设置。
@react-native-ohos/jpush-react-native
@jg/push
import JPush from 'jpush-react-native'; // 前提:JPush 已正常初始化 JPush.setBadge({ badge: 5, appBadge: 5 }); // 确认非零角标设置成功后执行 JPush.setBadge({ badge: 0, appBadge: 0 });
所有在 HarmonyOS 上使用 setBadge({ badge: 0 }) 清除通知角标的场景。
设置正数不受影响,清除角标功能受影响。
问题描述
在 JPush 已正常初始化,并且能够通过
setBadge设置非零角标的情况下,再调用setBadge({ badge: 0 })无法清除应用角标。HarmonyOS 实现会先判断:
if (n && n > 0) { JPushInterface.setBadgeNumber(n) }由于
0是 falsy 值,清零请求不会传递给JPushInterface.setBadgeNumber,此前设置的非零角标会一直保留。本问题只描述“已完成初始化后,
badge=0仍被过滤”的库实现问题。JPush 未初始化会导致非零和清零操作都失败,属于独立的使用前置条件。复现步骤
JPush.setBadge({ badge: 5, appBadge: 5 })。JPush.setBadge({ badge: 0, appBadge: 0 })。预期结果
badge=0被正常传递到原生接口,应用角标被清除。实际结果
badge=0被条件判断过滤,没有调用JPushInterface.setBadgeNumber(0),应用仍保留此前的非零角标。复现概率
必现(100%)。
前提是 JPush 已完成初始化,并且非零角标能够正常设置。
环境信息
@react-native-ohos/jpush-react-native3.1.3-rc.2@react-native-ohos/jpush-react-native3.2.1-rc.2@react-native-ohos/jpush-react-native3.3.0-beta.3@jg/push1.4.0DEMO
import JPush from 'jpush-react-native'; // 前提:JPush 已正常初始化 JPush.setBadge({ badge: 5, appBadge: 5 }); // 确认非零角标设置成功后执行 JPush.setBadge({ badge: 0, appBadge: 0 });影响范围
所有在 HarmonyOS 上使用
setBadge({ badge: 0 })清除通知角标的场景。设置正数不受影响,清除角标功能受影响。