首页 文章

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

提问于
浏览
0

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

经过一些测试,在我看来,该库只检查设备是否连接了wifi,并且没有从我的路由器提供的实际互联网连接 .

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

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

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

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

先感谢您 .

3 回答

  • 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

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

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

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

  • 0

    Reachablility.h你可以找到一个声明:

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

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

    - (NetworkStatus)currentReachabilityStatus;
    

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

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

相关问题