Firebase Cloud Messaging测试:应使用何种Bearer令牌解决401认证错误?
解决FCM v1 API 401认证错误的方案
你遇到的问题核心是FCM v1 API和旧版Legacy HTTP API的认证机制完全不同——你用了旧版的Server Key来访问v1 API,这肯定会触发401错误,因为v1 API要求的是OAuth 2.0访问令牌,而不是原来的Server Key。下面给你两种可行的解决路径:
路径1:改用Legacy HTTP API(快速解决)
如果你只是想快速发送测试通知,不想折腾OAuth令牌,可以直接切换到旧版API:
- 请求URL改为:
https://fcm.googleapis.com/fcm/send - Authorization头格式调整为:
key=[你的Server Key](注意不要加Bearer前缀) - Content-Type保持
application/json不变 - 请求体用旧版格式,比如:
{ "to": "[设备令牌]", "notification": { "title": "测试通知", "body": "这是一条测试消息" } }
路径2:获取OAuth 2.0访问令牌适配v1 API
如果坚持要用v1 API,你需要生成符合要求的OAuth访问令牌:
- 创建服务账号密钥:
- 进入Firebase控制台 → 项目设置 → 服务账号 → 点击「生成新的私钥」,下载JSON格式的密钥文件。
- 生成访问令牌:
- 最简单的方式是用Google Cloud SDK的
gcloud命令行工具:- 安装并初始化gcloud(登录你的Google账号关联到目标Firebase项目)
- 运行命令:
gcloud auth application-default print-access-token - 命令输出的字符串就是你需要的OAuth访问令牌
- 也可以通过编程方式生成(比如用Google的OAuth客户端库),但
gcloud方式最适合测试场景。
- 最简单的方式是用Google Cloud SDK的
- 更新请求配置:
- Authorization头保持
Bearer [生成的OAuth令牌]格式 - 确保请求体符合v1 API的格式要求,比如:
{ "message": { "token": "[设备令牌]", "notification": { "title": "测试通知", "body": "这是一条v1 API测试消息" } } }
- Authorization头保持
另外要注意:OAuth访问令牌的有效期是1小时,过期后需要重新生成。
内容的提问来源于stack exchange,提问作者sonicblis
相关产品推荐
相关产品推荐

