无谷歌库情况下GCP OAuth集成FCM HTTP V1方案咨询
无需谷歌库实现FCM HTTP V1版本的OAuth集成
步骤1:获取服务账号密钥JSON文件
- 进入Firebase控制台的项目设置→服务账号页面,生成并下载JSON格式的服务账号密钥。该文件包含
client_email、private_key等核心凭据,是后续生成OAuth令牌的关键。
步骤2:手动构造并签名JWT(JSON Web Token)
要向谷歌OAuth服务器申请访问令牌,需自行完成JWT的构造与签名:
- 构造JWT头部:固定使用RS256算法,格式如下
{ "alg": "RS256", "typ": "JWT" } - 构造JWT载荷:必须包含以下字段
iss:服务账号JSON文件中的client_emailscope:固定值为https://www.googleapis.com/auth/firebase.messagingaud:固定值为https://oauth2.googleapis.com/tokenexp:过期时间戳(当前时间+3600秒,最长有效期1小时)iat:签发时间戳(当前时间)
- 签名JWT:将Base64URL编码后的头部与载荷用
.拼接,再用服务账号的private_key通过RS256算法签名,最终得到完整的JWT字符串。注意Base64URL编码要移除多余的填充字符=。
步骤3:请求OAuth访问令牌
向https://oauth2.googleapis.com/token发送POST请求:
- 请求头设置
Content-Type: application/x-www-form-urlencoded - 请求参数:
grant_type:固定为urn:ietf:params:oauth:grant-type:jwt-bearerassertion:上一步生成的完整JWT字符串
返回结果中的access_token就是调用FCM接口所需的令牌,有效期1小时,过期后需重新生成。
步骤4:调用FCM HTTP V1发送消息
向https://fcm.googleapis.com/v1/projects/[你的项目ID]/messages:send发送POST请求:
- 请求头必须包含:
Authorization: Bearer [获取到的access_token]Content-Type: application/json
- 请求体按照FCM HTTP V1规范构造,示例如下:
{ "message": { "token": "目标设备的FCM令牌", "notification": { "title": "测试通知", "body": "这是一条无谷歌库集成的FCM测试消息" } } }
注意事项
- 务必妥善保管服务账号密钥,避免泄露导致项目被恶意操作
- 建议在每次调用FCM前检查令牌是否过期,过期则重新执行步骤2-3生成新令牌
- JWT的签名过程必须严格遵循RS256标准,否则会被谷歌服务器拒绝
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

