【问题标题】:What's up with Firebase ".info/connected"?Firebase“.info/connected”怎么了?
【发布时间】:2020-05-26 16:11:17
【问题描述】:

根据下面的答案,我们需要从数据库中读取才能触发“.info/connected”;

https://stackoverflow.com/a/53222060/12755203

我正在尝试使用此“.info/connected”来检查用户是否有互联网连接。因此,我首先检查从“.info/connected”返回的布尔值,如果为真,则尝试读取其他数据。但是,即使可以访问互联网,它在我第一次尝试时也会一直发送错误消息。因此,我的程序决定不读取其他数据,认为没有互联网连接。

根据上面的答案和我的经验,除非您从数据库中读取具有讽刺意味的需要互联网访问权限的内容,否则您无法使用“.info/connected”检查用户是否可以访问互联网。

那么,这个“.info/connected”是干什么用的?难道我做错了什么?有没有办法通过“.info/connected”检查用户是否可以访问互联网?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    只查询一次不是很有帮助。一个更有帮助的实现是向该位置添加一个侦听器(如documentation 所示),这样您的代码就可以在知道连接性更改后立即更新。您的应用可以根据需要响应这些更改。

    您还应该注意,连接的变化可能需要一些时间才能反映在 .info/connected 中。缓慢或不稳定的连接不一定会导致 .info/connected 的更改。如果用户的设备由于某种原因失去连接,.info/connected 不一定会立即反映出来。在 Android 声明连接肯定消失之前,套接字操作需要一些时间才能超时。确实没有办法解决这个事实 - 并不总是可以从一个只是滞后的连接中分辨出丢失的连接。

    .info/connected 可以很好地向用户反映连接的一般状态,但由于它可以延迟,因此不应将其视为下一个查询肯定会由于连接而立即完成的指标。

    【讨论】:

    • 感谢您的回答。当连接发生变化时,不会发生即时变化是可以容忍的。但是,在应用程序启动并且手机一直具有稳定的互联网连接但没有向数据库发出请求的情况下发送值 false 会使“.info/connected”无法检查互联网连接。
    • 如果你添加一个监听器并响应发生的变化,这并不是没有用的。建立套接字需要时间。没有什么是即时的。
    【解决方案2】:

    Firebase 实时数据库客户端中的 .info/connected 节点指示客户端是否连接到 Firebase 实时数据库服务器。这需要的不仅仅是互联网连接,这也是应用启动后一段时间内.info/connected 的值是false 的原因,即使您的设备已经连接了互联网。

    【讨论】:

    • 因此,在确定用户是否有互联网连接时,我们不应依赖“.info/connected”。谢谢。
    【解决方案3】:

    现在最适合我的是从“.info/connected”中获取价值,不要在意它,然后使用Thread.sleep(1200) 打发时间。 (让它超过1秒)然后,调用“.info/connected”来实际查看用户是否有互联网连接。第一次调用不太可能或不应该是正确的,它只是触发它在第二次发送正确的值。

    【讨论】:

      【解决方案4】:

      在我开始收听.info/connected 之前的一段时间,我打电话给firebase.database().goOnline()。 根据您的应用程序,您可能希望在应用程序启动时执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-30
        相关资源
        最近更新 更多