Я пытаюсь реализовать приложение для обмена сообщениями, используя Firebase Firestore и Firebase Cloud Functions.
По сути, сообщения чата хранятся в виде отдельных документов во вложенной коллекции.Сначала я реализовал это как непосредственное добавление документа от клиента и прослушивание коллекции и обновление клиентов, когда происходит изменение, но позже я решил переключиться на использование облачных функций, чтобы добавить некоторые функции, которые лучше выполнять на сервере.сторона (фильтрация и т. д.).
Итак, я создал функцию для отправки сообщений, которая создает документы от имени пользователей, когда пользователи вызывают функцию из приложения (т.е. нажимают кнопку отправки).
Функция сработала, и я смог отслеживать процессы через журналы.К сожалению, функции начали исчезать без ошибок, консоль сообщала, что функции выполняются успешно, и на выполнение обычно уходило менее секунды.
Я подозреваю, что это как-то связано с обещаниями, которые, вероятно, продолжают выполняться, но это тот же код, который работал, но не работал сегодня.
Если я попробую еще несколько раз,функции, кажется, снова работают.Нужно ли держать функции "в тепле"?Облачные функции недостаточно надежны для решения подобных задач?Когда я говорю своему пользователю, что сообщение отправлено, я должен иметь возможность подтвердить, что оно отправлено, и сообщить о нем пользователям, если оно не удалось.
Трудно отладить проблему, потому что не выдается никаких ошибок (даже не информационное сообщение, это как будто не произошло), он просто говорит, что функция успешно завершила выполнение и ничего не произошло.
Я что-то здесь упустил?Спасибо.
exports.sendMessage = functions.https.onCall((data, context) => {
if (context.auth.uid == undefined) {
console.warn("SEND MESSAGE: USER NOT SIGNED IN");
return;
}
console.log("Sending message:", data)
const matchId = data["matchId"];
const message = data["message"]
const uid = context.auth.uid
admin.firestore().collection(MatchingUsers).doc(matchId).collection(UserMessages).add({
type: "text",
from: uid,
message: message,
timestamp: admin.firestore.Timestamp.now()
}).then(result => {
console.log("Message sent")
}).catch(err => {
console.log("Error sending mesage:", err)
})
})