通过Firebase Cloud功能,消息传递,Firestore进行自动通知



我一直在尝试使用.onupdate((触发器推动通知,但它不起作用。我不确定有什么问题,因为我在文档上发现的任何东西几乎没有用,这是我第一次使用node.js。

我想使用Firebase Cloud函数更新任何产品(在Firebase实时数据库中(时通知用户(使用Firebase消息传递(,该功能是在提交订单后,并且要求是产品库存是< = 5。

该系列的结构就是这样:产品(收集( -> {propartid}(document( ->属性:{名称,条形码,价格,股票,出售}

    //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);
          });
        }    
});

显然您正在混合两个Firebase的数据库服务:Firestore和实时数据库。

事实上,您指出您的数据是在 collections 中组织的("收藏的结构是这样的:product意味着您正在使用firestore(实时数据库没有集合(。

但是您的背景触发器对应于实时数据库触发器,请参见https://firebase.google.com/docs/functions/database-events。

如果您要混合两个数据库服务的假设是正确的,则需要使用firestore的背景触发器,请参见https://firebase.google.com/docs/docs/functions/firestore-events,尤其是onUpdate()一个,如下:

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 > 5时似乎没有正确处理这种情况。您可能会丢下错误,或者只是做return null;

观看Firebase视频系列中的" JavaScript承诺"的3个视频也是一个好主意:/div>

相关内容

  • 没有找到相关文章

最新更新