我目前正在使用 Firebase Functions 在上传数据库时发送自动推送通知。它运行良好,我只是想知道如何从我的数据库中获取特定值,例如 PostTitle 并将其显示在上面,例如标题。
在Firebase中,我的数据库是/post/(postId(/PostTitle
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// database tree
exports.sendPushNotification = functions.database.ref('/posts/{id}').onWrite(event =>{
const payload = {
notification: {
title: 'This is the title.',
body: 'There is a new post available.',
badge: '0',
sound: 'default',
}
};
return admin.database().ref('fcmToken').once('value').then(allToken => {
if (allToken.val()){
const token = Object.keys(allToken.val());
console.log(`token? ${token}`);
return admin.messaging().sendToDevice(token, payload).then(response =>{
return null;
});
}
return null;
});
});
如果我正确理解您希望从触发云函数的节点获取PostTitle
,则以下内容应该可以解决问题:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// database tree
exports.sendPushNotification = functions.database.ref('/posts/{id}').onWrite(event =>{
const afterData = event.data.val();
const postTitle = afterData.PostTitle; //You get the value of PostTitle
const payload = {
notification: {
title: postTitle, //You then use this value in your payload
body: 'There is a new post available.',
badge: '0',
sound: 'default',
}
};
return admin.database().ref('fcmToken').once('value').then(allToken => {
if (allToken.val()){
const token = Object.keys(allToken.val());
console.log(`token? ${token}`);
return admin.messaging().sendToDevice(token, payload)
} else {
throw new Error('error message to adapt');
}
})
.catch(err => {
console.error('ERROR:', err);
return false;
});
});
请注意以下几点:
- 您正在使用云函数的旧语法,即版本 <= v0.9.1 之一。应迁移到新版本和语法,如下所述:https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database
- 我重新组织了您的承诺链,并在链的末尾添加了
catch()
。
我会使用...
var postTitle = event.data.child("PostTitle").val;
虽然可能检查,但它的标题甚至有一个价值
。在发送任何通知之前。