使用reachabilitySwift检查互联网连接或wifi连接

时间:2017-08-24 09:08:50

标签: ios swift reachability reachability-swift

我正在构建一个iOS应用程序,在某些时候我需要检查应用程序对互联网的访问,所以我使用了ReachabilitySwift库。

经过一些测试,在我看来,图书馆只会检查设备是否连接了wifi,而且我的路由器没有提供实际的互联网连接。

让我说我的路由器与互联网断开连接,如果我的iOS设备通过wifi连接到路由器,可达性告诉我,我们有互联网连接在哪里实际上我的路由器没有互联网。

我尝试了与特定主机的可达性,但仍然具有相同的结果

var reachability = Reachability.init(hostname: "google.com");

当wifi连接丢失或实际互联网连接丢失时,可达性库是否应该提供反馈?

提前谢谢。

3 个答案:

答案 0 :(得分:1)

我遇到了与Reachability类似的问题,我正在对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)
                }
            })
        }
    }

答案 1 :(得分:1)

在WWDC上,Apple已多次说过,如果您只需要查看WiFi或手机是否已启动 - 请使用Reachable。如果您需要查看是否可以连接 - 那么请不要使用Reachable;而只是简单地连接和处理错误。

Reachable实际上并不会检查它是否可以连接到基于IP的资源,以及是否要获得结果。唯一的方法就是实际尝试。

在Apple的WWDC网站上寻找与Quinn的网络会话以查看相同的建议。

答案 2 :(得分:0)

Reachablility.h中,您可以找到声明:

typedef enum : NSInteger {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN
} NetworkStatus;

然后,在Reachability类中,您可以找到返回类型的方法:

- (NetworkStatus)currentReachabilityStatus;

所以,使用它。在您的快速代码中,您可以这样做:

if reachability.currentReachabilityStatus == .ReachableViaWiFi {
    // Do things...
}