Flutter Android端Firebase推送异常:APP内发送无响应
Android FCM通知接收问题排查与修复
针对你遇到的Android端APP内发起通知无法接收的问题,可从以下几个关键点排查修复:
1. 修正FCM API端点
必须使用官方Legacy FCM API端点,移除第三方测试地址:
const messageAndroidUrl = "https://fcm.googleapis.com/fcm/send";
https://api.rnfirebase.io/messaging/send是React Native Firebase专属测试端点,不支持自定义请求调用。
2. 清理请求体中的重复目标字段
请求体同时包含to和token字段会导致FCM解析异常,二选一保留即可(Legacy API推荐用to字段):
body: jsonEncode( <String, dynamic>{ 'notification': <String, dynamic>{ 'body': serviceName, 'title': 'Nueva Solicitud', }, 'priority': 'high', 'data': <String, dynamic>{ 'click_action': 'FLUTTER_NOTIFICATION_CLICK', 'id': '1', 'status': 'done' }, 'to': authorizedSupplierTokenId, // 保留此字段,删除'token'字段 }, ),
3. 完善错误日志排查
代码未捕获输出请求错误与响应信息,无法定位FCM返回的具体问题,修改后便于排查:
try { http.Response response = await http.post(...); print("FCM请求状态码: ${response.statusCode}"); print("FCM响应内容: ${response.body}"); } catch (e) { print("FCM请求错误: $e"); }
通过日志可快速定位密钥无效、token过期、请求格式错误等问题。
4. 验证服务器密钥有效性
确保messageKey是Firebase控制台项目设置 > 云消息传递下的服务器密钥(非Legacy服务器密钥),密钥错误会返回401 Unauthorized状态码。
5. 确认AndroidManifest配置
虽测试活动能接收通知,仍需确认MainActivity中配置了正确的点击事件过滤器:
<intent-filter> <action android:name="FLUTTER_NOTIFICATION_CLICK" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
完成以上调整后,重新测试APP内发起的通知发送,即可正常接收。
内容的提问来源于stack exchange,提问作者PedroCova
相关产品推荐
相关产品推荐

