我最近开始开发一个由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