0

Bonjour, ma fonction cloud Firebase est appelée plusieurs fois lorsque je ne la mets pas en vérifications pour previous.exists(). Je reçois plusieurs notifications push.Fonctions Firebase Cloud appelées plusieurs fois

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

Mais quand je vérifie cela, 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 => { 
//get the snapshot of the written data 
const snapshot = event.data; 

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

    //get snapshot values 
    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(); 


//create Notification 
const payload = { 
    notification: { 
     title: `Invitation from ${senderName}`, 
     body: `${inviteMessage}`, 
     icon: `${senderImage}`, 
     badge: '1', 
     sound: 'default', 
    } 
};    

//send a notification to firends token 
return admin.messaging().sendToDevice(receiptToken, payload).then(response => { 
    console.log("Successfully sent message:", response); 
}).catch((err) => { 
    console.log(err); 
}); 
}); 

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

Ceci est la structure firebase: enter image description here

Répondre

5

On dirait que ce ne devrait pas être appelé plusieurs fois à moins que vous faites plusieurs écritures à cet endroit. Essayez d'utiliser .onCreate au lieu de .onWrite si vous souhaitez uniquement envoyer une notification lors de la première écriture sur le chemin. Ensuite, vous n'aurez pas besoin de cette vérification pour les données précédentes. Voir la documentation here qui décrit les différents déclencheurs de base de données.

+0

bonne idée. Je viens de regarder votre tutoriel. C'est un honneur de recevoir réponse par un expert. –

+0

Triste Je ne reçois pas mes données maintenant. La fonction onCreate délivre null pour le ticketFcmToken. Erreur: Les jetons d'enregistrement fournis à sendToDevice() doivent être une chaîne non vide ou un tableau non vide. –

+0

Je pense que j'ai une idée quand j'appelle onEcrit ma fonction s'exécute sur chaque nœud enfant quand il est ajouté. L'onCreate délivre le noeud vide juste quand il est créé et avant que les enfants ajoutés je pense. Mais comment je reçois les valeurs de l'enfant. Je suis un peu confus. –