确定iPhone是真正连接到互联网还是仅限于受限制的热点

时间:2014-07-30 15:14:13

标签: ios objective-c network-programming internet-connection

我在严格识别iPhone的网络访问类型方面遇到了很多麻烦。我在StackOverflow上看过很多像这样的问题,但没有一个对我有帮助。例如,我已经看到了这一点:How to check for an active Internet connection on iOS or OSX?

但我想确切知道以下3个案例何时发生:

  1. Wifi 3G已停用

  2. 启用了Wifi 3G,但没有互联网连接。这可能是由于3G没有真正起作用,即使它出现在状态栏上,或者WiFi是一个热点,要求在让您访问互联网或最后一个场景之前登录:WiFi源是本地网络但是不提供任何互联网连接。

  3. 一切正常

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

    // 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];
    

    但这似乎只是说Wifi或3G是启用的,并没有检查可能的互联网限制。对于帮助我确定三种情景的任何答案,我都会非常高兴。

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

    我使用过Apple的可访问性API,它似乎无法识别热点重定向。

    如果使用Reachability API无法做到这一点,那么向服务器发出简单请求的最低资源消耗方法是什么,检查它是否在指定的超时之前可以访问,并且URL未被重定向到热点登录页面(可能只检查标题,而不是整个服务器字节序列输出)?每15秒运行一次这样的脚本是一个好主意,还是会使用过多的电池和/或网络数据?

1 个答案:

答案 0 :(得分:4)

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

http://www.google.com/generate_204

或者您可以使用

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

相关问题