Android应用通过FCM发通知遇400错误,Postman成功App失败求助
看起来你遇到的是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对象通常需要包含title和body这类核心展示字段(即使部分场景下可选,如果Postman请求里包含了这些字段,代码里缺失就会导致请求不合法)。你的代码里objData只设置了content_available和priority,缺少必要的通知内容字段。
修复示例:
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




