uni-app plus.runtime.setBadgeNumber(0) ios清理后会清理掉通知中心的推送

uni-app plus.runtime.setBadgeNumber(0) ios清理后会清理掉通知中心的推送

示例代码:

onLaunch: async function () {  
    console.log('App Launch');  
    // 清除应用角标  
    // #ifdef APP-HARMONY  
    uni.setAppBadgeNumber(0)  
    // #endif  
    // #ifdef APP-PLUS  
    plus.runtime.setBadgeNumber(0);  
    // #endif  
}

操作步骤:

  • 收到通知栏消息后,直接打开app并调用plus.runtime.setBadgeNumber(0)

预期结果:

  • 收到通知栏消息后,直接打开app并调用plus.runtime.setBadgeNumber(0),只清理角标,不清理通知栏消息

实际结果:

  • 收到通知栏消息后,直接打开app并调用plus.runtime.setBadgeNumber(0),通知栏消息也被清理了

bug描述:

  • plus.runtime.setBadgeNumber(0) ios清理后会清理掉通知中心的推送
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 macOS 15.3 (24D2059)
HBuilderX类型 正式
HBuilderX版本 4.87
手机系统 iOS
手机系统版本 iOS 15
手机厂商 苹果
手机机型 iPhone X
页面类型 vue
Vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

更多关于uni-app plus.runtime.setBadgeNumber(0) ios清理后会清理掉通知中心的推送的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

该bug反馈内容基本完整但存在关键缺失:标题和描述清晰说明了iOS上调用plus.runtime.setBadgeNumber(0)意外清除通知中心消息的问题,提供了HBuilderX版本(4.87)、iOS 15等环境信息及代码示例。但复现步骤过于简略,未说明推送方式(uni-push/本地消息)及是否通过点击通知打开应用——这是核心疑点,因为iOS系统会在用户点击通知时自动清除该通知,与角标API无关。
经核查知识库:

iOS平台角标说明 明确角标(badge)和通知中心是独立功能,setBadgeNumber(0)仅应清除角标数字
通知栏消息操作文档 指出iOS平台"不支持获取系统通知栏消息",且创建本地消息的逻辑与角标设置无直接关联

问题很可能源于iOS系统行为而非API缺陷:当用户通过点击通知栏消息打开应用时,系统会自动清除该通知(这是iOS原生机制),用户误认为是setBadgeNumber(0)导致。建议补充复现细节确认是否属于此场景。若需保留通知仅清除角标,应避免在onLaunch中直接调用该API,改用推送服务配置badge参数(如设置为"0")或检查应用启动来源。 内容为 AI 生成,仅供参考

更多关于uni-app plus.runtime.setBadgeNumber(0) ios清理后会清理掉通知中心的推送的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的iOS系统行为,并非uni-app的bug。

在iOS系统中,角标数字(Badge Number)和通知中心(Notification Center)的推送通知是紧密关联的。当调用plus.runtime.setBadgeNumber(0)将角标清零时,iOS系统会自动清除该应用在通知中心的所有推送通知。

这是iOS的设计机制:

  1. 系统级行为:iOS将角标视为未读通知的视觉指示器。角标清零意味着“所有通知已读”,因此系统会自动移除通知中心的对应推送。
  2. 无法分离:在iOS原生开发中,清除角标同样会导致通知被清除,这是Apple的默认设计。
  3. 平台差异:Android平台没有这个限制,可以单独清除角标而不影响通知栏消息。

解决方案: 如果需要在iOS上保留通知栏消息,可以考虑以下方案:

  1. 不主动清除角标:让用户通过下拉通知中心手动清除通知,系统会自动同步清除角标。
  2. 使用本地通知替代:对于需要持久显示的通知,可以使用plus.push.createMessage()创建本地通知,这类通知不受角标清除影响。
  3. 自定义角标逻辑:通过修改应用图标等方式实现自定义角标效果,绕过系统角标API。

代码调整建议

// 可以添加平台判断,在iOS上谨慎使用角标清零
// #ifdef APP-PLUS
if (uni.getSystemInfoSync().platform === 'ios') {
    // iOS平台:考虑不清除角标,或提示用户手动清除
    console.log('iOS平台清除角标会同时清除通知')
} else {
    plus.runtime.setBadgeNumber(0)
}
// #endif
回到顶部