Firebase 能否可靠地用于检测可达性而不是 iOS 可达性 API
Can Firebase be reliably used for detecting reachability instead of iOS reachability APIs
我最近开始开发一个由 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 的 "you're on the internet" 图标,否则您的用户可能更感兴趣的是应用程序是否连接到其后端。如果您使用 Firebase 作为应用程序的后端,.info/connected
非常适合检测它。
您正在使用 Firebase,因此使用他们的 API 来查看您是否与他们有联系是正确的方法。事实上,Apple 的建议是始终尝试先连接到您的 Web 服务,然后使用 Reachability 来诊断任何故障:
Important: The SCNetworkReachability
API is not intended for use as a
preflight mechanism for determining network connectivity. You
determine network connectivity by attempting to connect. If the
connection fails, consult the SCNetworkReachability
API to help
diagnose the cause of the failure.
我最近开始开发一个由 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 的 "you're on the internet" 图标,否则您的用户可能更感兴趣的是应用程序是否连接到其后端。如果您使用 Firebase 作为应用程序的后端,.info/connected
非常适合检测它。
您正在使用 Firebase,因此使用他们的 API 来查看您是否与他们有联系是正确的方法。事实上,Apple 的建议是始终尝试先连接到您的 Web 服务,然后使用 Reachability 来诊断任何故障:
Important: The
SCNetworkReachability
API is not intended for use as a preflight mechanism for determining network connectivity. You determine network connectivity by attempting to connect. If the connection fails, consult theSCNetworkReachability
API to help diagnose the cause of the failure.