问题描述
我将Firebase用于我正在使用Swift开发的聊天应用程序。我启用了离线持久性,因此通常每个查询都首先被缓存,然后发送到服务器。我想做的是,在发送消息时,首先将消息状态设置为“正在发送”,将时间设置为当前时间,但是当数据发送到服务器时,将状态更改为“已发送”,并将时间更改为数据发送的时间(因为连接速度慢或根本没有连接可能要花几分钟的时间)。使用Firebase是否可以?如果没有,有什么解决方法?预先感谢!
解决方法
在Cloud Firestore中,您可以通过以下方式检测写入操作的状态:
- 将完成侦听器附加到写操作
- 查看文档快照的元数据
首先,请查看文档中的writing a document示例。在那里的完成侦听器使您能够检测到写操作何时完成。
但是,如果要在UI中显示每个文档,请显示它是否有尚未提交的未决写在服务器上,那么最好查看每个文档快照的元数据。如events for local changes中的文档所述。待更改期间,snapshot.getMetadata().hasPendingWrites()
将返回true。然后,将更改提交到服务器后,它将再次返回false
。