FCM v1 API发送Android通知报错:The notification has no target applications 解决咨询
解决FCM v1 API报错“The notification has no target applications”的方案
1. 验证设备注册令牌的有效性
- 确认请求中
message.token字段是当前设备有效的FCM注册令牌,令牌过期、被撤销或格式错误都会导致目标无法匹配。可以让设备重新调用FirebaseMessaging.getInstance().getToken()获取新令牌测试。 - 检查令牌是否归属当前FCM项目,不同项目生成的令牌无法跨项目使用。
2. 严格遵循FCM v1 API的消息结构
FCM v1的请求格式与旧版Legacy API不同,必须包含顶层message节点,且目标字段(token/topic/condition)不能缺失。示例正确请求体:
{ "message": { "token": "VALID_DEVICE_REGISTRATION_TOKEN", "notification": { "title": "测试通知标题", "body": "测试通知内容" }, "android": { "notification": { "channel_id": "你的Android通知渠道ID" } } } }
- 避免遗漏
token等目标定位字段,这是报错的核心原因之一。
3. 检查服务账号权限与项目配置
- 确认使用的Client Email对应的服务账号,在Google Cloud控制台的IAM页面已分配
Firebase Cloud Messaging Admin角色,缺少权限会导致消息无法正确路由。 - 核对Project ID的拼写、大小写,确保与Google Firebase控制台的项目ID完全一致。
4. 验证设备端FCM配置
- 设备应用中的
google-services.json文件必须与当前FCM项目匹配,文件内的project_id、api_key等参数不能错误。 - 确认设备应用已成功完成FCM注册流程,启动时能正常获取令牌,无注册失败的日志报错。
5. 确认API端点正确性
FCM v1的请求端点为:
https://fcm.googleapis.com/v1/projects/{PROJECT_ID}/messages:send
不要混用旧版Legacy API的端点(https://fcm.googleapis.com/fcm/send),端点不匹配会导致消息格式解析错误。
6. 测试最小化请求
先发送结构最简化的请求(仅包含token和基础notification字段),排除复杂配置(如自定义data字段、Android高级设置)的干扰,确认基础请求能成功后再逐步扩展功能。
内容的提问来源于stack exchange,提问作者Arpit Soni




