【发布时间】:2022-01-18 04:23:08
【问题描述】:
我希望我的 Node.js 服务器能够自动将 Firebase 云消息发送到具有特定注册令牌的设备。 docs 讨论了几种我可以授权我的 Node.js 服务器的方法,包括如果我使用 Google Cloud 部署(我就是这样),则依赖默认的项目授权。但是,当我在本地机器上测试我的 Node.js 服务器时,似乎我需要使用下载的配置路径 .json 设置一个环境变量。
我这样做了:
export GOOGLE_APPLICATION_CREDENTIALS="/Users/johnsorensen/Documents/Ops Docs/notificationsmrp-firebase-adminsdk-h86ml-cd2d8d8f7a.json"
我可以验证这确实是正确的文件路径,因为我让 Mac 的 finder 将它返回给我。
但是,当我运行我的应用程序时,我收到了这个错误:
errorInfo: {
code: 'app/invalid-credential',
message: 'Failed to determine project ID: Error while making request: getaddrinfo
ENOTFOUND metadata.google.internal. Error code: ENOTFOUND'
},
codePrefix: 'app'
Node.js 代码:
const admin = require("firebase-admin")
admin.initializeApp({ credential: admin.credential.applicationDefault(),})
const registrationToken = 'ePdAwFHd_EBJufZC6XQU8l:APA91bEYD5pFKIMuPwO7oAlKWqbENUXXG_TsLf67IS1Lyf-ge9szJ5Eqo0W8GTqgyheXSyNrNY6_QbU5V8nq39hj42cgphRG9PClgKOY8Ugc6aOFMTTY9t5pWrV_suzvzEXH2cprm3Nv';
const message = {
data: {
score: '850',
time: '2:45'
},
token: registrationToken
};
admin.messaging().send(message)
.then((response) => {
console.log("Success")
console.log(response)
})
.catch((error) => {
console.log("Error Sending Message", error)
})
按照 cmets 中提供的文档进行操作后,我似乎走在了正确的轨道上。但是现在gcloud 正在抛出关于我的.json 的错误:
(gcloud.auth.application-default.login) 文件格式无效。请参阅https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 需要一个 JSON 对象,该对象具有用于“网络”或“已安装”应用程序的单个属性
我从文档中的指定来源下载了 json...现在出了什么问题?
【问题讨论】:
-
我在 admin.initializeApp 中的
credential: admin.credential.applicationDefault()之后看到一个逗号 ','。这是故意的吗?如果您没有传递任何参数,如 projectId,databaseURL 只保留admin.initializeApp({ credential: admin.credential.applicationDefault()})或者如果您想指定 projectId 和其他参数,请按照此documentation -
我认为逗号在我关注的文档代码中。我也注意到了。您提供的链接看起来是正确的来源。我去看看。
-
好的,现在 gcloud 正在抛出关于我的 json 的错误...
标签: node.js firebase google-cloud-platform firebase-cloud-messaging