React Native Firebase Messaging启动数分钟后失效问题咨询
问题原因
- 推送服务冲突
你的项目同时集成了@react-native-firebase/messaging和react-native-push-notification两个推送相关库,从AndroidManifest配置可以看到react-native-push-notification注册了RNPushNotificationListenerService监听com.google.firebase.MESSAGING_EVENT事件,和@react-native-firebase/messaging的服务产生抢占。二者对FCM token的管理逻辑不一致,会触发token频繁刷新,后端存储的旧token失效,导致通知运行几分钟后就无法接收。 - iOS版本逻辑适配
你使用的@react-native-firebase/messaging@12.x版本官方要求必须显式调用messaging().registerDeviceForRemoteMessages()完成APNs注册,才能正常获取device token,未调用时无法获取属于版本设计的正常表现。 - 缺少token刷新监听
没有监听FCM的token更新事件,token刷新后没有同步到服务端,服务端始终用旧token发送通知,自然无法触达。
解决方案
Android端
- 二选一切除冗余依赖:如果主要使用Firebase推送能力,直接卸载
react-native-push-notification,同时删除AndroidManifest中所有和该库相关的配置项,包括对应的<meta-data>、<receiver>、<service>标签;如果需要保留该库的本地通知能力,删除其<service>标签下监听com.google.firebase.MESSAGING_EVENT的<intent-filter>配置,仅交由@react-native-firebase/messaging处理远程推送事件。 - 清理项目构建缓存:修改配置后执行
cd android && ./gradlew clean,再重新打包测试,避免旧配置残留。
iOS端
- 按官方要求在申请完通知权限后,主动调用
messaging().registerDeviceForRemoteMessages()方法完成注册,即可正常获取token。 - 确认Xcode的Signing & Capabilities配置中已经添加
Push Notifications能力,以及Background Modes下的Remote notifications选项。
通用处理
- 全局注册
messaging().onTokenRefresh()监听回调,每次token更新时,将新token同步上传至服务端替换旧记录,保证服务端存储的始终是有效token。 - 应用每次冷启动时主动调用
messaging().getToken()获取最新token,和本地缓存的token做对比,存在差异时同步更新到服务端。
内容的提问来源于stack exchange,提问作者Artur
相关产品推荐
相关产品推荐

