You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用通过FCM发通知遇400错误,Postman成功App失败求助

解决FCM通知Volley请求400错误的问题

看起来你遇到的是FCM请求格式不合法导致的400 Bad Request错误——既然Postman能成功发送,说明你的API密钥、设备令牌这些核心信息是没问题的,问题大概率出在Volley构建的请求细节上。结合你的代码和错误日志,我整理了几个针对性的排查和修复方向:

1. 修正请求URL的尾斜杠

你的Logcat显示请求URL是https://fcm.googleapis.com/fcm/send/(末尾多了一个斜杠),但FCM的官方请求端点是https://fcm.googleapis.com/fcm/send(无尾斜杠)。Postman里你应该用了正确的URL,而代码里的urlAdress多加的斜杠会触发服务器返回400错误。

修复方式:

String urlAdress = "https://fcm.googleapis.com/fcm/send";

2. 调整content_available字段的类型

你代码里把content_available设置成了字符串"true"

objData.put("content_available","true");

但FCM要求这个字段是布尔类型,而非字符串。Postman里你应该用了布尔值所以能成功,代码里的字符串类型会导致请求体格式不符合规范。

修复方式:

objData.put("content_available", true);

3. 完善notification对象的必填字段

FCM的notification对象通常需要包含titlebody这类核心展示字段(即使部分场景下可选,如果Postman请求里包含了这些字段,代码里缺失就会导致请求不合法)。你的代码里objData只设置了content_availablepriority,缺少必要的通知内容字段。

修复示例:

objData.put("title", "通知标题");
objData.put("body", msg.getText().toString()); // 可以复用你的消息输入内容

4. 对比Postman验证请求体完整性

把代码里MYOBJs日志打印的JSON内容,复制到Postman里发送测试。如果Postman也报错,说明JSON本身存在格式/字段问题(比如字段名拼写错误、类型不匹配),针对性调整即可;如果Postman能成功,再检查Volley请求头、重试策略等细节是否和Postman一致。

5. 二次确认请求头正确性

虽然你的请求头看起来没问题,但还是要核对:

  • Authorization头格式为key=你的API_KEY,无多余空格,API_KEY和Postman里的完全一致
  • Content-Type确实是application/json,没有拼写错误

修改完以上几点后重新测试,应该就能解决400错误了。

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

火山引擎 最新活动