脱机时如何丢弃待处理的DocumentReference写入?

时间:2019-01-22 12:28:35

标签: java android firebase google-cloud-firestore

我正在使用Firebase Firestore文档在地图上发布用户的位置,以便他们彼此看到。当它们所有人都具有良好的连接性时,这种方法很好用,但是有时它们的移动设备无法连接到Firebase服务器,并且写入似乎已被缓存:每当它们恢复连接性时,所有待处理的位置写入都将批量发送。

对其他用户的影响是,他们看到一个人的位置停下来,过了一会儿他们才开始真正地快速移动,直到地图位置获得实际价值为止。这很烦人,而且浪费带宽。

我曾尝试禁用持久性缓存,但这无济于事(只有在Transmisor应用程序死亡时,它才有帮助,但前提是只要存在,位置将被缓存在内存中)。

也许问题是我不应该为此目的使用文档,并且还有另一个Firebase机制可以出于实时通信的目的而丢弃陈旧的写入数据?

1 个答案:

答案 0 :(得分:1)

将设备离线时执行的所有写操作排队,直到重新建立与Firebase服务器的连接为止。不幸的是,没有API可以帮助您控制哪些写入操作已排队,哪些未排队。

我能想到的最简单的解决方案是使用Firestore transactions,它目前不持久存储在磁盘上,因此在应用程序脱机时会丢失。

因此,不支持事务脱机使用,无法将其缓存或保存以供以后使用。这是因为事务绝对需要与服务器进行往返通信,以确保事务内的代码成功完成。因此,您只能在在线时使用交易,因为交易取决于网络。