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

Node.js使用Firebase Admin SDK发送FCM消息时认证服务器报错

FCM 主题消息发送认证错误解决方案

按以下顺序排查即可解决问题,不需要重复校验密钥路径或反复开关Cloud Messaging服务:

  • 给服务账号绑定正确的IAM角色
    新创建的服务账号默认不携带FCM消息发送权限,你需要打开对应项目的Google Cloud IAM管理页,找到密钥文件中client_email字段对应的服务账号,为其绑定Firebase Cloud Messaging Admin角色,绑定后等待2分钟左右待权限全局生效,再重新运行代码即可。注意不要给服务账号绑定低于该权限的角色,否则无法通过发送接口的权限校验。
  • 校验密钥文件的有效性与归属
    确认你本地引用的JSON密钥文件没有被手动修改过任何内容,也没有在控制台被删除/轮换作废;同时核对密钥文件内的project_id字段,和你当前启用Cloud Messaging服务的项目ID完全一致,跨项目误用密钥是触发该报错的高频原因。
  • 修正代码实现问题
    你当前代码存在冗余引入、API版本过旧、参数配置位置错误的问题,可直接替换为以下可运行版本:
const admin = require('firebase-admin');

async function run() {
  try {
    const serviceAccount = require("/Users/myUser/src/my_project/node_admin/my_project-5617a-firebase-adminsdk-lwpk6-5dad9000e0.json");
    const topic = 'all';
  
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
    });
  
    const message = {
      notification: {
        title: "Test1234",
        body: "body",
      },
      android: {
        priority: "high",
        notification: {
          sound: "test-sound.wav"
        }
      },
      apns: {
        payload: {
          aps: {
            sound: "test-sound.wav"
          }
        }
      },
      topic: topic
    };
    
    const res = await admin.messaging().send(message);
    console.log("消息发送成功,消息ID:", res);
  } catch (e) {
    console.error("消息发送失败:", e);
  }
}

run();

调整点说明:

  • 删除了开头冗余重复的firebase-admin引入
  • 替换已不推荐使用的sendToTopic旧API为官方推荐的sendAPI
  • 将sound、priority参数移到对应平台的配置节点下,顶层notification的相关参数不会对各端生效,还可能触发接口异常
  • 排查网络拦截问题
    如果你的运行环境配置了代理、防火墙规则,先确认可以正常连通FCM服务端点,网络层拦截请求时,SDK也会抛出认证失败的误导性报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:06:28