【问题标题】:Firestore how to disable automatic sync with cloud database?Firestore如何禁用与云数据库的自动同步?
【发布时间】:2019-01-15 15:50:52
【问题描述】:

我注意到了这种行为:

  1. 断开设备与互联网的连接
  2. 离线时创建一些新文档
  3. 关闭应用然后
  4. 上线重新打开App
  5. 文档会自动与 firestore 同步(我失去了对 completeListener 的控制)

问题是我在 onCompleteListener 中的操作没有运行。 就像在这个 sn-p (做一些超级重要的事情) 中没有在所描述的场景中运行一样,当用户离线时也不会调用 OnFailureListener,所以我无法判断它是否正常。

FirebaseFirestore.getInstance().document(...).collection(...)
                    .set(message).addOnCompleteListener {
                     //do some super important stuff
                   }

我宁愿自己同步在这种情况下,所以我希望它失败并且不再重复。

如何禁用 firestore 的自动同步?,仅适用于这一种情况

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    所以我想问这个问题,不知何故 Firestore 交易找到了我。 所以为了解决这个问题,我使用了事务 (firestore / realtime dbs)

    客户端离线时事务会失败。

    那么它现在是如何工作的。

    我尝试运行交易。 A 如果失败,我将其存储到数据库中 B 如果成功,我会尝试将其从数据库中删除 并且在每次应用启动时,我都会运行同步服务(检查未同步的数据库并插入缺失)

    val OBJECT = ...
    val ref = FirebaseFirestore.getInstance().document(...).collection(...)
    
    FirebaseFirestore.getInstance().runTransaction(
            object : Transaction.Function<Boolean> {
    
                override fun apply(transaction: Transaction): Boolean? {
                    transaction.set(ref, OBJECT)
                    transaction.update(ref, PROPERTY, VALUE)
                    return true
                }
            })
              .addOnSuccessListener {
                   println("Inserting $OBJECT ended with success==$it")
                   //todo remove from dbs (unsynced messages)
    
              }.addOnFailureListener {
                   it.printStackTrace()
                   //todo save to dbs (unsynced messages)
                    }
    

    //它们在实时数据库中的工作方式相似

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2018-06-09
      相关资源
      最近更新 更多