使用Curl通过Firebase Cloud Messaging发送纯数据推送通知遇问题
FCM纯数据推送问题解决指南
你的请求存在两个核心问题
1. 授权方式错误
FCM v1 API(你调用的https://fcm.googleapis.com/v1/projects/projectID/messages:send)不支持使用Server Key作为Authorization凭证,它要求使用OAuth 2.0访问令牌,这是你收到401「UNAUTHENTICATED」错误的直接原因。
2. JSON格式语法错误
你提供的请求体JSON存在语法错误:
message字段后直接跟"token",缺少冒号和正确的嵌套结构data字段的位置错误,应该是message的子属性
解决步骤
一、获取所需的关键参数
1. Server Key(用于旧版FCM API)
在Firebase控制台进入项目设置 → 云消息传递,找到「服务器密钥」,这就是你需要的Authorization密钥。
2. 设备注册令牌(token)
需要在客户端集成FCM SDK后获取:
- Android:调用
FirebaseMessaging.getInstance().getToken() - iOS:调用
Messaging.messaging().token(completion:) - Web:调用
messaging.getToken({ vapidKey: "你的VAPID密钥" })
二、两种可行的推送方式
方式1:使用旧版Legacy HTTP API(更简单,适合快速测试)
这是最直接的方式,支持用Server Key授权,请求结构更简洁:
curl -X POST https://fcm.googleapis.com/fcm/send \ -H "Content-Type: application/json" \ -H "Authorization: key=你的Server Key" \ -d '{ "to": "你的设备token", "data": { "customData": "2dfs2" } }'
方式2:使用FCM v1 API(需OAuth 2.0令牌)
如果坚持用v1 API,需要先获取OAuth 2.0访问令牌(可通过服务账号密钥生成),然后构造正确的请求:
curl -X POST https://fcm.googleapis.com/v1/projects/你的项目ID/messages:send \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的OAuth 2.0令牌" \ -d '{ "message": { "token": "你的设备token", "data": { "customData": "2dfs2" } } }'
内容的提问来源于stack exchange,提问作者mikegrep
相关产品推荐
相关产品推荐

