【问题标题】:Firebase Connectivity Test Shows Disconnected At Start Even When Connected. How Do I Change This?Firebase 连接测试在开始时显示断开连接,即使已连接。我该如何改变?
【发布时间】:2018-08-07 08:39:12
【问题描述】:

我正在尝试确保 Firebase 已建立连接,然后再继续加载应用。我正在使用 Firebase 自己的代码示例中的代码。我已将它放在我的主视图控制器的 ViewDidLoad 函数中:

let connectedRef = Database.database().reference(withPath: ".info/connected")
    connectedRef.observe(.value, with: { snapshot in
        if let connected = snapshot.value as? Bool, connected {
            print("Connected")
        } else {
            print("Not connected")
            // show alert here
        }
    })

问题是上面的代码总是在显示“已连接”之前显示“未连接”。这是一个问题,因为当应用未连接时,它应该显示警报,然后每次用户打开应用时都会触发警报。

这是预期的行为吗?如果是这样,有没有办法解决它?

如何在 Firebase 每次都没有首先连接的情况下检查 Firebase 连接?

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    您观察到的行为是预期的。 Firebase SDK 无法在启动后立即建立连接。在启动和首次可用连接之间总会有一些延迟。

    另外,我认为这种策略不是一个好主意,因为移动连接可能会断断续续且不稳定。 Firebase 无法确保您的应用即使在首次建立后仍能保持良好的连接。如果您假设您的应用程序并非一直都处于连接状态,那么您的应用程序将更易于使用。用户已经开始期待某种程度的离线使用,而实时数据库通过offline data persistence 在一定程度上支持这一点。

    【讨论】:

    • 我明白你的意思。我研究过使用某种可达性代码,但它非常复杂且涉及,并且使用上面 Firebase 的“快速检查”代码似乎是一个简单的解决方案。我确实为应用程序启用了离线持久性,但我希望在用户启动时至少在会话中的某个时间点确保连接。
    • 只是出于好奇,有没有办法简单地延迟响应以便它有时间连接,然后发送响应?我尝试使用DispatchQueue.main.asyncAfter(deadline: .now() + 1,但并没有什么不同。另外,我不知道该把代码放在哪里。想法?
    • 我不确定您要做什么。请考虑用您尝试过的代码提出另一个问题,并解释它如何无法按您预期的方式工作。
    猜你喜欢
    • 2016-05-02
    • 2012-05-18
    • 2019-01-21
    • 1970-01-01
    • 2011-01-01
    • 2014-10-24
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多