确定iPhone是否真正连接到互联网或仅在受限制的热点后面

我在严格识别iPhone的networking访问方面遇到了很多麻烦。 我在StackOverflow上看到过很多像这样的问题,但没有一个能够帮助我。 例如我已经看到这个: 如何检查iOS或OSX上的活动Internet连接?

但是我想知道下面三种情况的发生时间:

  1. Wifi 3G被禁用

  2. 无线 3G已启用,但没有互联网连接。 这可能是由于3G没有真正的工作,即使它显示在状态栏,或者WiFi是一个热点要求login,让你访问互联网或最后一个场景:WiFi源是本地networking,但不提供任何Internet连接。

  3. 一切工作正常

当然,我已经尝试过各种各样的东西,例如:

// Allocate a reachability object Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; // Set the blocks reach.reachableBlock = ^(Reachability*reach) { /* NOT REACHABLE */ dispatch_async(dispatch_get_main_queue(), ^{ iarcSBInternetWarning.visible = NO; }); }; reach.unreachableBlock = ^(Reachability*reach) { /* REACHABLE */ iarcSBInternetWarning.visible = YES; }; // Start the notifier, which will cause the reachability object to retain itself [reach startNotifier]; 

但是,这似乎只是说,无线或3G启用,并不检查可能的互联网限制。 任何帮助我确定三种情况的答案都会让我非常高兴。

当然,从个人服务器API分析直接的HTTP请求输出返回一个特定的字节序列将工作,但这不是我想要做的。 我更喜欢使用任何种类的Reachability API。

我已经使用了苹果的可访问性API,但它似乎没有识别热点redirect。

如果这对于Reachability API来说是不可能的,那么对于向服务器发出简单请求,检查它在指定的超时之前是否可达,以及该URL没有被redirect到热点login页面(可能只检查标题,而不是整个服务器字节序列输出)? 每15秒运行一次这样的脚本是否是一个好主意,还是会使用太多的电池和/或networking数据?

检查出站连接的最简单的方法是通过GET Google的generate204页面并检查响应代码

http://www.google.com/generate_204

或者你可以使用

http://www.apple.com/library/test/success.html这是操作系统使用的页面