Firebase推送通知POST请求所需Authorization Bearer令牌查询
解决Firebase推送通知REST API的401认证问题
我来帮你搞定这个困扰——你之前试的那些Firebase控制台令牌都不对,服务端调用FCM REST API需要的是服务账号生成的OAuth 2.0访问令牌,或者更高效的方式是直接用Firebase Admin SDK来处理(它会自动搞定凭证)。下面分两种方案详细说明:
方案一:手动生成合法的Bearer令牌
如果你坚持要自己构造POST请求,按以下步骤获取有效令牌:
- 第一步:获取服务账号密钥
进入Firebase控制台 → 你的项目 → 点击左上角齿轮图标进入「项目设置」→ 切换到「服务账号」标签页 → 点击「生成新的私钥」,下载JSON格式的密钥文件(妥善保存,不要泄露)。 - 第二步:生成访问令牌
你有两种方式生成:- 使用gcloud命令行工具(推荐,快速便捷):
确保已经安装并初始化gcloud工具,然后执行:
这个命令会自动读取你本地的服务账号密钥(如果没有会引导你关联项目),生成的令牌有效期为1小时,直接放到gcloud auth application-default print-access-tokenAuthorization: Bearer <生成的令牌>头里即可。 - 用代码生成(以Node.js为例):
安装google-auth-library依赖后,写一段简单的代码生成令牌:
生成的token就是你需要的认证凭证。const { GoogleAuth } = require('google-auth-library'); async function getAccessToken() { const auth = new GoogleAuth({ scopes: ['https://www.googleapis.com/auth/firebase.messaging'] }); const client = await auth.getClient(); const token = await client.getAccessToken(); return token.token; } // 调用函数获取令牌 getAccessToken().then(token => console.log('Bearer令牌:', token));
- 使用gcloud命令行工具(推荐,快速便捷):
方案二:用Firebase Admin SDK发送推送(更省心)
其实搭建服务端时,直接集成Admin SDK会比手动构造REST请求更高效,它会自动处理认证和令牌刷新,不用你手动维护:
- 第一步:安装SDK(以Node.js为例)
npm install firebase-admin - 第二步:初始化SDK并发送推送
const admin = require('firebase-admin'); // 引入你下载的服务账号密钥文件 const serviceAccount = require('./path/to/your-service-account-key.json'); // 初始化Admin SDK admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); // 构造推送消息 const message = { notification: { title: '测试推送', body: '这是通过Admin SDK发送的推送通知' }, // 替换成目标设备的注册令牌 token: 'YOUR_DEVICE_REGISTRATION_TOKEN' }; // 发送推送 admin.messaging().send(message) .then(response => console.log('推送成功:', response)) .catch(error => console.log('推送失败:', error));
为什么之前的令牌会返回401?
Firebase控制台里的那些令牌(比如Web API密钥、项目ID对应的令牌)都是给客户端SDK使用的,没有服务端调用FCM API的权限。服务端必须使用基于服务账号的认证,因为这是谷歌为服务端应用提供的安全认证方式,确保只有授权的服务端才能发送推送。
内容的提问来源于stack exchange,提问作者Arthur Attout
相关产品推荐
相关产品推荐

