Firebase -can Database.database().reference(withPath: ".info/connected") 替代 Ashley Mills 可

Posted

技术标签:

【中文标题】Firebase -can Database.database().reference(withPath: ".info/connected") 替代 Ashley Mills 可达性【英文标题】:Firebase -can Database.database().reference(withPath: ".info/connected") substitute for Ashley Mills Reachability 【发布时间】:2019-05-22 20:07:10 【问题描述】:

我的情况是插入了带有 wifi 的路由器,但路由器没有连接到互联网(没有 wifi)。我当时使用的任何可达性等级都认为它已连接,因为 wifi 可用,但无法确定 wifi 本身无法连接。

我现在使用Ashley Mills Reachability,它工作正常,因为它可以通过 ping 主机名来判断我是否连接到互联网。

let reachability = Reachability(hostname: "www.google.com")

reachability.whenReachable =  (reachability) in

    // connection is fine remove no connection alert if it's on screen

reachability.whenUnreachable =  (reachability) in

    // can't ping Google so alert no connection

Firebase 有类似的功能:

let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with:  (connected) in

    if let boolean = connected.value as? Bool, boolean == true 

          // connection is fine remove no connection alert if it's on screen
     else 

          // can't ping Firebase so alert no connection
     
)

问题是上述 Firebase 功能能否判断我的 wifi 是否开启(路由器已插入)但 wifi 本身没有像 AshleyMills 那样连接到互联网(没有 wifi)?

【问题讨论】:

【参考方案1】:

真的迟到了,但我可以确认 Firebase 功能确实可以正常工作。它检查与 Firebase 数据库的连接。因此,如果您的 wifi 已打开但没有互联网,那么 Firebase 会说没有互联网。

这非常简单。您正在测试与 Firebase 的连接。如果它无法连接到 Firebase,那么是否有 wifi 或手机数据或其他任何东西都没有关系。如果它无法到达它,它就无法到达它,它会告诉你没有连接。

希望将来能对某人有所帮助。哦,我已经在我的生产应用程序中使用此代码一年多了。

【讨论】:

补充说明。我注意到".info/connected" 代码不会立即触发,就像 Ashley Mills 的“可达性”代码一样。而是有延迟。我找不到支持这一点的 Swift 文档,但 android 文档说:在 Android 上,Firebase 自动管理连接状态以减少带宽和电池使用量...Firebase 在 60 秒不活动后关闭连接。从我的测试来看,一旦互联网连接在代码触发之前丢失,似乎会有大约 60 秒的延迟。仅供参考。 您好,我忙了一整天,无法回复。感谢你的回答!我发现另一篇帖子说,FB 有某种方式不起作用。我必须试着记住。对于普通的日常用户来说,这似乎不是您需要担心的任何事情。 Ashley Mills 的工作非常好,但需要设置很多,fb 是 1-2-3。 Apple 也有 NWConnection 但我还没有尝试过。看这篇博文,看起来很简单agnosticdev.com/blog-entry/swift-networking/… 我发现 Ashley Mills 真的很复杂,而且出奇地笨重。我认为简单的连接检查会更优雅。苹果自己的代码也很笨拙。我查看了 NWConnection,但它适用于 ios 12 及更高版本,而且我有需要 iOS 10 的应用程序,所以也没有了。我想我喜欢 FB 代码的简单性,我还没有发现问题。 如果您能找到".info/connected" 代码的潜在问题,我想了解一下。我不希望将来有问题。 哈哈,是的,弗兰克就是那个家伙!您的需求是具体的。即使没有连接到数据库,我也需要我的应用程序响应所有情况。例如,路由器已插入但未连接到互联网。应用程序仍会认为它具有互联网连接。它发生在以前,我被难住了,直到有人向我解释。一旦没有连接,我希望我的用户立即知道。

以上是关于Firebase -can Database.database().reference(withPath: ".info/connected") 替代 Ashley Mills 可的主要内容,如果未能解决你的问题,请参考以下文章

Error:QSqlDatabase: QMYSQL driver not loaded (Qt+C++ 找不到mysql的驱动)

无法从“firebase.js”解析模块“firebase”:在项目中找不到 Firebase

VueJS + Firebase 使用 Firebase 绑定

无法解决:com.google.firebase:firebase-ml-vision:24.1.3;无法解决:com.google.firebase:firebase-core:20.0.2

没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()

如何修复 Firebase 9.0 导入错误? “尝试导入错误:‘firebase/app’不包含默认导出(导入为‘firebase’)。”