0

ファイアベース用のクラウド機能で複数のプッシュ通知を実行しようとすると、成功しません。Firebase用のクラウド機能複数のユーザにプッシュを送信

は私が

  • message_receipts
    • -KtvyTN3nbVKoFjHdpJg
    • hHhs5Aco38X1W8EhaaxrwsQDXwy1ノードに私のメッセージの領収書を保管: "領収書" を
    • nI25FjUnBfQiCWzdCUIAe8CWTPQ2: "領収書"
私は雲の機能に以下しようとプッシュ通知送信するには

//*********************************************************************************************************** */ 
//handle lsit item added by shared user 
if (String(msgData.messageType) == 'ListItemAddedBySharedUser') { 

    return admin.database().ref("message_receipts").child(event.params.messageID).once('value').then(receipts => { 

     receipts.forEach(function (receipt) { 

      //Send push to receipt 
      return admin.database().ref('/users/' + receipt.key).once('value').then(usnap => { 

       //Send push to users fcmToken 
       const userSnap = usnap.val() 
       console.log('sending Push to ' + userSnap.fcmToken) 


       //create Notification Payload 
       var payload = { 
        notification: { 
         title: msgData.title, 
         body: msgData.message, 
         badge: '1', 
         sound: 'default', 
         sbID: String(event.data.key), 
         senderID: msgData.senderID, 
         listID: msgData.listID, 
         receiptID: receipt.key, 
         notificationType: String(msgData.messageType), 
        } 
       }; 

       return admin.messaging().sendToDevice(userSnap.fcmToken, payload).then(response => { 

        console.log("Successfully sent invite message:", response) 
        console.log(response.results[0].error) 

       }).catch((err) => { console.log("Error sending Push", err) }) 

      }) 

     }) 

    }) 
} //*********************************************************************************************************** */ 

を私が得るすべては、通知が送信されるものです。 私は、Javaスクリプトとクラウド機能には非常に新しいです。 すべてのユーザーに通知するにはどうすればよいですか?

+0

こんにちは、 完成したソリューションを投稿してもいいですか?それを見るのが大好きです。 – Gugulethu

答えて

0

あなたが取っているすべての非同期アクションを集約する必要があります。ここでは、メッセージ受信確認でforEachを実行していますが、1つの約束を返しています。これは、彼らがすべて完了するまで待機します単一Promise.all呼び出し、に未払いの通知の全てを集約します

var promises = []; 
receipts.forEach(function (receipt) { 
    //Send push to receipt 
    promises.push(admin.database().ref('/users/' + receipt.key).once('value').then(usnap => { 
     /* ... */ 
    })) 
}) 

return Promise.all(promises); 

:ような何かを試してみてください。

+0

偉大な@Michelブライあなたは私の問題を解決し、私は知識を得ました。ありがとうございました –

関連する問題