我最近开始研究由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的有效且可靠的方法。如果没有,它将以何种方式缺乏。
答案 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以获取帮助 诊断失败的原因。