测试Firebase静默推送至Android应用遇401认证错误,求解决方法
解决FCM静默推送测试问题
当前cURL方式的问题及修正步骤
你用的OAuth 2 Client ID不符合要求,FCM HTTP V1 API需要的是服务账号的访问令牌,而非Client ID,同时请求体格式也不匹配V1 API规范,具体修正如下:
获取服务账号密钥
- 打开云控制台的服务账号页面,找到项目对应服务账号,点击「添加密钥」→「创建新密钥」,选择JSON格式下载到本地。
生成访问令牌
- 安装Google Cloud SDK(gcloud),登录账号后执行命令获取临时访问令牌:
gcloud auth application-default print-access-token- 将生成的令牌替换到cURL请求的
Bearer <OAuth id>位置。
修正请求体格式
FCM V1 API要求消息内容包裹在message字段内,正确请求体示例:{ "message": { "token": "<设备注册令牌>", "data": { "foo": "1", "bar": "2" }, "android": { "priority": "high" } } }对应cURL命令:
curl -H "Content-type: application/json" -H "Authorization: Bearer <生成的访问令牌>" -X POST -d '{ "message":{ "token":"<设备注册令牌>", "data":{ "foo":"1", "bar":"2" }, "android":{ "priority":"high" }} }' https://fcm.googleapis.com/v1/projects/{项目名}/messages:send
简便的静默推送测试方法
方法一:使用Firebase Admin SDK快速脚本
借助Admin SDK自动处理认证,无需手动管理令牌:
- 安装依赖:
pip install firebase-admin - 编写脚本(替换密钥路径和设备令牌):
import firebase_admin from firebase_admin import credentials from firebase_admin import messaging # 初始化SDK cred = credentials.Certificate('你的服务账号密钥文件路径.json') firebase_admin.initialize_app(cred) # 构建静默消息(仅含data字段即为静默推送) message = messaging.Message( data={ 'foo': '1', 'bar': '2' }, token='<设备注册令牌>', android=messaging.AndroidConfig( priority='high' ) ) # 发送消息 response = messaging.send(message) print(f'消息发送成功,ID:{response}') - 运行脚本即可完成静默推送测试。
方法二:使用Postman可视化调试
- 创建POST请求,地址为
https://fcm.googleapis.com/v1/projects/{项目名}/messages:send。 - 在「Authorization」标签选择「OAuth 2.0」,Grant Type设为「JWT Bearer」,导入服务账号密钥JSON,Postman会自动获取访问令牌。
- 在「Body」标签选择raw JSON,填入修正后的请求体,发送即可测试。
内容的提问来源于stack exchange,提问作者bernardo.g
相关产品推荐
相关产品推荐

