Чтобы получить значение sender_fullname
, вы должны сделать то же самое, что и для DeviceToken
!
Метод once()
возвращает обещание, которое разрешается с помощью DataSnapshot
, поэтому вам нужно использовать метод then()
, чтобы получить DataSnapshot
, а затем использовать метод val()
.
Таким образом, следующее должно выполнить (не проверено):
exports.sendNotification = functions.database.ref('/notifications/{receiver_user_id}/{notification_key}')
.onWrite((event, context) => {
const receiver_user_id = context.params.receiver_user_id;
const notification_key = context.params.notification_key;
console.log('We have a notification to send to : ', receiver_user_id);
// Grab the current value of what was written to the Realtime Database.
const snapshot = event.after.val();
console.log('Uppercasing', context.params.notification_key, snapshot);
console.log('original value : ', snapshot);
if (!event.after.val()) {
console.log('A notification has been deleted: ', notification_key);
return null;
}
let sender_fullname;
return admin.database().ref(`/notifications/${receiver_user_id}/${notification_key}/notifying_user_fullname`).once('value')
.then(dataSnapshot => {
sender_fullname = dataSnapshot.val();
return admin.database().ref(`/tokens/${receiver_user_id}/device_token`).once('value');
})
.then(dataSnapshot => {
const token_id = dataSnapshot.val();
console.log('token id value : ', token_id);
const payload = {
notification: {
title: sender_fullname,
body: "You have a new message!",
icon: "default"
}
};
return admin.messaging().sendToDevice(token_id, payload)
})
.then(() => {
console.log('Message has been sent');
return null; // <-- Note the return null here, to indicate to the Cloud Functions platform that the CF is completed
})
.catch(error => {
console.log(error);
return null;
})
});
Обратите внимание, как мы объединяем различные обещания, возвращаемые асинхронными методами, для возврата в Облако Функция, Обещание, которая будет указывать платформе, что работа Облачной функции завершена.
Я бы посоветовал вам посмотреть 3 видео о "JavaScript Обещаниях" из серии Firebase что объясняет важность этого пункта.