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

kau*_*kau 2 reachability ios firebase swift

我最近开始研究由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
    }
Run Code Online (Sandbox Code Playgroud)

然后在我需要检查连接的功能中(例如,当他们点击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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*len 7

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

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

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

  • .info/connected是确定的方法.我们在我们的应用程序中这样做,它运作良好.您可能还希望在应用程序中保留一个标志(我们使用KVO),因此如果在使用应用程序的过程中它会脱机,用户就会知道. (2认同)