【问题标题】:Firestore - Checking The Connection Status Of The Module To The ServerFirestore - 检查模块与服务器的连接状态
【发布时间】:2017-11-20 17:16:20
【问题描述】:

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

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

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

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

    实时数据库原生支持在线状态,即能够判断用户何时上线或下线。虽然我们确实有 Cloud Firestore 解决方案,但它并不那么优雅。

    如果您阅读 Firestore offical documentation,您会发现通过结合实时数据库和 Firestore 可以实现在线状态系统。

    【讨论】:

    • 'Presence' 是一个不同的用例。这是另一个用户是否下线,而.info/connection仅与当前设备相关。
    【解决方案2】:

    我目前正在测试一个似乎有效的修复程序。

    第 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;
    }
    

    【讨论】:

    • 这很好用,我遇到的问题是我们的 React Native 会重新连接到网络,但 firebase 需要 5-15 秒才能重新连接。我试图让这个在网络返回时自动运行的监听器上运行,但有时会出错:FirebaseError: Target ID already exists: 你见过这个吗?
    • @MorenoMdz 我还没有看到那个,但如果 Firebase 被多次初始化,你会得到一个错误。我会首先尝试追踪它的初始化位置,看看它是否被多次击中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2016-06-18
    • 2012-05-04
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多