React Native iOS:启动应用时通知栏通知全部消失问题咨询
解决iOS中PushNotificationIOS导致启动App时通知栏通知被清除的问题
我之前也踩过类似的坑!你提到的现象——后台收到通知正常显示,但启动App(无论点通知还是图标)时通知栏通知全被清除,虽然你没手动设置applicationIconBadgeNumber为0,但大概率是某些隐性逻辑触发了这个操作,咱们一步步排查:
1. 排查PushNotificationIOS的通知处理逻辑
有些版本的PushNotificationIOS在调用getInitialNotification或者监听notification事件时,内部会自动重置应用角标为0,哪怕你没写相关代码。比如在组件初始化时调用getInitialNotification获取启动通知,库的底层实现可能悄悄执行了角标清零操作。
- 解决思路:
- 检查你处理通知的代码,比如
componentDidMount或useEffect中的逻辑,有没有间接触发角标重置的操作(比如第三方统计、埋点工具在收到通知时的默认行为)。 - 可以尝试在获取通知后,手动恢复角标数(如果需要保留角标的话):先通过
PushNotificationIOS.getApplicationIconBadgeNumber()获取当前值,处理完通知后再用setApplicationIconBadgeNumber设回去。
- 检查你处理通知的代码,比如
2. 检查iOS原生侧的AppDelegate配置
有时候原生代码的通知回调里会默认处理角标清零,哪怕你没在RN层写相关代码。比如在AppDelegate的didReceiveRemoteNotification或willPresentNotification方法中,可能存在application.applicationIconBadgeNumber = 0的代码。
- 解决思路:
- 打开Xcode,找到项目的
AppDelegate.m(或AppDelegate.swift)文件,检查以下几个方法:application:didFinishLaunchingWithOptions:application:didReceiveRemoteNotification:fetchCompletionHandler:userNotificationCenter:willPresentNotification:withCompletionHandler:
- 确保这些方法里没有主动设置
applicationIconBadgeNumber为0的代码,如果有,根据需求修改或移除。
- 打开Xcode,找到项目的
3. 检查推送Payload的配置
如果你的推送服务(比如APNs)在发送通知时,Payload里包含了badge: 0字段,那么iOS系统会自动清除通知栏的所有通知,同时把应用角标设为0——这和你App里的代码无关,是推送内容本身导致的。
- 解决思路:
- 查看推送后台的配置,检查发送的Payload是否包含
badge字段且值为0。如果不需要清零角标,直接移除这个字段;如果需要保留角标,设置为对应的数值(比如当前未读通知数)。
- 查看推送后台的配置,检查发送的Payload是否包含
4. 做个简单测试定位问题
可以通过以下测试缩小问题范围:
- 后台时发送2-3条通知,然后直接点击App图标启动,不要点通知栏的通知。如果通知栏的通知还是被清除,说明是App启动时的全局逻辑导致的;
- 如果只有点击通知栏的通知启动App时才会清除,那问题就出在处理“点击通知”的回调逻辑里。
内容的提问来源于stack exchange,提问作者Jawad
相关产品推荐
相关产品推荐

