firebase - 如何在 Firebase 函数中使用 FCM
问题描述
我正在尝试从 firebase 函数中发送 FCM,但每次都会收到以下错误:
await admin.messaging().sendToDevice(registrationToken, message)
我遵循了这篇文章的建议,主题相同,没有帮助。指向Add the Firebase Admin SDK to your server(文章中的另一个链接)并不是很有帮助,因为我正在使用 Firebase Server。
这篇文章,同样,使用 Firebase 函数发送 FCM,我使用相同的代码(FCM 代码),同样的错误。
这是完整的错误:
Error sending message: { 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. Raw server response: "<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
". Status code: 401.
at FirebaseMessagingError.FirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:43:28)
at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:89:28)
at new FirebaseMessagingError (/workspace/node_modules/firebase-admin/lib/utils/error.js:255:16)
at Object.createFirebaseError (/workspace/node_modules/firebase-admin/lib/messaging/messaging-errors-internal.js:57:12)
at /workspace/node_modules/firebase-admin/lib/messaging/messaging-api-request-internal.js:78:51
at process._tickCallback (internal/process/next_tick.js:68:7)
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>Unauthorized</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unauthorized</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n". Status code: 401.' },
codePrefix: 'messaging' }
解决方案
我是如何解决的:
- 转到Google 服务帐户并选择您的项目。
- 它将显示一个帐户列表。点击帐户@ appspot.gserviceaccount.com
- 选择选项卡“键”。生成一个新密钥并将其下载为 JSON。
- 最后,使用函数.cert()将生成的 JSON 添加到您的项目中:
这仅用于测试,请记住在部署功能时删除凭据!
admin.initializeApp({
credential: admin.credential.cert(
"route/to/generatedJSON.json"
),
});
const messaging = admin.messaging();
推荐阅读
- python-3.x - (Tensorflow 2.0) Keras Dataframe 无法检测到验证图像
- android-studio - Android studio 4.1.1 连接端口失败
- javascript - 将 Python API 调用转换为 NodeJS Axios api 调用 - 如何正确格式化?
- sql - 将数据插入到 ids 需要相等的表中
- python-3.x - 如何在 Kubeflow Pipeline 中挂载 Google Bucket?
- python-3.x - 使用一个表单同时将数据保存到两个表中
- powerbi - 嵌入式 Power BI 仪表板的数据集安全性
- r - R Tidyverse - 按 ID 随机化
- c# - Webhook 未发布到 Teams
- minizinc - 如何在 MiniZinc 中初始化具有特定数字域的变量?