我正在构建一个即时通讯应用程序,类似于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")")
}
}
当缓存或数据库更新时,回调将运行,但如果其中一个更新,则另一个更新,则文档更改将被清空。这意味着我不知道发生了什么。
任何建议将不胜感激,提前致谢。
您可以在以下位置准确找到该信息:SnapshotMetadata https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/SnapshotMetadata of a QuerySnapshot
,其中有一个isFromCache财产 https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/SnapshotMetadata#isfromcache that:
如果快照是从缓存数据创建的而不是保证最新的服务器数据,则返回 YES。
你会想要监听元数据变化 https://firebase.google.com/docs/firestore/query-data/listen#events-metadata-changes数据同步到服务器后能够更新 UI。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)