1

我正在嘗試製作向給定用戶發送推送通知的雲端功能。使用雲端功能發送推送通知用於Firebase

用戶進行一些更改,並在Firebase數據庫中的節點下添加/更新數據(該節點表示用戶標識)。在這裏我想觸發一個向用戶發送推送通知的函數。

我對DB中的用戶具有以下結構。

Users 

- UID 
- - email 
- - token 

- UID 
- - email 
- - token 

直到現在我有這樣的功能:

exports.sendNewTripNotification = functions.database.ref('/{uid}/shared_trips/').onWrite(event=>{ 
const uuid = event.params.uid; 

console.log('User to send notification', uuid); 

var ref = admin.database().ref('Users/{uuid}'); 
ref.on("value", function(snapshot){ 
     console.log("Val = " + snapshot.val()); 
     }, 
    function (errorObject) { 
     console.log("The read failed: " + errorObject.code); 
}); 

當我得到的回調,則snapshot.val()返回null。任何想法如何解決這個問題?也許以後如何發送推送通知?

+0

uuid的console.log是否顯示正確的值? –

+0

是的,uuid是正確的。 –

+0

使用back-ticks在你的ref:'admin.database()。ref(\'Users/$ {uuid} \')'中替換'uuid'的值。你也應該使用'once()'而不是'on()'。 'on()'離開監聽器;不是你想要的雲功能。 –

回答

0

返回此函數調用。

return ref.on("value", function(snapshot){ 
     console.log("Val = " + snapshot.val()); 
     }, 
    function (errorObject) { 
     console.log("The read failed: " + errorObject.code); 
}); 

這將使雲功能保持活動狀態,直到請求完成。瞭解更多關於返回承諾的信息,請參閱Doug在評論中給出的鏈接。

+0

謝謝大家的回答。結合他們幫助我實現我想要的! –

+0

我的榮幸,請接受答案,如果它幫助你的問題。 @TudorLozba –

2

我設法使這項工作。以下是使用適用於我的雲功能發送通知的代碼。

exports.sendNewTripNotification = functions.database.ref('/{uid}/shared_trips/').onWrite(event=>{ 
const uuid = event.params.uid; 

console.log('User to send notification', uuid); 

var ref = admin.database().ref(`Users/${uuid}/token`); 
return ref.once("value", function(snapshot){ 

    const payload = { 
      notification: { 
      title: 'You have been invited to a trip.', 
      body: 'Tap here to check it out!' 
      } 
     }; 

     admin.messaging().sendToDevice(snapshot.val(), payload) 

     }, 
    function (errorObject) { 
     console.log("The read failed: " + errorObject.code); 
}); 
}) 
+0

是否有任何方式使用Firebase雲功能將消息發送到主題? –

相關問題