Firebase 能否可靠地用于检测可达性,而不是 iOS 可达性 API



我最近开始开发一个由Firebase提供支持的iOS应用程序。我想知道使用 firebase 的特殊位置/.info/connected是否是检测用户是否有互联网连接的好方法。我知道这通常是使用苹果提供的可达性 API 来完成的。以下是我的想法:在应用程序委托中,我将设置类似这样的东西

func application(application: UIApplication, didFinishLaunchingWithOptions
    launchOptions: [NSObject: AnyObject]?) -> Bool {
          //Configure some stuff
          let connectedRef =
          Firebase(url:"https://serengeti.firebaseio.com/.info/connected")
          connectedRef.observeEventType(.Value, withBlock: { snapshot in
            let connected = snapshot.value as? Bool
            let userDefaults = NSUserDefaults.standardUserDefaults()
            if connected != nil && connected! {
                //User is connected
                userDefaults.setBool(true, forKey: "connected")
            } else {
                //User not connected
                userDefaults.setBool(false, forKey: "connected")
            }
            userDefaults.synchronize() //Force value into NSUserDefaults
    }

然后在我需要检查连接性的函数中(例如,当他们点击 facebook 注册按钮时),我查找NSUserDefaults条目

func authWithFacebook() {
    let userDefaults = NSUserDefaults.standardUserDefaults()
    if userDefaults.boolForKey("connected") == false {
        //Segue to a popup saying internet connection is required  
    } else {
      //Continue with signup
    }
}

这是检查互联网连接而不是使用可达性 API 的有效且可靠的方法吗?如果不是,它将以什么方式缺乏。

正如Jay所说:Firebase的.info/connected检测用户是否连接到Firebase服务器。

用户可能连接到互联网,但无法访问Firebase服务器的原因有很多。Firebase停机时间可能是其中之一,但在设备首次连接到互联网和Firebase服务器之间也可能存在各种问题。

但是,除非您要替换iOS的"您在互联网上"图标,否则您的用户可能会对应用程序是否连接到其后端更感兴趣。如果您使用 Firebase 作为应用的后端,.info/connected非常适合检测这一点。

您使用的是 Firebase,因此使用他们的 API 查看您是否与他们建立了连接是正确的方法。事实上,在Apple的建议中,始终首先尝试与Web服务建立连接,然后使用Reachability来诊断任何故障:

重要提示SCNetworkReachability API 不应用作 用于确定网络连接的预检机制。你 通过尝试连接确定网络连接。如果 连接失败,请咨询 SCNetworkReachability API 以提供帮助 诊断故障原因。

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/WhyNetworkingIsHard/WhyNetworkingIsHard.html#//apple_ref/doc/uid/TP40010220-CH13-SW2

最新更新