【问题标题】:Firestore - change document value after certain timeFirestore - 在一定时间后更改文档值
【发布时间】:2021-11-29 06:03:42
【问题描述】:

我们在 Flutter 中开发了聊天应用程序,后端是 Firestore,它具有一对一和群聊功能,并且工作正常,包括跟踪用户最后在线或离线的能力看过的日期/时间。

当用户在线时,我们会将其标记为在线,并更新上次查看的日期/时间。如果用户发送另一条消息,我们还会再次更新上次看到的日期/时间,以确保更新最后一次看到的日期/时间。

此外,当用户关闭或失去应用程序的焦点时,我们将其标记为离线。

问题说明:当用户断开手机与移动数据或 WiFi 连接的连接时,我们无法更新 FireStore 数据库中的信息。

任何建议将不胜感激。

问候, 嗨十

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    为此,使用onDisconnect 使用实时数据库更容易

    Firebase 数据库客户端提供简单的原语,当客户端与 Firebase 数据库服务器断开连接时,您可以使用这些原语写入数据库。无论客户端是否完全断开连接,这些更新都会发生,因此即使连接断开或客户端崩溃,您也可以依靠它们来清理数据。所有写入操作,包括设置、更新和删除,都可以在断开连接时执行。

    这是一个使用 onDisconnect 原语在断开连接时写入数据的简单示例: more info

     OnDisconnect ref = FirebaseDatabase.instance.reference().onDisconnect();
        ref.set({"status": "offline"});
    

    【讨论】:

    • 感谢您的更新,但应用程序已投入生产,现阶段我无法更改数据库。
    【解决方案2】:

    您想在应用程序中管理用户存在系统,即用户是在线还是离线。 Firestore SDK 目前没有与 Firebase 实时数据库一样的用户状态管理系统。在 Public Issue Tracker 中有一个现有的issue,您可以在其中加注星标以接收任何更新。

    幸运的是,您仍然可以在使用 Firestore 作为后端数据库的同时实现用户呈现系统。为此,您必须使用 here 中提到的 Firebase 实时数据库实现 Cloud Functions。

    要将 Cloud Firestore 连接到 Firebase 实时数据库的本机状态功能,请使用 Cloud Functions。

    使用实时数据库报告连接状态,然后使用 Cloud Functions 将该数据镜像到 Cloud Firestore。

    正如您所提到的,您现在不能将数据库更改为实时数据库,对您来说最好的选择是实现上述内容。

    博客Managing user presence with Firestore对此进行了详细解释。

    【讨论】:

    • 感谢您的指导,我会检查并回复您。
    • 我们已经根据您分享的博客实现了逻辑,但它需要互联网连接才能更新状态。如果用户因 Internet 连接中断而断开连接怎么办?我在这里错过了什么吗...请指导。
    • 我不知道你为什么说它需要互联网连接来更新状态。
    • 设置的目的是在用户与应用程序断开连接时将状态设为离线,可能是由于互联网连接速度慢或其他原因。 onDisconnect 类允许您在客户端与数据库服务器断开连接时写入或清除数据。无论您的客户端是否完全断开连接,这些更新都会发生,因此即使连接断开或客户端崩溃,您也可以依靠它们来清理数据。要获取有关onDisconnect 的更多详细信息,您可以访问this page
    猜你喜欢
    • 2019-05-21
    • 2018-05-08
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多