我注意到在关闭互联网连接并重新打开后(w hile Android
app
仍在运行,在后台还是没有) ,Firestore
模块需要很长时间才能重新获得与服务器的连接(大约一分钟),并且在重新获得连接之前我无法进行任何Firestore
操作。
这是正常行为吗?
如果是,我可以以某种方式检查Firestore
模块当前的连接状态吗? (为了在需要时限制用户的操作)。
答案 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;
}