能否不使用SDK调用Firebase Cloud Messaging?非官方支持语言适配HTTP v1疑问
可以通过原生HTTP请求实现FCM HTTP v1调用
不管使用哪种无官方SDK支持的编程语言,完全可以通过原生HTTP请求对接FCM HTTP v1接口,核心是搞定认证流程和请求格式:
1. 完成OAuth2认证获取访问令牌
FCM HTTP v1要求请求携带有效的OAuth2访问令牌,获取流程如下:
- 从Firebase控制台下载服务账号密钥(JSON格式),从中提取
client_email和private_key两个核心字段。 - 使用你的编程语言实现JWT签名:
- 设置JWT的头部为
{"alg": "RS256", "typ": "JWT"} - 设置JWT的payload,包含:
iss:填服务账号的client_emailscope:固定为https://www.googleapis.com/auth/firebase.messagingaud:固定为https://oauth2.googleapis.com/tokenexp:过期时间(建议设为当前时间+3600秒,即1小时)iat:签发时间(当前时间戳)
- 用服务账号的
private_key对JWT进行RS256签名。
- 设置JWT的头部为
- 将签名后的JWT发送到
https://oauth2.googleapis.com/token,请求参数为:grant_type:固定为urn:ietf:params:oauth:grant-type:jwt-bearerassertion:填刚才生成的签名JWT
- 接口会返回包含
access_token的响应,这个令牌就是后续调用FCM所需的认证凭证。
2. 构造FCM HTTP v1推送请求
拿到访问令牌后,就可以发起推送请求:
- 请求URL:
https://fcm.googleapis.com/v1/projects/{你的项目ID}/messages:send - 请求头:
Authorization: Bearer {刚才获取的access_token}Content-Type: application/json
- 请求体格式示例(以发送到单个设备为例):
{ "message": { "token": "目标设备的FCM令牌", "notification": { "title": "推送标题", "body": "推送内容" }, "data": { "custom_key": "自定义数据" } } }
示例(用curl模拟原生HTTP逻辑)
# 第一步:生成JWT并获取令牌(这里省略JWT签名步骤,实际需用对应语言实现) # 假设已获取到access_token=xxx # 第二步:发送推送请求 curl -X POST "https://fcm.googleapis.com/v1/projects/你的项目ID/messages:send" \ -H "Authorization: Bearer xxx" \ -H "Content-Type: application/json" \ -d '{ "message": { "token": "DEVICE_TOKEN", "notification": { "title": "测试推送", "body": "这是一条通过原生HTTP发送的FCM推送" } } }'
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

