我注意到了这种行为:
问题是我在onCompleteListener中执行的操作未运行。 就像在上述场景中未运行(做一些非常重要的事情)一样,当用户离线时也不会调用OnFailureListener,所以我无法确定它是否正常。
FirebaseFirestore.getInstance().document(...).collection(...)
.set(message).addOnCompleteListener {
//do some super important stuff
}
在这种情况下,我宁愿自行同步 ,所以我希望它失败并且不再重复。
如何禁用Firestore的自动同步?,仅在这种情况下
答案 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)
}
//它们在实时数据库中的工作方式类似