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

Firebase Messaging(Web端)获取订阅主题返回401错误求助

解决Firebase IID API获取订阅主题列表401错误的办法

问题根源

你碰到的401错误,本质是当前IID API的权限规则已更新:之前可用的Legacy服务器密钥已停用,你现在用的客户端公开api-key没有调用该接口的权限;而私钥不能直接放在请求头里,需要先转换为合法的OAuth 2.0 Access Token才能生效。另外你之前的请求格式也有误——Authorization参数不该拼在查询字符串里,只能通过请求头传递。

具体解决办法

方法一:使用Firebase Admin SDK(官方推荐,最省心)

这是目前官方主推的稳定方案,无需手动处理权限验证:

  1. 从Firebase控制台「项目设置」→「服务账号」页面,下载项目的服务账号密钥(JSON格式)
  2. 初始化Admin SDK(以Node.js为例):
    const admin = require('firebase-admin');
    const serviceAccount = require('./你的密钥文件路径.json');
    
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount)
    });
    
  3. 调用接口获取订阅主题:
    async function getTokenSubscribedTopics(token) {
      const tokenInfo = await admin.messaging().getToken(token);
      return tokenInfo.topics;
    }
    

方法二:手动生成OAuth 2.0 Access Token调用HTTP API

如果无法使用Admin SDK,需通过服务账号密钥生成合法的AccessToken:

  1. 用服务账号密钥生成JWT,权限必须包含https://www.googleapis.com/auth/firebase.messaging
  2. 向https://oauth2.googleapis.com/token发送POST请求,参数设置:
    • grant_type: urn:ietf:params:oauth:grant-type:jwt-bearer
    • assertion: 上述生成的JWT
  3. 拿到返回的access_token后,将请求头设置为Authorization: Bearer <你的access_token>,再调用正确的IID API:
    GET https://iid.googleapis.com/iid/info/<你的messaging-token>?details=true
    
    注意:查询字符串仅保留details=true,不要将Authorization参数拼入其中。

重要提醒

  • 客户端的Web API Key仅用于客户端SDK初始化,不具备调用IID管理接口的权限,无需再尝试使用它
  • 服务账号密钥需妥善保管,绝对不能暴露给客户端
  • IID API属于FCM底层接口,优先使用Admin SDK可避免权限和版本兼容问题

内容的提问来源于stack exchange,提问作者Simon H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:40:48