Firebase-在从缓存发送到服务器之前更改数据

问题描述

我将Firebase用于我正在使用Swift开发的聊天应用程序。我启用了离线持久性,因此通常每个查询都首先被缓存,然后发送到服务器。我想做的是,在发送消息时,首先将消息状态设置为“正在发送”,将时间设置为当前时间,但是当数据发送到服务器时,将状态更改为“已发送”,并将时间更改为数据发送的时间(因为连接速度慢或根本没有连接可能要花几分钟的时间)。使用Firebase是否可以?如果没有,有什么解决方法?预先感谢!

解决方法

在Cloud Firestore中,您可以通过以下方式检测写入操作的状态:

  1. 将完成侦听器附加到写操作
  2. 查看文档快照的元数据

首先,请查看文档中的writing a document示例。在那里的完成侦听器使您能够检测到写操作何时完成。

但是,如果要在UI中显示每个文档,请显示它是否有尚未提交的未决写在服务器上,那么最好查看每个文档快照的元数据。如events for local changes中的文档所述。待更改期间,snapshot.getMetadata().hasPendingWrites()将返回true。然后,将更改提交到服务器后,它将再次返回false