4 votes

Les fonctions cloud Firebase sont appelées plusieurs fois

Bonjour, ma fonction cloud Firebase est appelée plusieurs fois lorsque je ne vérifie pas si previous.exists(). Je reçois plusieurs notifications push.

if (!event.data.exists()){
    return;
}
if (event.data.previous.exists()){
    return;
}

Mais lorsque je vérifie, je ne reçois pas de notification push. Voici le code qui ne fonctionne pas: Que dois-je changer?

exports.sendShoppingListInvitationNotification = functions.database.ref('/invites/{id}/').onWrite(event => {
//obtenir l'instantané des données écrites
const snapshot = event.data;  

if (!event.data.exists()){
    return;
}
if (event.data.previous.exists()){
    return;
}

    //obtenir les valeurs de l'instantané
    console.log(snapshot.key);
const receiptToken = snapshot.child('receiptFcmToken').val();
const senderName = snapshot.child('senderNickname').val();
const inviteMessage = snapshot.child('inviteMessage').val();
const senderImage = snapshot.child('senderProfileImageURL').val();

//créer une notification
const payload = {
    notification: {
        title: `Invitation de ${senderName}`,
        body:  `${inviteMessage}`,
        icon: `${senderImage}`,
        badge: '1',
        sound: 'default',
    }
};               

//envoyer une notification au token des amis   
return admin.messaging().sendToDevice(receiptToken, payload).then(response => { 
     console.log("Message envoyé avec succès :", response);
 }).catch((err) => {
    console.log(err);
});   
});

Je ne reçois pas de message d'erreur sur la console cloud.

Ceci est la structure Firebase : Entrez la description de l'image ici

7voto

Jen Person Points 5101

Il semble que cela ne devrait pas être appelé plusieurs fois à moins que vous ne fassiez plusieurs écritures à cet emplacement. Essayez d'utiliser .onCreate au lieu de .onWrite si vous ne voulez envoyer une notification que lors du premier enregistrement dans le chemin. Alors vous n'aurez pas besoin de vérifier les données précédentes. Consultez la documentation ici qui décrit les différents déclencheurs de la base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X