В моей базе данных Firestore
я храню DocumentReferences
для пользователей, так что я всегда использую самые последние пользовательские данные, такие как имя пользователя, изображения профиля и токены авторизации.
Я также внедряю Cloud Functions
для прослушивания триггеров базы данных, чтобы я мог отправлять уведомления конкретным пользователям об активности, связанной с их сообщениями.
Здесь я сталкиваюсь с проблемами, потому что я не знаю, как правильно использовать сохраненный ссылочный объект внутри функции Node.js
, когда я получаю к нему доступ, как и ко всей другой информации базы данных.
Ниже приведен мой код функции:
exports.countNameChanges = functions.firestore
.document('posts/{postId}')
.onUpdate((change, context) => {
// Retrieve the current and previous value
const data = change.after.data();
const previousData = change.before.data();
var registrationToken = '';
var notification = '';
var postTitle = data.statement;
var userRef = data.userRef; //This is my `DocumentReference` object
if (data.interactionCount > previousData.interactionCount && data.postTypeId == 2131165321) notification = 'You recieved a new comment!';
if (data.interactionCount > previousData.interactionCount && data.postTypeId == 2131165335) notification = 'You recieved a new vote!';
if (data.likes > previousData.likes) notification = 'You have a new post like!' ;
if (data.dislikes > previousData.dislikes) notification = 'You have a new post dislike!' ;
admin.firestore()
.doc(userRef) //This is my `DocumentReference` object
.get()
.then(doc => {
registrationToken = doc.data().token;
var payload = {
data: {
title: postTitle,
body: notification
},
token: registrationToken
};
admin.messaging().send(payload)
.then((response) => {
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
})
});
});
});
Журнал моей функции
![enter image description here](https://i.stack.imgur.com/SaVU5.jpg)
Я бы предположил, что с объектом DocumentReference
будет легко работать
внутри Cloud Function
, поскольку объект поддерживается для непосредственного хранения в Firestore
, но я не могу понять это.