使用 reachabilitySwift 检查互联网连接或 wifi 连接
Checking for internet connection or wifi connection with reachabilitySwift
我正在构建一个 iOS 应用程序,有时我需要检查该应用程序对互联网的访问,所以我使用了 ReachabilitySwift 库。
经过一些测试,在我看来,图书馆只检查设备是否连接了 wifi,而没有从我的路由器提供实际的互联网连接。
假设我断开了路由器与互联网的连接,如果我的 iOS 设备通过 wifi 连接到路由器,可达性告诉我我们有互联网连接,而实际上我的路由器没有互联网。
我尝试了与特定主机的可达性,但结果仍然相同
var reachability = Reachability.init(hostname: "google.com");
当 wifi 连接丢失或实际互联网连接丢失时,可达性库是否应该提供反馈?
提前致谢。
在Reachablility.h中你可以找到一个声明:
typedef enum : NSInteger {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
然后,在 Reachability
class 中你可以找到方法,returns 输入:
- (NetworkStatus)currentReachabilityStatus;
所以,使用它。在您的 swift 代码中,您可以这样做:
if reachability.currentReachabilityStatus == .ReachableViaWiFi {
// Do things...
}
我在对受 VPN 保护的网络进行 Web 服务调用时遇到了类似的可达性问题。
var reachability = Reachability.init(hostname: "google.com");
对我不起作用,因为它在有 Wifi 连接时返回 true。
当对服务器进行虚拟调用时,我使用了 Alamofire
响应
func networkIsAvailable(available: (Bool, String?) -> Void) {
var message : String = ""
DispatchQueue.main.async {
HUD.show(.progress)
Alamofire.request(Constants.baseUrl, method: .get, parameters: ["foo": "bar"])
.responseJSON(completionHandler: { (response) in
let error = response.result.error as? NSError
if error?.localizedDescription == networkAlert {
message = networkAlert
available(false, message)
} else if error?.code == cannotConnectServerCode || error?.localizedDescription == cannotConnectServerMessage {
message = cannotConnectServerMessage
available(false, anotherNetworkAlert)
} else {
available(true, nil)
}
})
}
}
在 WWDC 上,Apple 已经说过很多次,如果您需要简单地查看 WiFi 或手机是否可用,请使用 Reachable。如果您需要查看是否可以连接到 - 那么请不要使用 Reachable;而不是简单地连接并处理错误。
Reachable 实际上并不检查它是否可以连接到基于 IP 的资源以及您是否要返回结果。唯一的方法就是实际尝试。
在 Apple 的 WWDC 网站上寻找与 Quinn 的网络会话以查看相同的建议。
我正在构建一个 iOS 应用程序,有时我需要检查该应用程序对互联网的访问,所以我使用了 ReachabilitySwift 库。
经过一些测试,在我看来,图书馆只检查设备是否连接了 wifi,而没有从我的路由器提供实际的互联网连接。
假设我断开了路由器与互联网的连接,如果我的 iOS 设备通过 wifi 连接到路由器,可达性告诉我我们有互联网连接,而实际上我的路由器没有互联网。
我尝试了与特定主机的可达性,但结果仍然相同
var reachability = Reachability.init(hostname: "google.com");
当 wifi 连接丢失或实际互联网连接丢失时,可达性库是否应该提供反馈?
提前致谢。
在Reachablility.h中你可以找到一个声明:
typedef enum : NSInteger {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
然后,在 Reachability
class 中你可以找到方法,returns 输入:
- (NetworkStatus)currentReachabilityStatus;
所以,使用它。在您的 swift 代码中,您可以这样做:
if reachability.currentReachabilityStatus == .ReachableViaWiFi {
// Do things...
}
我在对受 VPN 保护的网络进行 Web 服务调用时遇到了类似的可达性问题。
var reachability = Reachability.init(hostname: "google.com");
对我不起作用,因为它在有 Wifi 连接时返回 true。
当对服务器进行虚拟调用时,我使用了 Alamofire
响应
func networkIsAvailable(available: (Bool, String?) -> Void) {
var message : String = ""
DispatchQueue.main.async {
HUD.show(.progress)
Alamofire.request(Constants.baseUrl, method: .get, parameters: ["foo": "bar"])
.responseJSON(completionHandler: { (response) in
let error = response.result.error as? NSError
if error?.localizedDescription == networkAlert {
message = networkAlert
available(false, message)
} else if error?.code == cannotConnectServerCode || error?.localizedDescription == cannotConnectServerMessage {
message = cannotConnectServerMessage
available(false, anotherNetworkAlert)
} else {
available(true, nil)
}
})
}
}
在 WWDC 上,Apple 已经说过很多次,如果您需要简单地查看 WiFi 或手机是否可用,请使用 Reachable。如果您需要查看是否可以连接到 - 那么请不要使用 Reachable;而不是简单地连接并处理错误。
Reachable 实际上并不检查它是否可以连接到基于 IP 的资源以及您是否要返回结果。唯一的方法就是实际尝试。
在 Apple 的 WWDC 网站上寻找与 Quinn 的网络会话以查看相同的建议。