应用程序退出时如何从 firebase 实时数据库中删除节点

How can I remove a node from a firebase realtime database when the app exits

当我的应用程序崩溃或用户关闭应用程序时,我希望从 实时数据库。 所以,到目前为止,我找不到任何方法来处理这个问题。能否请您指出任何参考 material 或任何可以帮助我实现这一点的有价值的东西?在这里我想删除 availableDrivers 但是为此,我需要找到应用程序的状态,它是如何完成的?我想从应用程序本身而不是从 firebase / google 服务的功能(云功能等)来做到这一点 应用程序的场景可以像

  1. 最小化

  2. 强制关闭

  3. phone 死亡

  4. 没有网络等..

没有 100% 可靠的方法来“在应用程序退出时”执行代码(尤其是网络调用)。如果 phone 的电池没电、应用程序崩溃或被强制关闭怎么办?

克服这个问题的一种方法是重构您的文档,这样它们就不会被删除,而是包含一个“上次活动”的时间戳。当应用程序处于活动状态时,此时间戳会定期增加。当时间戳小于从现在开始的这个时间段时,文档可以被认为是“不活动的”所以你用 .where("lastActiveTimestamp", ">=", Date.now() - period) (伪代码)查询。您还可以编写一个 firebase 函数来清理非活动文档以优化数据库。

您所描述的是 Firebase onDisconnect 方法的用途。使用此方法,您可以在 连接到数据库后端时注册一个操作,一旦后端注意到连接断开,该操作就会执行。

一个简单的例子:

// Somewhere in your application, trigger that the user is online:
DatabaseReference ref = FirebaseDatabase.instance.ref("users/123/status");
await ref.set(true);
// And after;
// Create an OnDisconnect instance for your ref and set to false,
// the Firebase backend will then only set the value on your ref to false
// when your client goes offline.
OnDisconnect onDisconnect = ref.onDisconnect();
await onDisconnect.set(false);

onDisconnect 可以通过干净的断开连接触发,客户端通知服务器它即将断开连接,或者通过脏断开连接,客户端简单地停止与服务器的通信(例如在发生崩溃或物理连接实际丢失的情况下)。在后一种情况下,服务器可能需要几分钟的时间才能检测到客户端已离开,从而为该客户端运行 onDisconnect 处理程序。

另请参阅 offline capabilities 上的 FlutterFire 文档。