2013-07-22 46 views
4

我正在开发一个iPhone应用程序,每当我打电话给我的Web服务我想确保用户连接到互联网。iOS可访问性说在3g没有互联网连接可到达

我使用了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和运行应用程序的情况下的

  • ,完美,调用到Web服务进行。这里没什么可担心的。
  • 我断开我的手机从WiFi并再次运行应用程序,我期望警报来告诉我,它没有连接,但然后我看到在我的应用程序旋转的UI活动指示器,这意味着该应用程序检测到连接某种形式,并试图连接到我的网络服务。但是这绝不会发生,我知道当我进入settings-> general-> usage-> cellular usage时,它正在检测蜂窝3G,并将统计重置为0.一段时间后,我可以看到数据正在发送和接收。
  • 我转到settings-> general-> cellular->关闭3g,运行该应用程序,现在它显示没有连接的警报。

我知道很多人都有数据包,并且还我已经看到应用程序打市场与我所提到的可达性的水平,我只是觉得这可能在我刚才解释的情况得到改善。

我有一个3G连接,但我不知道

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

如何被ping通,或许它不是?

虽然我做了我的开关关闭的wifi,打开Safari浏览器,它的工作方式,充分显示了其装载了好一阵子,然后只是说,Safari浏览器无法打开......

这只是一些无法完成?

最后,我甚至在github页面上看到了Tony Million提供的示例,在我的手机上运行时,尽管无线网关闭,但我没有数据包,但它显示可达。

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

谢谢你的时间。

+0

必须有一些与你没有一个数据计划......您是否尝试过在手机上有一个数据计划,并打开飞行模式,并尝试连接?然后会发生什么? –

+0

现在,如果我打开飞行模式,它会说没有连接。没事儿。但是我说的是没有在世界这个地方并不罕见的数据。 当用户没有连接时,它不会是好的体验,它表明只有当他们没有加载5分钟后,他们才会加载失望。 我不知道3g和运营商是如何工作的,也许运营商只是限制了一个不购买数据计划的人的带宽量,因此一个连接被检测到足以ping通谷歌,但还不足以做其他任何事情? –

+0

@ShawnFrank你找到了你的问题的答案? –

回答

2

经过几天的研究,我发现了一个对我有用的解决方案,希望有人在未来可能会发现它有用。

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

然后我说干就干,只是做普通的东西来从URL中获取数据

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

因此,使用可达性的组合(这并不总是在某些情况下,像我在哪里工作蜂窝网络使用3克或4g),并检查下载的数据可以作为应用程序的良好检查点。

+0

经过数小时无法拉扯我的头发,看到当我的手机连接到无线wifi AP时,苹果原始可达性如何检测到“有互联网连接”,我也选择了这种(明显的)强力解决方案。你可能会过度杀伤,但是如果你在自己的服务器上为它创建一个URL,那就是PURE BLISS,并且100%稳定。 – Isaac

2

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

enter image description here