1

每當在實時數據庫中將Orderstatus節點更改爲1時,我正嘗試向Customers發送通知。使用Cloud Functions更改Firebase節點時發送FCM?

但是,只要Orders節點發生更改,就會發送推送通知。

我可以從快照&驗證Orderstatus的值,只有在狀態爲1時才發送通知。但是我想在Orderstatus1時觸發雲端功能。

如果我將路徑更改爲/S01/Orders/{pushId}/orderStatus。然後,我不能讓customerEmail

請指導我來處理這一個最好的辦法....

enter image description here

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

     }); 
    }); 

回答

1

目前,你不能根據更改的數據過濾功能的觸發器。它會觸發任何時間任何的參考路徑下的數據變化。如果數據以您想要執行的方式更改,您必須在函數內部檢查。

或者,如果您想更深入地聽「orderstatus」,則可以隨時在函數中再次查詢數據庫以獲取需要使用的其他數據。 event.data.ref包含一個Reference到觸發您的函數的路徑,您可以使用它來導航和查詢數據庫以查找您要查找的其他數據。一定要研究sample code,它與你正在做的事情有很多相似之處。

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 
    } 
}); 
相關問題