【发布时间】:2019-08-27 06:43:26
【问题描述】:
我正在构建一个即时通讯应用程序,类似于 WhatsApp,我需要显示消息的发送状态:正在发送,已发送;如果是 Firebase 缓存,由于处于离线状态,则发送,如果消息在在线数据库上,则发送。
有没有办法判断特定文档是否已上传到数据库?
我目前有一个实时更新侦听器,侦听 firestore 中的消息集合,当缓存或数据库更新时触发。它可以判断更新的来源,但会返回所有消息并且不指定任何单独的文档。
这是侦听器的完成块的 sn-p。
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")")
}
}
当缓存或数据库更新时回调运行,但如果一个更新,那么另一个更新然后文档更改被清空。意思是我不知道发生了什么。
任何建议都将不胜感激,在此先感谢。
【问题讨论】:
标签: ios swift firebase google-cloud-firestore