iOS可达性表示可以在3g上没有互联网连接

时间:2013-07-22 22:54:45

标签: ios reachability

我正在开发一个iPhone应用程序,每当我打电话给我的网络服务时,我想确保用户已连接到互联网。

我使用了Tony Million在github上提供的Reachability类,对于想要抓住它的人来说,链接是她的。 https://github.com/tonymillion/Reachability

我只是按照示例并设置了所有内容并拥有以下代码

Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];

reach.reachableBlock = ^(Reachability*reach)
{
    // call web service here
};

reach.unreachableBlock = ^(Reachability*reach)
{
   // alert user not reachable
};

[reach startNotifier];

现在我在模拟器中对此进行测试,一切正常,我的服务在连接到wifi时被调用。如果我关闭wifi,我会看到显示的警报,这正是我需要的。

现在我在设备上测试它并得到不错的结果,但不完全是我需要的。请务必注意,我的手机没有数据包。

所以这是场景的

  • 我将手机连接到wifi并运行应用程序,完美,打电话给网络服务。这里没什么值得担心的。
  • 我将手机从wifi上断开并再次运行应用程序,我预测警报会告诉我它没有连接,但后来我看到UI活动指示器在我的应用程序中旋转,这意味着应用程序已检测到连接某种,并试图连接到我的Web服务。但这永远不会发生,我知道它正在检测蜂窝3g,因为我进入设置 - >通用 - >使用 - >细胞使用,将统计数据重置为0.过了一会儿,我可以看到正在发送的数据和接收。
  • 我转到设置 - > general-> cellular->关闭3g,运行应用程序,现在它显示无连接警报。

我知道很多人都拥有数据包,而且我看到应用程序已经上市了我上面提到的可达性水平,我只是觉得这可以在我刚才解释的场景中得到改善。

我有一个3g连接,但我不知道如何

[Reachability reachabilityWithHostname:@"www.google.com"]; 

得到了ping,或者可能没有?

虽然我确实关闭了我的wifi并打开了safari,但它的行为方式相同,它显示它加载了很长时间然后只是说safari无法打开...

这只是无法完成的事情吗?

最后,我甚至看到了样本,Tony Million在github页面上提供,当我在手机上运行时,尽管wifi已关闭且我没有数据包,但它显示可以访问。

我看了一些堆栈流量答案,用户询问有关检查互联网连接的问题,但大多数答案都是围绕“类型”wifi,wwan等而不是检测它是否是有效的互联网连接而不是连接到网络

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

经过几天的研究,我找到了一个对我有用的解决方案,希望将来有人能发现它很有用。

我使用上面的可访问性代码创建了一个单例类,这样我就可以使用它并在每次轻松进行Web调用时进行检查。虽然这并没有像我之前提到的那样解决我的问题,但这是第一次检查。

然后我继续前进,只是做了常规的东西来从网址

获取数据
NSdata * data [NSData dataWithContentsOfURL:myurlhere];
if([data length] == 0)
{
    show alert view here
}
else
{
    doing stuff with the items in data
}

因此,使用可达性的组合(这在某些情况下并不总是有效,例如我的蜂窝网络使用3g或4g)并检查下载的数据可以作为应用程序的一个很好的检查点。

答案 1 :(得分:2)

首先,您需要在设置中检查您的应用的手机数据权限。

enter image description here