Firestore如何禁用与云数据库的自动同步?

时间:2018-08-08 11:33:34

标签: android firebase google-cloud-firestore

我注意到了这种行为:

  1. 断开设备与互联网的连接
  2. 在离线状态下创建一些新文档
  3. 然后关闭应用程序
  4. 在线并重新打开应用程序
  5. 文档自动与Firestore同步(我无法控制completeListener)

问题是我在onCompleteListener中执行的操作未运行。 就像在上述场景中未运行(做一些非常重要的事情)一样,当用户离线时也不会调用OnFailureListener,所以我无法确定它是否正常。

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

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

如何禁用Firestore的自动同步?,仅在这种情况下

1 个答案:

答案 0 :(得分: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)
                }

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