可以将Firebase可靠地用于检测可访问性而不是iOS可访问性API

时间:2016-02-04 17:24:47

标签: ios swift firebase reachability

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

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

这是检查互联网连接而不是使用可访问性apis的有效且可靠的方法。如果没有,它将以何种方式缺乏。

2 个答案:

答案 0 :(得分:7)

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

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

但除非您正在替换iOS"您已经在互联网上了#34;图标,如果应用程序连接到其后端,您的用户可能会更感兴趣。如果您使用Firebase作为应用的后端,.info/connected非常适合检测。

答案 1 :(得分:4)

您正在使用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