Firebase Messaging v1 401 Project Not Permitted 错误

问题描述 投票:0回答:2

我正在使用 firebase admin sdk 运行节点服务器。但是,每次我尝试从服务器发送推送通知时,都会收到 401 错误。

这是我得到的确切错误:

  errorInfo: {
code: 'messaging/authentication-error',
message: 'An error occurred when trying to authenticate to the FCM servers. Make sure the credential used to authenticate this SDK has the proper permissions. See https://firebase.google.com/docs/admin/setup for setup instructions. Raw server response: "<HTML>\n' +
  '<HEAD>\n' +
  '<TITLE>PROJECT_NOT_PERMITTED</TITLE>\n' +
  '</HEAD>\n' +
  '<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n' +
  '<H1>PROJECT_NOT_PERMITTED</H1>\n' +
  '<H2>Error 401</H2>\n' +
  '</BODY>\n' +
  '</HTML>\n' +
  '". Status code: 401.'
},
codePrefix: 'messaging'

我不太确定为什么我没有该项目的权限。我已经设置了我的服务帐户,并下载了 .json 文件。我什至进入了 gcloud 平台并尝试添加任何看起来正确的权限。以下是与我的服务帐户关联的所有权限:

我在本地运行服务器,并像这样初始化应用程序:

const admin = require('firebase-admin');
const messaging = require('firebase-admin/messaging');
const serviceAccount = require('<path-to-key>');

const fbApp = admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    projectId: '<PROJECT_ID>',
    databaseURL: '<DB_URL>'
});

我不确定还能做什么,因为我已经多次查看了 v1 文档,但仍然不知道我缺少什么权限。我什至确保“firebase 登录”到正确的谷歌帐户,看看这是否是一个问题。

这是我发送消息的代码:

const sendPushNotifications2 = async (topic, reminder) => {
    const payload = genPayload2(reminder);
    //await messaging.getMessaging(fbApp).sendToTopic(topic, payload);
    await admin.messaging(fbApp).sendToTopic(topic, payload);
};

我已经验证了 .json 文件中的 client_id、client_email 和 private_key_id 值。我还没有验证 private_key 属性,因为我不确定在哪里可以找到它。

javascript firebase firebase-cloud-messaging firebase-admin
2个回答
32
投票

事实证明我禁用了这个 API:“Firebase In-App Messaging API” 原来这个问题之前也有人问过,但是没找到。 答案在这里

如果其他人遇到这个问题,这是我的解决方法:

  1. 去谷歌云平台网站
  2. APIs and Services
  3. Enabled APIs & Services
  4. 点击
    + Enable APIs and Services
  5. 搜索
    Firebase In-App Messaging API
    并确保它已启用。

您也可以只搜索消息并确保所有云消息 API 都已启用。


31
投票

问题是新的 Firebase 项目默认只启用新的“Firebase Cloud Messaging API (V1)”,并且使用该配置 - 使用新的 V1 API 的官方

firebase-admin
NodeJS 库 - 将无法发送消息,将收到 401
PROJECT_NOT_PERMITTED
错误。

为了能够从您的服务器发送消息,您还必须启用旧的“遗留”API

  1. 从您的 Firebase 控制台,转到项目设置并打开云消息传递选项卡。
  2. 确保列出的两个 API 都已启用 - 查看其外观的屏幕截图:
  3. 如果未启用任何API,对于被禁用的API,请单击右侧的三点菜单并选择“管理API”
  4. 在打开的 Google Cloud Console 页面中,单击“启用”按钮。

注:

  • 这基本上与@Tial 的自我回答相同,但我对它感到困惑并且(如评论)它有一些错误 - 我花了一段时间来理解它(和链接的答案)以使其正确,所以我必须澄清一下。
  • 在撰写本文时,此问题会影响云消息 API 的所有使用,无论您使用新的 (V1) 还是旧版 API。我希望谷歌在某个时候解决这个问题。
© www.soinside.com 2019 - 2024. All rights reserved.