Val*_*ier 6 network-programming objective-c internet-connection ios
我在严格识别iPhone的网络访问类型方面遇到了很多麻烦.我在StackOverflow上看过很多像这样的问题,但没有一个对我有帮助.例如,我已经看到过:如何检查iOS或OSX上的活动Internet连接?
但我想确切地知道以下3个案例何时发生:
Wifi 和 3G被禁用
启用了Wifi 或 3G,但没有互联网连接.这可能是由于3G没有真正起作用,即使它出现在状态栏上,或者WiFi是一个热点,要求在让您访问互联网或最后一个场景之前登录:WiFi源是本地网络但是不提供任何Internet连接.
一切正常
当然我尝试过各种各样的东西,例如:
// 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];
Run Code Online (Sandbox Code Playgroud)
但这似乎只是说Wifi或3G是启用的,并没有检查可能的互联网限制.对于帮助我确定三种情景的任何答案,我都会非常高兴.
当然,从返回特定字节序列的个人服务器API分析直接HTTP请求输出可以工作,但这不是我想要做的.我更喜欢使用任何类型的Reachability API.
我使用过Apple的可访问性API,它似乎无法识别热点重定向.
如果使用Reachability API无法做到这一点,那么向服务器发出简单请求的最低资源消耗方法是什么,检查它是否在指定的超时之前是可达的,并且URL未被重定向到热点登录页面(可能只检查标题,而不是整个服务器字节序列输出)?每15秒运行一次这样的脚本是一个好主意,还是会使用过多的电池和/或网络数据?
检查出站连接的最简单方法是获取 Google 的generate204 页面并检查响应代码
http://www.google.com/generate_204
或者你可以使用
http://www.apple.com/library/test/success.html这是操作系统使用的页面