Я создаю приложение для обмена мгновенными сообщениями, похожее на WhatsApp, и мне нужно отобразить статус отправки сообщения: Отправка, Отправлено; отправка выполняется в том случае, если это кэш Firebase, поскольку он не подключен к сети, и отправляется, если сообщение находится в онлайн-базе данных.
Есть ли способ узнать, был ли конкретный документ загружен в базу данных?
В настоящее время у меня есть прослушиватель обновлений в режиме реального времени, который прослушивает коллекцию сообщений в firestore, которая срабатывает при обновлении кеша или базы данных. Он может сказать, откуда пришло обновление, но возвращает все сообщения и не указывает никаких отдельных документов.
Вот фрагмент блока завершения для слушателя.
let source = snapshot.metadata.isFromCache ? "local cache" : "server"
print ("metadata: data fetched from DB: \(source)")
for diff in snapshot.documentChanges {
print("diffData: \(diff.type.rawValue)")
print("messageId: \(diff.document.documentID)")
switch diff.type {
case .added:
print("added")
case .removed:
print("removed")
case .modified:
print("modified")
}
}
var messages: [ChatEntry] = []
let deletedIds = [String]()
let permanentlyDeletedIds = [String]()
for document in snapshot.documents {
if document.exists {
let message = ChatEntry(fromSnapshot: document)
print("MessageId: \(message?.id ?? "null")")
print("messageText: \(message?.message ?? "Null")")
}
}
Обратный вызов выполняется, когда обновляется кеш или БД, но если один обновляется, то другой обновляется, тогда изменения документа очищаются. это означает, что я не могу сказать, что случилось.
Любой совет будет оценен, заранее спасибо.