Firebase:如何实施“仅当另一台设备在线时才采取行动”?

时间:2018-12-11 10:11:00

标签: android firebase firebase-realtime-database

我正在使用Firebase Real-time数据库实现具有某些游戏类型功能的通信应用程序,这需要两个用户都在线。假设用户AB正在通信,并且只有A处于联机状态(B连接到Firebase实时数据库)时,B才可以执行某些操作。我该如何实施?

我已经尝试过的事情

  1. 我有一个名为user/user_id/online的节点。每当我更新 数据库在线,我在断开连接时使用onDisconnect函数将其删除。 此逻辑的问题是Firebase服务器无法执行 onDisconnect逻辑,直到服务器端套接字超时 时间超过一分钟(即使在发生互联网错误时致电goOffline也要花费一分钟以上),但就我而言,只有1到3 允许延迟秒数。
  2. 我有一个名为user/user_id/last_online的节点,并对其进行过一次更新 每隔2秒,用户A将继续检查用户B's最后一次 采取任何行动之前的在线时间。这种逻辑的问题是,这将大大提高数据下载速率。

1 个答案:

答案 0 :(得分:1)

您似乎已经拥有内置基元(即Firebase的状态系统)的最佳方法。不过,在onDisconnect上有一个注释:检测脏连接(应用程序崩溃,网络连接丢失等)只需要很长时间。在完全断开连接(应用已关闭)的情况下,onDisconnect应该几乎立即触发。

如果onDisconnect的行为不足以满足您的需求,则需要在应用程序内部实现其余的功能。

首先想到的是主动保持活动,这似乎是您在#2中已经使用的保持活动。考虑到您最多希望3秒钟的延迟,因此2秒的保持连接ping似乎是一个合理的间隔。

这确实会增加带宽使用率。考虑到您的用例和平台的工作方式,我看不到其他实现方式。