Firestore - 检查模块到服务器的连接状态

时间:2017-11-20 17:16:20

标签: android firebase google-cloud-firestore

我注意到在关闭互联网连接并重新打开后(w hile Android app仍在运行,在后台还是没有) ,Firestore模块需要很长时间才能重新获得与服务器的连接(大约一分钟),并且在重新获得连接之前我无法进行任何Firestore操作。

这是正常行为吗? 如果是,我可以以某种方式检查Firestore模块当前的连接状态吗? (为了在需要时限制用户的操作)。

2 个答案:

答案 0 :(得分:6)

据我所知,Cloud Firestore中没有与Firebase实时数据库.info/connected等效的内容,可以验证连接状态。我在Firebase官方博客上阅读了关于differences between Firebase and Firestore的帖子,我发现这个问题实际上是用例之一。

  

实时数据库具有对状态的本机支持 - 即能够判断用户何时联机或脱机。虽然我们确实有Cloud Firestore的解决方案,但它并不那么优雅。

如果您阅读Firestore offical documentation,您将看到通过组合实时数据库和Firestore可以实现在线系统。

答案 1 :(得分:0)

我目前正在为此目的测试一个修复程序。

第1步:使用以下命令确保设备已建立数据连接 Android's recommended approach

public static boolean isConnectedToInternet(@NonNull Context _context) {
    ConnectivityManager cm = (ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm == null)
        return false;
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}

第2步:强制Firestore连接(其想法是覆盖Firestore的内部连接重试指数补偿)

FirebaseFirestore.getInstance().enableNetwork()

第3步(可选):如果在后台运行应用程序时执行此操作,则可能还需要使用Android的Task API来同步等待,直到enableNetwork()任务完成。否则,操作系统可能会认为您的后台工作已经完成,并切断了您的应用对系统资源(网络,CPU等)的访问。

try { Tasks.await(FirebaseFirestore.getInstance().enableNetwork()); }
catch (Exception e) {
    Log.e(TAG, "error in Firestore enableNetwork(): ", e);
    return;
}