Firebase Messaging v1 401 Project Not Permitted 错误

Firebase Messaging v1 401 Project Not Permitted error

我是 运行 带有 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 登录”到正确的 google 帐户,看看这是否是个问题。

这是我发送消息的代码:

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 属性 因为我不确定在哪里可以找到它。

原来我禁用了这个 API:“Firebase In-App 消息传递 API” 原来这个问题之前也有人问过,但是没找到。 Here's the answer

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

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

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