Получение следующей ошибки:
"Невозможно прочитать свойство 'userName' из неопределенного в Promise.all.then.result"
Также возникает ошибка
"Поведение для объектов Date, хранящихся в Firestore, изменится, и ваше приложение может сломаться. Чтобы скрыть это предупреждение и убедиться, что ваше приложение не сломалось, необходимо добавить следующий код в свое приложение перед вызовом любогодругие методы Cloud Firestore:
const firestore = new Firestore();
const settings = {/* your settings... */ timestampsInSnapshots: true};
firestore.settings(settings);
С этим изменением временные метки, хранящиеся в Cloud Firestore, будут считываться как объекты Firebase Timestamp, а не как объекты Date, поэтому вам также потребуется обновить код, ожидающий, что Dateвместо этого ожидайте отметку времени. Например:
// Old:
const date = snapshot.get('created_at');
// New:
const timestamp = snapshot.get('created_at');
const date = timestamp.toDate();
Пожалуйста, проверяйте все существующие использования даты при включении нового поведения. В будущем выпуске поведение изменится на новое поведение, так что если вы этого не сделаетеследуйте этим шагам, ваше приложение может сломаться ".
Однако в моем андроид-проекте место, где я определил переменную «Date», у меня помещено «@ServerTimestamp» сверху.
Благодарю парней за помощь.
Код:
/*eslint-disable */
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotification = functions.firestore.document('notifications/{userEmail}/userNotifications/{notificationId}').onWrite((change, context) => {
const userEmail = context.params.userEmail;
const notificationId = context.params.notificationId;
return admin.firestore().collection("notifications").doc(userEmail).collection("userNotifications").doc(notificationId).get().then(queryResult => {
const senderUserEmail = queryResult.data().senderUserEmail;
const notificationMessage = queryResult.data().notificationMessage;
const fromUser = admin.firestore().collection("users").doc(senderUserEmail).get();
const toUser = admin.firestore().collection("users").doc(userEmail).get();
return Promise.all([fromUser, toUser]).then(result => {
const fromUserName = result[0].data().userName;
const toUserName = result[1].data().userName;
const tokenId = result[1].data().tokenId;
const notificationContent = {
notification: {
title: fromUserName + " is shopping",
body: notificationMessage,
icon: "default"
}
};
return admin.messaging().sendToDevice(tokenId, notificationContent).then(result => {
console.log("Notification sent!");
//admin.firestore().collection("notifications").doc(userEmail).collection("userNotifications").doc(notificationId).delete();
});
});
});
});