通知を送信するためにFirebaseクラウド機能を試しました。私のプロジェクト構造
これが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);
});
Node.jsにデプロイすると、上記のコードの構成が誤っており、FunctionのLOGに次のように表示されます。
「TypeError:未定義のプロパティ 'val'を読み取れません」。
実際に私がやろうとしていること:新しい子がリアルタイムデータベースに追加されたときに、タイトルと本文で通知ペイロードをトリガーするように、スナップショットのロードからindex.jsに情報を抽出しようとしています。
Androidでは、新しいレコードが追加されたときにリッスンするために、子リスナーを使用します
FirebaseDatabase.getInstance().getReference().child("messages")
OnChildAdded(.....){
if (dataSnapshot != null) {
MessageModel messageModel = dataSnapshot.getValue(MessageModel.class);
if (messageModel != null) {
// do whatever
}
}
しかし、index.jsでは、それを解析できませんでした。私のデータベース構造に応じてindex.jsを修正する方法についてのちょっとしたガイダンスは大歓迎です。 PS- JSでコーディングを行ったことはありません。もっとコンテキストが必要な場合は、喜んで提供します。
これを変更:
exports.pushNotification = functions.database.ref('/messages').onWrite( event => {
const message = event.data.val();
const user = event.data.val();
});
これに:
exports.pushNotification = functions.database.ref('/messages').onWrite(( change,context) => {
const message = change.after.val();
});
これを確認してください:
https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database
クラウド関数が変更され、onWrite
に2つのパラメーターchange
およびcontext
が追加されました
change
には2つのプロパティbefore
およびafter
があり、これらはそれぞれDataSnapshot
であり、ここにリストされたメソッドを持ちます。
https://firebase.google.com/docs/reference/admin/node/admin.database.DataSnapshot