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

Node.js调用firebase-admin发FCM推送报PROJECT_NOT_PERMITTED 401错误

Firebase Admin FCM 报 PROJECT_NOT_PERMITTED 401错误排查方案

该错误核心是当前使用的服务账号凭证无目标Firebase项目的FCM接口调用权限,按以下优先级逐一排查即可解决:

  • 核对私钥文件与项目的匹配性
    打开本地使用的pushKey.json文件,检查其中project_id字段值,必须和你要推送的Android应用所属Firebase项目ID完全一致,多项目并行开发时很容易出现私钥文件拷错的问题。
    如果之前手动删除过该私钥对应的服务账号,旧私钥会直接失效,重新到project settings -> service accounts -> firebase admin sdk路径生成新私钥替换本地文件即可,下载后不要手动修改JSON文件内容。
  • 检查服务账号权限与API启用状态
    进入对应项目的Google Cloud IAM管理页,找到pushKey.json中client_email字段对应的服务账号,确认其已绑定Firebase Admin SDK Administrator Service Agent角色,缺失该角色会直接导致FCM接口鉴权失败。
    到GCP API库页面找到Firebase Cloud Messaging服务,确认API状态为已启用,新创建的项目、从Google Play自动关联创建的项目经常会默认关闭该API,手动启用后等待2分钟左右再重试即可。
  • 排查环境与代码配置问题
    如果本地/服务端配置了网络代理,先确认代理没有拦截、篡改发往FCM服务的HTTPS请求,这类请求被代理篡改认证头时也会返回401错误,可临时关闭代理、或给Node进程配置NO_PROXY规则绕过代理测试。
    将firebase-admin包升级到10.x以上的稳定版本,9.x及更早的旧版本使用的旧版FCM鉴权接口已逐步下线,兼容问题也会触发该错误。初始化时不要传入和当前项目不匹配的databaseURL等多余参数,仅配置credential即可。
    注意sendToDevice是已废弃的旧版API,新项目优先使用send()方法构造消息发送,旧API在部分新开通的Firebase项目上存在权限兼容问题。
  • 核对客户端配置一致性
    检查Android端集成的google-services.json配置文件,确认其属于和服务端私钥同一个Firebase项目,如果客户端token是其他项目下的应用生成的,服务端调用发送接口时也会返回项目无权限错误。

验证技巧:排查完上述配置后,先写最小化测试脚本,仅初始化凭证、给测试设备token发最基础的文本通知,不要加自定义业务payload,先验证鉴权链路跑通后再叠加业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:27:17