You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Volley调用FCM遇400错误,自定义通知无法触发onMessageReceived

解决FCM自定义通知不触发onMessageReceived()且报400错误的问题

首先,Volley返回400状态码说明你的请求格式、参数或者权限存在问题,这也是导致自定义通知不生效的核心原因之一。咱们一步步来排查解决:

1. 先检查请求头是否配置正确

FCM服务器要求请求头必须包含两个关键项,缺一个都可能报错:

  • Authorization: key=YOUR_SERVER_KEY:这里的服务器密钥要从Firebase控制台的「项目设置」→「云消息传递」里获取,别搞混了客户端的API密钥
  • Content-Type: application/json:必须指定这个类型,否则FCM无法正确解析你的JSON payload

用Volley实现的话,设置请求头的代码大概是这样:

JsonObjectRequest fcmRequest = new JsonObjectRequest(Request.Method.POST, FCM_SEND_URL, payload,
        response -> { /* 处理成功回调 */ },
        error -> { /* 处理错误回调 */ }) {
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "key=你的服务器密钥");
        headers.put("Content-Type", "application/json");
        return headers;
    }
};

2. 确保Payload格式符合触发onMessageReceived()的要求

FCM的消息分两种:通知消息和数据消息,只有数据消息(或同时包含通知+数据且客户端在前台)才会触发onMessageReceived()。如果只发notification字段的消息,系统会直接弹出默认通知,不会走你的自定义逻辑。

正确的触发自定义逻辑的Payload示例(纯数据消息):

{
  "to": "目标设备的FCM令牌",
  "data": {
    "title": "我的自定义标题",
    "body": "这是自定义通知内容",
    "extra_data": "可以带任意自定义字段"
  }
}

如果想后台也触发onMessageReceived(),就别用notification字段,只用data字段就行。

3. 检查FCM令牌和请求URL是否正确

  • 400错误也可能是to字段里的FCM令牌无效(比如设备卸载后令牌失效、格式输错),可以先去Firebase控制台的「云消息传递」测试发送给该令牌,确认令牌是否有效。
  • 你的报错里URL是https://fcm.googleapis.com/fcm/send/,注意末尾不要带斜杠,正确的URL应该是https://fcm.googleapis.com/fcm/send,多了斜杠也可能触发400错误。

4. 最后确认客户端的Firebase配置

确保客户端这边的集成没毛病:

  • 已经把google-services.json放在app目录下
  • 依赖了正确的Firebase Messaging库(用最新版本更稳妥):
implementation 'com.google.firebase:firebase-messaging:23.4.0'
  • 自定义的FirebaseMessagingService已经在AndroidManifest.xml里注册:
<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

按照上面的步骤排查,应该能解决400错误和自定义通知不触发的问题。如果还是不行,可以把完整的Payload和请求头贴出来,方便进一步定位问题。

内容的提问来源于stack exchange,提问作者Aahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:35:26