【问题标题】:How to manage Offline Update state of document in Firestore database withing time interval如何在时间间隔内管理 Firestore 数据库中文档的离线更新状态
【发布时间】:2020-12-18 05:05:07
【问题描述】:

我创建了一个使用 Firestore 数据库的应用程序。 现在我的任务是这样,用户可以在一段时间内采取更新文档的操作。
我的意思是如果用户在在线模式下尝试更新,那么没有问题 但如果用户设备存在网络连接不良的连接问题,则应在 20 秒内触发此更新操作以保存在 Firestore 服务器上。 如果用户不能在持续时间内执行,则应推出最后一个操作,我的意思是缓存操作不应在 20 秒后推送

对于离线模式限制,我设置了这个 setPersistenceEnabled(false) 但仍在发送文档更新,网络连接存在问题。

在实时数据库中,有一种方法可以找出设备连接性 https://firebase.google.com/docs/database/android/offline-capabilities

Firestore 有什么办法吗?
我已尝试禁用/启用网络模式,但它无助于解决此问题
https://cloud.google.com/firestore/docs/manage-data/enable-offline#kotlin+ktxandroid_4

db.disableNetwork
db.enableNetwork

我需要 Android 中的这种功能

我已尝试使用此代码来清除我正在进行的请求

val hashMap = HashMap<String, Any>()
                        hashMap["status"] = "ACCEPTED"
                        hashMap["time"] = time
                        app().firestoreDB
                            .collection("doc")
                            .document("id")
                            .update(hashMap)
                            .addOnSuccessListener {
                                isStoredOnServer = true
                                // my action 
                            }

            object : CountDownTimer(20000, 1000) {
                    override fun onTick(millisUntilFinished: Long) {
                        if(isStoredOnServer){
                            this.cancel()
                        }
                    }
                    override fun onFinish() {
                        if(!isStoredOnServer) {
                            FirebaseFirestore.getInstance().clearPersistence()
                                .addOnFailureListener { e -> Log.d("Firestore", "Error persistence writing document $e") }
                                .addOnSuccessListener { Log.d("Could enable persistence:") }

                        }
                    }
                }.start()

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    但如果用户设备存在网络连接不佳的连接问题,则应在 20 秒内触发此更新操作以保存在 Firestore 服务器上。如果用户不能在持续时间内完成,则应推出最后一个操作,我的意思是缓存操作不应在 20 秒后推送

    恕我直言,由于 Firestore 有自己的离线持久性机制,我看不到实施此机制的任何好处。根据official documentation

    Cloud Firestore 支持离线数据持久性。此功能会缓存您的应用正在使用的 Cloud Firestore 数据的副本,以便您的应用可以在设备离线时访问数据。

    因此,在离线时,您可以继续使用该应用。除此之外,对于 Android 和 iOS,默认情况下会启用离线持久性。使用:

    setPersistenceEnabled(false)
    

    这意味着将PersistenceEnabled选项设置为false,意味着你禁用了整个持久性功能。

    在实时数据库中,有一种方法可以找出设备连接性

    对于 Cloud Firestore,适用相同的规则。

    Firestore 有什么办法吗?

    只需通过删除上述代码行来启用离线持久性。有关更多信息,请参阅我在以下帖子中的回答:

    Firestore offline data: Merging writes, maximum time of offline persistence

    【讨论】:

    • 感谢您的建议,但我需要在特定时间执行此操作。这就是我限制 PersistenceEnabled 的原因。仍然连接不良,几秒钟后保存
    • 我的任务是,如果时间过去了,我需要及时执行此操作,然后不需要在 Firebase 服务器上发送此操作
    • 我已经列出了用户,所以如果有任何方法可以检查在线模式,如实时数据库,那么建议我
    • 连接不良几秒钟后保存 是的,如果您的连接不良,数据会保存在缓存中,一旦您重新连接,一切都会保存在云端。即使您需要一些时间或不需要时间,也应启用缓存并选择直接在客户端上存储或不存储的内容。我认为 this 也可能有所帮助。
    • PersistenceEnabled 非常适合离线保存数据。但是我的情况是,如果用户没有随时间声明该操作,它会一一向多个用户发送一个请求,那么我们需要忽略该操作
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2021-08-21
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多