每当Customers
节点在实时数据库中更改为Orderstatus
时,我都会尝试向1
发送通知。
但只要Orders
节点发生变化,就会发送推送通知。
我可以从快照&中验证Orderstatus
的值。仅在状态为1
时发送通知。但我希望在Orderstatus
为1
时触发云功能。
如果我将路径更改为/S01/Orders/{pushId}/orderStatus
。然后我无法获得customerEmail
请指导我处理这个问题的最佳方法....
CODE
var functions = require('firebase-functions');
var admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.shopperAlert = functions.database.ref('/S01/Orders/{pushId}')
.onWrite(event => {
var eventSnapshot = event.data;
var customerEmail = eventSnapshot.child("orderedBy").val();
console.log(customerEmail);
const getInstanceIdPromise = admin.database().ref('S01/Customers/' + customerEmail + '/Token/').once('value');
return Promise.all([getInstanceIdPromise]).then(results => {
const instanceId = results[0].val();
const payload = {
notification: {
title: "Hey",
body: "Your Order is on the Way!"
}
};
admin.messaging().sendToDevice(instanceId.FCM, payload)
.then(function (response) {
console.log("Successfully sent message:", response);
})
.catch(function (error) {
console.log("Error sending message:", error);
});
});
});
答案 0 :(得分:1)
目前,您无法根据更改的数据过滤函数的触发器。它将在参考路径更改下的任何时间触发任何数据。如果数据以您想要的方式发生变化,则必须检查函数内部。
或者,如果您想更深入地了解“orderstatus”,您可以随时在函数内再次查询数据库,以获取您需要使用的其他数据。 event.data.ref
包含触发您的函数的路径Reference,您可以使用它来导航和查询数据库以查找您正在查找的其他数据。一定要研究sample code,它与你正在做的事情有很多相似之处。
答案 1 :(得分:0)
试试这个
exports.shopperAlert = functions.database.ref('/S01/Orders/{pushId}')
.onWrite(event => {
const order = event.data.val();
const status = order.orderStatus;
if(status == 1){
// send notification
}else{
// do something
}
});