【问题标题】:Firebase can't find project ID Firebase Admin SDK cloud messagingFirebase 找不到项目 ID Firebase Admin SDK 云消息传递
【发布时间】: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


【解决方案1】:

我认为我正在阅读的文档具有误导性。我可以通过简单地从 firebase 下载私钥,然后使用以下代码成功验证节点应用程序:

const admin = require("firebase-admin");

const serviceAccount = require("/filepath/to/private/key");

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多