J'ai essayé la fonction cloud de Firebase pour envoyer une notification. Ma structure de projet
et ceci est le index.js,
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.pushNotification = functions.database.ref('/messages').onWrite( event => {
console.log('Push notification event triggered');
const message = event.data.val();
const user = event.data.val();
console.log(message);
console.log(user);
const topic = "myTopic";
const payload = {
"data": {
"title": "New Message from " + user,
"detail":message,
}
};
return admin.messaging().sendToTopic(topic, payload);
});
Le code ci-dessus est mal configuré, lorsque je déploie dans Node.js, LOG in Function affiche:
"TypeError: Impossible de lire la propriété 'val' de non défini".
En fait, j'essaie de faire: j'essaie d'extraire des informations de la charge d'instantanés dans ce index.js afin que lorsqu'un nouvel enfant soit ajouté à la base de données en temps réel, il devrait déclencher une charge utile de notification avec un titre et un corps.
Dans Android, j'utilise un écouteur enfant, pour écouter lorsqu'un nouvel enregistrement est ajouté
FirebaseDatabase.getInstance().getReference().child("messages")
OnChildAdded(.....){
if (dataSnapshot != null) {
MessageModel messageModel = dataSnapshot.getValue(MessageModel.class);
if (messageModel != null) {
// do whatever
}
}
Mais dans index.js, je ne pouvais pas analyser cela. Un petit conseil sur la façon de fixer index.js en fonction de la structure de ma base de données serait extrêmement apprécié. PS- Je n'ai jamais fait de codage en JS Si vous voulez plus de contexte, je serais ravi de vous le fournir.
Change ça:
exports.pushNotification = functions.database.ref('/messages').onWrite( event => {
const message = event.data.val();
const user = event.data.val();
});
pour ça:
exports.pushNotification = functions.database.ref('/messages').onWrite(( change,context) => {
const message = change.after.val();
});
S'il te plaît, vérifie cela:
https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database
Les fonctions du cloud ont été modifiées et maintenant onWrite
a deux paramètres change
et context
change
a deux propriétés before
et after
et chacune d'elles est un DataSnapshot
avec les méthodes listées ici:
https://firebase.google.com/docs/reference/admin/node/admin.database.DataSnapshot