存在登录页面时,iOS swift 可访问性应该失败

Posted

技术标签:

【中文标题】存在登录页面时,iOS swift 可访问性应该失败【英文标题】:iOS swift reachability should fail while login page exists 【发布时间】:2015-07-14 08:07:09 【问题描述】:

我正在将我的 iPad 连接到需要用户使用网页登录的 Wi-Fi 热点。如果我没有在该页面登录,则互联网连接被阻止。但是,下面的可达性方法总是返回true,即httpResponse.statusCode == 200。 Swift 代码如下。

public class Reachability 

    class func isConnectedToNetwork()->Bool

        var Status:Bool = false
        let url = NSURL(string: "http://www.google.com/")
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "HEAD"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
        request.timeoutInterval = 10.0

        var response: NSURLResponse?

        var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil) as NSData?

        if let httpResponse = response as? NSHTTPURLResponse 

            if httpResponse.statusCode == 200 
                Status = true
            
        

        return Status
    

我想要的是:

Wi-Fi 登录网页存在 => 返回错误状态 Wi-Fi 登录网页消失 => 返回真实状态

我尝试了一些可达性代码,结果是一样的。是否有可能在实际 Internet 连接仍被 Wi-Fi 登录控件阻止时获得虚假连接状态?

【问题讨论】:

【参考方案1】:

你想要什么和你得到什么是完全不同的两件事。生活是艰难的。每当您使用 http 时,都希望得到与您所要求的无关的回复。每当您使用 https 时,都会收到带有与您请求的站点不匹配的证书的回复。

是的,当您得到一个登录页面时,系统会告诉您存在与 Internet 的 WiFi 连接。如果您有幸拥有 BT Homehub 路由器,例如,当您的 Internet 连接断开时,路由器将返回一个网站,试图告诉您 Internet 连接已断开,并带有有效的 200 状态。

结论:准备好处理您从服务器获得的任何内容,而不会崩溃,也不会做愚蠢的事情。

【讨论】:

【参考方案2】:
    if let httpResponse = response as? NSHTTPURLResponse 

        if httpResponse.statusCode == 200 
            Status = true
         else
          Status = false
        

    

【讨论】:

以上是关于存在登录页面时,iOS swift 可访问性应该失败的主要内容,如果未能解决你的问题,请参考以下文章

登录时多个用户访问的核心数据值(iOS Swift)

如何在 Swift 中为 UIRefreshControl 添加可访问性

登录时由多个用户访问的核心数据值(iOS Swift)

在 iOS9 和 Swift2 中使用 Parse 登录 Facebook

Swift:UIBarButtonItem 以编程方式设置可访问性标识符

当存在多个网络接口时,可访问性框架在检测接口类型时无法正常工作