无法部署Firebase函数,因为在使用Node JS的Flutter中没有发现模块错误



我对Flutter和工作方式有点陌生。我正在研究一个应用程序在Flutter发送推送通知时,用户想要发送它给用户。

该函数是用Node JS编写的(我实际上不太了解它,所以可能是我的代码有问题)。代码如下:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
// const creds = "/Users/raeesali/Downloads/service.json";
const serviceAccount = require("/service.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://udhar-app-cb137-default-rtdb.asia-southeast1.firebasedatabase.app",
});
exports.sendNotification = functions.https.onCall((data, context) => {
try {
const token = data.token;
const payload = {
notification: {
title: data.title,
body: data.body,
clickAction: "FLUTTER_ACTION_CLICK",
},
};
return admin.messaging().sendToDevice(token, payload).then((response) => {
return {
success: true,
response: `Successful ${response}`,
};
}).catch((error) => {
return {
success: false,
response: `Error ${error}`,
};
});
} catch (error) {
console.log(`Some Error Occurred ${error}`);
return {
success: false,
response: `Error ${error}`,
};
}
});

然而,当我尝试部署这个函数时,我得到的错误说:
"错误:未能从源加载函数定义:未能从函数源生成清单:错误:无法找到模块'/service.json'">

文件确实存在,我甚至尝试过提供绝对路径仍然不工作。但是,根据几个教程,如果我只使用admin.initializeApp()行,则函数被成功部署,当函数被触发时,我得到这个响应作为一个异常。

"Error:尝试向FCM服务器进行身份验证时发生错误。确保用于验证此SDK的凭据具有适当的权限。请参阅https://firebase.google.com/docs/admin/setup获取安装说明。">

  1. 我试着通过提供绝对/相对路径来解决它,从来没有工作过。

  2. 删除了npm_modules/lock文件,仍然没有解决方案。

  3. 根据这个检查了我的gpc,一切都启用了,除了我从来没有确切地找到云消息来启用/禁用而不是Firebase云消息。

  4. 无法使用' initializeapp '部署Firebase函数

有两个问题:

代码中的错误配置

删除这一行:

const serviceAccount = require("/service.json");

您不需要为Cloud Functions指定任何凭据。默认情况下,它们在运行时服务帐户的上下文中运行,不需要身份验证。

然后改变这一行:

admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://...-default-rtdb.asia-southeast1.firebasedatabase.app",
});

:

admin.initializeApp();

因为,这个上下文是在函数框架中自动拾取的,你不必指定它。


API配置缺失

  1. 打开Google Cloud Platform Dashboard
  2. 转到API和服务
  3. 启用API和服务
  4. 搜索云消息
  5. 打开云消息和Firebase云消息API

如果问题仍然存在,请确保您的Cloud Function的运行时服务帐户已被授予cloudmessaging.messages.createIAM权限。

相关内容

  • 没有找到相关文章

最新更新