J'ai créé un fichier Node.js pour envoyer des notifications à l'aide de FCM, j'ai téléchargé le fichier dans la section "Fonctions" de Firebase, il fonctionne correctement, quand il trouve un changement dans le base de données, il envoie une notification aux appareils.Notifications Firebase multiples avec Node.js
Le problème est qu'il envoie la même notification trop de fois (entre 3 et 10).
ceci est mon code Node.js:
var admin = require("firebase-admin");
var request = require('request');
const functions = require('firebase-functions');
var API_KEY = "<KEY>";
admin.initializeApp({
credential: admin.credential.cert({
projectId: "projectId",
clientEmail: "clientEmail",
privateKey: "privateKey"
}),
databaseURL: "https://database.firebaseio.com/"
});
exports.backendDeNotificaciones = functions.database.ref('/solicitudDeNotificaciones').onWrite(event => {
ref = admin.database().ref();
function EsperandoNotificaciones()
{
console.log("Esperando Notificaciones");
var requests = ref.child('solicitudDeNotificaciones');
requests.on('child_added', function(requestSnapshot)
{
var request = requestSnapshot.val();
enviarNotificacion(
request.username,
request.message,
function()
{
requestSnapshot.ref.remove();
});
}, function(error)
{
console.error(error);
});
};
function enviarNotificacion(username, message, onSuccess) {
request({
url: 'https://fcm.googleapis.com/fcm/send',
method: 'POST',
headers: {
'Content-Type' :' application/json',
'Authorization': 'key='+API_KEY
},
body: JSON.stringify({
notification: {
title: message
},
to : '/topics/TOPIC_NAME'
})
}, function(error, response, body) {
if (error) { console.error(error); }
else if (response.statusCode >= 400) {
console.error('Error de HTTP: '+response.statusCode+' — '+response.statusMessage);
}
else {
onSuccess();
console.log("Notificación Enviada :)");
}
});
}
EsperandoNotificaciones();
});
au lieu de tirer chaque fois qu'il ya un enfant ajouté, peut-être vous devez envoyer une fois par heure, de sorte que vous prenez un instantané de la collection toutes les heures puis de l'envoyer; ** ou peut-être que vous pourriez suivre (à qui et le nombre de fois) le message a été envoyé ** – Lamar