【发布时间】:2022-06-25 10:47:46
【问题描述】:
我正在尝试在创建 Firestore 文档(消息)时触发的 Firebase 云函数中使用 FCM 向主题发送消息。订阅主题(也使用函数完成)并触发发送功能可以正常工作,但实际发送失败:
Error: 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.
以及一些包含<H1>PROJECT_NOT_PERMITTED</H1> 和<H1>PROJECT_NOT_PERMITTED</H1> 的原始HTML。
这是我的代码(index.ts):
import * as admin from 'firebase-admin';
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
export * from './messages';
和(messages.ts):
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
export const publishMessage = functions
.firestore.document('/messages/{messageId}').onCreate(
(snapshot, context) => {
const data = snapshot.data();
const message = {
notification: {
title: `${data.sentBy} sent a message`,
body: data.message,
},
};
return admin.messaging().sendToTopic('messages', message);
},
);
根据https://firebase.google.com/docs/cloud-messaging/auth-server#provide-credentials-using-adc 这应该可以工作。我也尝试过不带任何参数(https://firebase.google.com/docs/admin/setup#initialize-without-parameters),但同样失败。我错过了什么?
【问题讨论】:
-
您能否确认您使用的是活跃的
service account? -
据我所知。这是一个全新的 Firebase 项目,并为其创建了一个服务帐户。当我转到 IAM & Admin -> Service Accounts 的 Google Cloud Console 时,我看到两个:firebase-adminsdk-xxxxx@
.iam.gserviceaccount.com 和 @appspot.gserviceaccount.com 并且两者都已启用。他们都没有任何钥匙,但这应该不是必需的,对吧? -
是的,没关系,重要的是您的
<projectId>@appspot.gserviceaccount.com中包含的角色。我已经发布了一个答案来进一步讨论这个问题。
标签: typescript firebase google-cloud-functions firebase-cloud-messaging firebase-admin