1

私は、特定のユーザにプッシュ通知を送信するクラウド機能を作ろうとしています。Firebaseのクラウド機能を使用してプッシュ通知を送信

ユーザーはいくつかの変更を行い、データはfirebaseデータベースのノードの下で追加/更新されます(ノードはユーザーIDを表します)。ここで私は、ユーザーにプッシュ通知を送信する関数をトリガーしたい。

私は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

あなたのref: 'admin.database()。ref(\' Users/$ {uuid} \ ')'に 'uuid'の値を代入するためにバックティックを使用してください。また、 'on()'の代わりに 'once()'を使うべきです。 '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

私はこの仕事をすることができました。私のために働いたCloud Functionsを使って通知を送るコードはここにあります。

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

ファイアベースのクラウド機能を使用してトピックにメッセージを送信する方法はありますか? –

関連する問題