Firebase - 两个离线设备修改相同的数据和更改顺序

use*_*061 5 synchronization offline wpfdatagrid firebase firebase-realtime-database

我有一个 Android 应用程序,可以跟踪某些物品及其数量。

我需要的是一种让用户在离线时以正确的同步顺序修改多个设备上的数据的方法。

我不知道如何最好地解释它,所以我举个例子:

  1. 设备 A 将物品的数量更改为 5。
  2. 设备 B 将其更改为 3。
  3. 设备 B 上线,将服务器上的数据更改为 3。
  4. 设备 A 上线并用 5 替换该数据,这是一个较旧的更改,不应进行。

这种情况是否可以在 Firebase 中本地防止,或者我应该,例如,我自己在项目上使用时间戳,并且只有在更新时才替换它?

谢谢。

use*_*061 5

将时间戳字段添加到数据库中的每个项目并在 firebase 中编写安全规则似乎有效。
需要考虑的事情是,离线时,我能获得的唯一时间戳来自设备,而不是来自服务器,因此有时会导致我们不想要的数据被覆盖。对于这个项目来说,它仍然足够好。
以下是检查这些时间戳所需的数据库规则:

"$name" : {
         ".write": "!data.exists() || (newData.child('timestamp').isNumber() && data.child('timestamp').val() <= newData.child('timestamp').val())"
      }
Run Code Online (Sandbox Code Playgroud)

它说:“如果没有数据,您可以写入,或者存储的数据具有新请求的旧时间戳”
制作这些时要记住的重要一点是,父节点会覆盖子节点中的规则。这意味着任何写身份验证也应该在这个级别上完成。