React Native Android端Firebase Cloud Messaging推送接收异常求助
解决React Native FCM推送突然失效的问题
我之前踩过FCM推送突然挂掉的坑,先给你拆解下问题,顺便解答你关心的配额问题:
关于FCM配额限制的疑问
FCM确实有免费配额,但免费版的限制是每日最多100万条推送请求,而且是项目级别的上限。重点是:如果触发配额超限,Firebase会直接返回429 Too Many Requests的错误码,而不是你后端收到的200状态码。所以从你后端的日志来看,完全可以排除配额超限的问题,不用在这方面浪费时间。
核心排查方向(针对「后端返回200但设备收不到」的情况)
1. 设备Token是否失效
之前能收到推送,突然收不到,大概率是Token失效了——比如用户卸载重装APP、清除应用数据、设备系统更新,甚至切换网络环境都可能导致Token过期。
- 你可以在Firebase控制台的「Cloud Messaging」→「测试消息」里,用
onRegister回调输出的最新Token发送测试推送,如果还是收不到,说明这个Token已经无效了。 - 一定要确保你的后端实时同步最新的Token,替换掉数据库里的旧Token,避免用失效的Token发送推送。
2. 设备端的系统限制
Android的厂商省电模式是推送杀手!比如小米、华为、OPPO的默认省电模式会强制停止后台应用,阻断FCM的推送通道:
- 让用户把你的APP加入电池优化白名单,允许后台活动;
- 检查APP的通知权限是否被关闭,确保「允许通知」「允许后台通知」都开启。
3. FCM配置是否被误修改
虽然你说已经完成了配置,但突然失效可能是配置文件被误改:
- 检查
google-service.json里的project_id、api_key、messagingSenderId是否和Firebase控制台的项目信息一致; - 检查AndroidManifest.xml里的FCM服务配置是否完整,比如:
<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
4. 推送Payload格式是否合规
FCM对Payload的格式要求很严格,即使后端返回200,格式错误也会导致推送无法到达设备:
- 区分
notification和data字段:notification字段由系统直接展示(APP在后台时),data字段需要你在onNotification回调里自行处理; - 正确的Payload示例:
{ "to": "你的设备Token", "notification": { "title": "测试通知", "body": "这是一条测试消息" }, "data": { "custom_key": "自定义数据" } }
5. React Native推送库的兼容性问题
你使用的react-native-push-notification库可能存在版本兼容问题:
- 检查库版本和你的React Native版本是否匹配,建议更新到最新稳定版;
- 确保
onNotification回调已经正确实现,否则即使收到推送也无法触发通知展示:
PushNotification.configure({ onRegister: function(token) { console.log("TOKEN:", token); // 这里一定要把Token同步到后端! }, onNotification: function(notification) { console.log("收到通知:", notification); // 处理通知逻辑,比如跳转页面 notification.finish(PushNotificationIOS.FetchResult.NoData); }, permissions: { alert: true, badge: true, sound: true }, popInitialNotification: true, requestPermissions: true });
最后一步:检查Firebase项目状态
登录Firebase控制台,检查你的项目是否有异常:
- 查看「Cloud Messaging」→「事件报告」,有没有推送失败的统计数据;
- 检查项目是否因为账单问题被暂停(免费版一般不会,但如果绑定了信用卡要确认)。
如果以上排查都没解决问题,可以在Firebase控制台提交支持请求,或者查看FCM官方的故障排查文档。
内容的提问来源于stack exchange,提问作者anbu selvan
相关产品推荐
相关产品推荐

