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

标签 firebase synchronization firebase-realtime-database wpfdatagrid offline

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

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

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

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

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

    谢谢。

    最佳答案

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

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

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

    关于Firebase - 两个离线设备修改相同的数据和更改顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960749/

    相关文章:

    firebase - 在firebase中存储富文本

    java - 使用 System.out.print 按顺序打印 RED BLUE GREEN

    javascript - Node js FS accessSync设置全局变量路径失败

    javascript - 如果注册则登录用户(Firebase facebook/google auth)

    java - 如何从 Firestore 检索 Fragment 中的数据

    typescript - Cloud Functions Firebase CLI 预部署错误( typescript )

    java - 为什么我将运行标志设置为 false 后线程仍继续运行?

    java - 为什么我的 ListView 在按下按钮时重复项目?

    firebase - 如何将 Firebase 数据库锁定到特定(电子邮件)域中的任何用户?

    javascript - 为什么在 createUserWithEmailAndPassword 之后获取 uid 时 Firebase 返回未定义