首页 > 解决方案 > 如何以正确的方式使用 Firebase 的“.info/connected”位置来检查互联网访问?

问题描述

我在我的 Android 应用程序中使用 Firebase 实时数据库,并尝试使用Firebase 的 .info/connected位置来检查互联网访问,但我无法以可靠的方式使用它来检查连接状态。

根据文档

Firebase 实时数据库提供了一个特殊位置,/.info/connected每次 Firebase 实时数据库客户端的连接状态发生变化时,该位置都会更新。

例如,我的RecyclerView主应用程序屏幕中有一个依赖于从RTDB获取的数据,就像这样

// Fragment

sellerRV = binding.sellerInfoRecyclerView
val adapter = SellerRecyclerViewAdapter()

sellerViewModel.initLoadingBalanceData()

// I am not doing anything after knowing about the connection state, just checking where I should call it
sellerViewModel.checkFBConnectivity()

sellerViewModel.repoBalanceDataListener.observe(viewLifecycleOwner, Observer {
    adapter.submitList(sellerBalanceList)
    sellerRV.adapter = adapter
})

在显示的位置检查连接状态(可能是天真的)并运行应用程序后,Log看起来像这样

2020-06-22 00:28:30.843 10092-10092/com.example.paylater D/firebaseRepo: not connected
2020-06-22 00:28:33.032 10092-10092/com.example.paylater D/firebaseRepo: connected

即使列表是可见的,并且输出是正确的。

所以,我的问题是,我应该如何(或在哪里)检查连接状态,以便以一致且可靠的方式了解用户是否已连接,然后决定开始获取数据?

标签: androidfirebasefirebase-realtime-database

解决方案


由于客户端连接到 Firebase 服务器需要几秒钟的时间,因此它首先会触发一个.info/connected事件,false然后true一旦建立连接就会触发一个事件。

应用程序将其可视化给用户的通常方式是在启动时显示“正在连接...”消息或动画,然后稍等片刻。如果建立了连接(因此侦听器变为true),则它们会删除该消息。如果经过一定的时间间隔,它们会显示“这比预期花费的时间更长,请检查您的互联网连接”类型的消息。


推荐阅读