2015-09-06 79 views
4

这里有大量关于在应用程序中找到活动的互联网连接的问题,但如果您在3g连接并且没有数据信用,或者如果您是在酒店的WiFi网络上自动重定向到登录页面,但您尚未输入密码。那种情况。检查iOS设备的互联网连接是否正常工作

什么是检查互联网连接是否实际运行的最快方法?

+0

@danpeters嗨,你可以实现它使用可达性类到iOS。 –

+0

Apple Reachability代码仅检查是否存在WiFi/3G连接或根本没有连接,而不是上述情况。 –

+0

@Danpeters也可以使用Reachability类。也可以使用SCNetworkReachability类。 –

回答

-1

完成此操作的最佳方式是不使用Reachability或任何其他API,方法是创建一个NSURL并尝试从中接收数据。对于不好的连接,我添加了一个超时 20秒。

像:

- (void)checkConnection //Run this on a side queue, never on a main queue 
{ NSURL *checkURL = [NSURL URLWithString:@"http://www.apple.com"]; 

    NSURLRequest *lRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:checkURL] 
               cachePolicy:NSURLRequestUseProtocolCachePolicy 
              timeoutInterval:20.0]; 

    NSData *data = [NSData dataWithContentsOfURL:lRequest]; 

    if (data) 
    { 
     connected = YES; 
    } 
    else 
    { 
     connected = NO; 
    } 
} 

这将检查是否有特定的网站访问,并设置超时,这表明网络连接速度慢。

此代码可能有错误,因为我还没有使用/尝试过它!如果有任何评论,请回答此问题。

+0

为什么可达性不是最好的方式?你应该用一些深刻的证据支持这个评论。 'apple.com'不再有有效的服务器/主机时会发生什么。有两个星期等待更新被批准 – soulshined

+0

@soulshined我并不是说这是最好的方法。如果你不使用任何API,这可能是最好的方法。此外,Apple.com的正常运行时间高达97%。我建议使用Google.com,因为它们几乎可以随时获得99.9%的正常运行时间。 – MasterRazer

+1

问题是,当可达性触手可及时,您不应该像这样硬编码地址。即使您不使用Apple.com,地址也会发生变化,服务器故障等等,也许说'最简单的方法'更准确,但这个解决方案并不是最好的。可达性还包含在网络更改时更新委托的通知,而不是手动查看网络是否更改 – soulshined

0

可以在AFNetworking使用AFNetworkReachabilityManager类。

https://github.com/AFNetworking/AFNetworking

上面的链接会帮助你在设置的东西。这将根据您的要求为您提供连续的网络检查。这里有几行代码:

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 
}]; 

[[AFNetworkReachabilityManager sharedManager] startMonitoring];