You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase推送通知POST请求所需Authorization Bearer令牌查询

解决Firebase推送通知REST API的401认证问题

我来帮你搞定这个困扰——你之前试的那些Firebase控制台令牌都不对,服务端调用FCM REST API需要的是服务账号生成的OAuth 2.0访问令牌,或者更高效的方式是直接用Firebase Admin SDK来处理(它会自动搞定凭证)。下面分两种方案详细说明:

方案一:手动生成合法的Bearer令牌

如果你坚持要自己构造POST请求,按以下步骤获取有效令牌:

  • 第一步:获取服务账号密钥
    进入Firebase控制台 → 你的项目 → 点击左上角齿轮图标进入「项目设置」→ 切换到「服务账号」标签页 → 点击「生成新的私钥」,下载JSON格式的密钥文件(妥善保存,不要泄露)。
  • 第二步:生成访问令牌
    你有两种方式生成:
    1. 使用gcloud命令行工具(推荐,快速便捷):
      确保已经安装并初始化gcloud工具,然后执行:
      gcloud auth application-default print-access-token
      
      这个命令会自动读取你本地的服务账号密钥(如果没有会引导你关联项目),生成的令牌有效期为1小时,直接放到Authorization: Bearer <生成的令牌>头里即可。
    2. 用代码生成(以Node.js为例):
      安装google-auth-library依赖后,写一段简单的代码生成令牌:
      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));
      
      生成的token就是你需要的认证凭证。

方案二:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:53:03