0

リクエストが送信されたときに起動するフレンドリクエスト機能がありますが、ユーザがリクエストを拒否すると、onWriteが再び起動されます。 firebase dbのリクエストノードが削除された場合、私は約束を返すことができます。FirebaseデータベースonWriteのクラウド機能は、リクエストが削除された後に2回トリガされます。

exports.sendFreindRequestNotification = functions.database.ref('/users/{pushId}') 
.onWrite(event => { 
    let friendRequest = event.data.current.val(); 
    let senderUid = friendRequest.requests; 
    let receiverUid = friendRequest.uid; 
    let promises = []; 

    for (key in senderUid) { 
     console.log('my Key', key); 
    } 

    //Some kind of logic to return the the promise if the friend request value is removed from firebase db to avoid firing again. 
    if (receiverUid == key) { 
     return Promise.all(promises); 
    } 

    let getInstanceIdPromise = admin.database().ref(`/users/${receiverUid}/pushToken`).once('value'); 
    let getSenderUidPromise = admin.auth().getUser(key); 

    return Promise.all([getInstanceIdPromise, getSenderUidPromise]).then(results => { 
     let instanceId = results[0].val(); 
     let sender = results[1]; 
     console.log('notifying ' + receiverUid + ' about ' + friendRequest.displayName + ' from ' + key); 
     console.log('Sender ', sender); 

     let payload = { 
      notification: { 
       body: 'You have a new friend request from ' + sender.email, 
       sound: 'default' 
      }, 
      'data': { 
       'notificationType': "friendRequest" 
      } 
     }; 

     admin.messaging().sendToDevice(instanceId, payload) 
      .then(function (response) { 
       console.log("Successfully sent message:", response); 
      }) 
      .catch(function (error) { 
       console.log("Error sending message:", error); 
      }); 
    }); 
}); 
+0

エラーを再現するのに必要な最低限のコードを投稿してください。 – Zack

答えて

0

リクエストが作成されたときにクラウド機能を有効にしたいと思うようです。あなたはonCreateのために登録することにより、それを行うことができます。

exports.sendFreindRequestNotification = functions.database.ref('/users/{pushId}') 
.onCreate(event => { 

詳細についてはdocumentation on setting event handlersを参照してください。

関連する問題