从Firebase的常见问题解答:
如果丢失网络连接,我的应用会发生什么情况?
Firebase会立即透明地重新连接到Firebase服务器 你恢复连接。与此同时,所有Firebase操作都已完成 您的应用在本地将立即触发事件(...)。一旦 重新建立连接,您将收到相应的一组 事件,以便您的客户端“赶上”当前的服务器状态
如果我离线并继续修改我的本地数据,然后重新上线并且其他客户端执行了不同的更改,会发生什么?哪一个最终会被保存?
如果服务器上的数据被覆盖,是否意味着旧数据可以替换较新的数据?
如果保留在线添加的新数据,我是否知道离线时提交的数据已被丢弃?
答案 0 :(得分:6)
当您的客户重新上线,在离线期间和写入数据后,这些更改的行为将取决于您用来编写它们的方法:
set()
,setWithPriority()
,remove()
和push()
方法是最后写入获胜。这意味着如果离线客户端A在t = 0进行更改,并且在线客户端B在t = 10时进行更改,则脱机客户端A的更改将在重新连接时覆盖客户端B的更改。请注意,这特别适用于所做的更改(即设置/a/b/c
到1
),而不是整个Firebase。transaction()
方法专门用于处理冲突。当离线客户端A重新连接时,您的交易更新功能将重新运行并将新更改应用于您的Firebase数据。在大多数应用程序中,用户将数据附加到列表或修改单个用户状态,但不修改同一条数据。如果多个用户正在修改同一条数据,则无论您是否处于离线状态,都需要transaction()
使用。
一般来说,Firebase的构建是为了自动处理脱机和联机,因此您不必编写应用程序代码来检测和处理该情况。