不正确的响应 - WWAN 的可达性

Posted

技术标签:

【中文标题】不正确的响应 - WWAN 的可达性【英文标题】:Incorrect Response - Reachability For WWAN 【发布时间】:2013-07-05 18:50:58 【问题描述】:

在检查 iPAD 3 WiFi+Cellular 的可达性(网络可用性)时,我遇到了在下面提到的场景中发生的一个奇怪问题。

为了检查网络可用性,我使用了Apple sample code for reachability。 以下代码用于检查 WiFi 或 WWAN 的可用性。

`

- (BOOL)networkCheck
 
    Reachability *wifiReach = [Reachability reachabilityForInternetConnection];
    NetworkStatus netStatus = [wifiReach currentReachabilityStatus];

    switch (netStatus)
    
        case NotReachable:
        
            NSLog(@"%@",@"NETWORKCHECK: Not Connected");    
            return false;
            break;
        
        case ReachableViaWiFi:
        
            NSLog(@"%@",@"NETWORKCHECK: Connected Via WiFi");       
            return true;
            break;
         
        case ReachableViaWWAN:
        
            NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN");
            return true;
            break;
        
    
    return false;
 

`

在 iPAD 中没有 SIM 并且也有 无WiFi连接,上述方法执行ReachableViaWWAN案例, 这似乎完全不正确,因为没有 SIM 卡或任何其他 WWAN 网络可用。

为了克服这个问题,建议并实施如下解决方法(或者我应该说是 hack): 向可靠的主机发送请求并检查其响应。

case ReachableViaWWAN:
    
        NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN");
        NSData *responseData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"www.google.com"]] returningResponse:nil error:nil];
        if (responseData != nil)
        
            return true;
            break;
        
        else
        
            return false;
            break;
        

    

我有几个疑问:

    这听起来可能很另类,但硬件有问题吗 或 ios,即使在没有 SIM 卡的情况下,它也是 ReachableViaWWAN 设备? 对于该问题是否有更好的解决方案(比上述解决方法)?

【问题讨论】:

【参考方案1】:

我不知道这是否是您代码中的错误,但您可以尝试使用this 来检查连接。 来自这个question。

为了检查连接,您可以创建如下方法:

 -(BOOL)connected
  
     Reachability *reachability = [Reachability reachabilityForInternetConnection];
     NetworkStatus networkStatus = [reachability currentReachabilityStatus];
     return !(networkStatus == NotReachable);
 

只要你想检查连接就可以了

if (![self connected]) 
//THERE IS NO WWAN OR WIFI connection
else
// connected. 

对我来说很好用。

【讨论】:

以上是关于不正确的响应 - WWAN 的可达性的主要内容,如果未能解决你的问题,请参考以下文章

iOS 可达性错误不会显示

AFNetworking + 当前可达接口

在 iPhone 上检测 2G 和 3G

管理 wifi 可达性更改的正确方法?

检查可达性和 App Store 提交提示的正确方法

可达性 + UIAlertView + 误报