当前位置: 首页 > 知识库问答 >
问题:

使用Firebase云功能、消息传递、Firestore制作自动通知

齐英耀
2023-03-14

我一直试图用. onUpdate()触发器推送通知,但它不起作用。我不知道出了什么问题,因为我在文档上找到的任何东西都毫无用处,这是我第一次和ode.js.一起工作

当任何产品使用Firebase Cloud Functions(在Firebase实时数据库中)更新时,我想通知用户(使用Firebase消息传递),这是在提交订单之后,并且要求产品库存是

集合的结构如下:产品(集合)-

    //import firebase
const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.database.ref('/products/{product}')
.onUpdate((change, context) => {
        const prodName = context.data.child('name');
        const numProd = context.data.child('stock');
        if(numProd<=5){
        const payload = {
          notification: {
          title: 'Low stock!',
          body: `Product ${prodName} is running out.`
        }
      }

      const registrationToken = 'token'; 
     return admin.messaging().sendToDevice(registrationToken,payload)
    .then(function(response){
         console.log('Notification sent successfully:',response);
         return 1;
    })
    .catch(function(error){
         console.log('Notification sent failed:',error);
          });
        }    
});

共有1个答案

施子民
2023-03-14

显然,您将Firebase的两个数据库服务:Firestore和实时数据库混为一谈。

事实上,您指出您的数据是在集合中组织的(“集合的结构是这样的:产品(集合)-

但是您的后台触发器与实时数据库触发器相对应,请参阅https://firebase.google.com/docs/functions/database-events.

如果将这两个数据库服务混用的假设是正确的,则需要为Firestore使用后台触发器,请参阅https://firebase.google.com/docs/functions/firestore-events,特别是onUpdate()one,如下所示:

exports.updateUser = functions.firestore
    .document('/products/{productId}')
    .onUpdate((change, context) => {
      // Get an object representing the document
      const newValue = change.after.data();

      const prodName = newValue.name;
      const numProd = newValue.stock;

      // ...
    });

请注意,当numProd时,您似乎没有正确处理该情况

观看Firebase视频系列中关于"JavaScript Promises"的3个视频也是一个好主意:https://firebase.google.com/docs/functions/video-series/.

 类似资料:
  • 我正在尝试使用FireBase云消息传递。我正在接收令牌,但它没有从控制台收到任何通知。这是我的舱单: 我的代码与示例中的代码几乎相同: 我在这里检查了一个问题,Firebase云消息通知未被设备接收,但仍然无法工作。

  • 添加了从FCM到Facebook的API密钥 但从FB控制台“推送活动设置验证”到有效的“您的设备令牌”-不工作 错误: 无法验证用于发送消息的发件人帐户。这可能是由于无效的项目号作为密钥发送,或者密钥是有效的,但禁用了FCM服务,或者我们的服务器没有在服务器密钥IP中列入白名单。 是什么导致了这些问题?有什么日志我可以看吗?

  • 我必须在SpringJava中为多层架构制作一个RESTAPI,其中需要为Firebase云消息传递(FCM)构建DAO、控制器和服务管理器,以向android应用程序发送推送通知消息,但我无法在Java中配置服务器以向设备发送通知。我怎么能?

  • 我正在使用Firebase消息向iPhone应用程序的用户发送通知。为了不在客户端公开应用程序的消息服务器密钥,我正在使用Firebase的云功能向特定主题发送通知。在此之前,我在应用程序的客户端执行此操作,并能够通过制作以下格式的JSON来设置消息的优先级: 现在在我的云函数中,我试图制作一个相同通用格式的有效载荷,但是一直遇到错误: 以下是我的有效负载格式化和发送: 有谁知道我该如何设定优先级

  • 我正在尝试让Firebase云消息传递正常工作。我现在只是想做个测试。我所做的就是这篇文章的全部内容: https://firebase.google.com/docs/cloud-messaging/js/client?authuser=0#retrieve-the-current-registration-token 然后在最后你会看到这个: 然后我复制这个,并通过访问Firebase(网站)

  • 我试图将Firebase云消息集成到我的应用程序中,以便向用户发送通知。当试图启动应用程序,我得到以下错误: 这在这里发生: 在FIRAuthm. 这是我的大多数应用委托的样子: 发生了什么,我如何修复这个错误? 我试着按照这里的指示去做。。。