我正在开发一款iPhone应用程序,每当我调用Web服务时,我希望确保用户已连接到互联网。
我使用了Tony Million在Github上提供的Reachability类,链接在此,任何人都可以获取:https://github.com/tonymillion/Reachability 然后我只是按照示例进行设置,并拥有以下代码。
现在我在模拟器中测试,一切都很完美,当连接到wifi时我的服务被调用。如果我关闭wifi,我会看到显示的警报,这正是我需要的。
现在我在设备上测试,并获得了不错的结果,但并非完全符合我的需求。需要注意的是,我的手机没有数据套餐。
以下是场景:
- 我将手机连接到wifi并运行应用程序,完美,调用了web服务。在这里没有什么可担心的。 - 我断开手机与wifi的连接,再次运行应用程序,我期望看到警报告诉我它没有连接,但是我看到应用程序中的UI活动指示器正在旋转,这意味着应用程序已检测到某种连接并正在尝试连接到我的web服务。但这永远不会发生,我知道它正在检测蜂窝3g,因为我进入设置->常规->使用情况->蜂窝数据使用情况,将统计数据重置为0。过一段时间后,我可以看到发送和接收的数据。 - 我去设置->常规->蜂窝移动网络->关闭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,我会看到显示的警报,这正是我需要的。
现在我在设备上测试,并获得了不错的结果,但并非完全符合我的需求。需要注意的是,我的手机没有数据套餐。
以下是场景:
- 我将手机连接到wifi并运行应用程序,完美,调用了web服务。在这里没有什么可担心的。 - 我断开手机与wifi的连接,再次运行应用程序,我期望看到警报告诉我它没有连接,但是我看到应用程序中的UI活动指示器正在旋转,这意味着应用程序已检测到某种连接并正在尝试连接到我的web服务。但这永远不会发生,我知道它正在检测蜂窝3g,因为我进入设置->常规->使用情况->蜂窝数据使用情况,将统计数据重置为0。过一段时间后,我可以看到发送和接收的数据。 - 我去设置->常规->蜂窝移动网络->关闭3g,运行应用程序,现在它显示没有连接的警报。
我知道很多人都有数据包,我也看到了市场上有一些应用程序具有我上面提到的可达性水平,但是在我刚才解释的情况下,我觉得这可以得到改进。
我有一个3G连接,但我不知道如何......
[Reachability reachabilityWithHostname:@"www.google.com"];
收到ping,还是没有?
虽然我已经关闭了wifi并打开了Safari,但它的表现方式相同,它显示正在加载一段时间,然后只是说Safari无法打开...
这只是不能完成的事情吗?
最后,我甚至看到Tony Million在github页面上提供的示例,在我的手机上运行时,尽管wifi关闭并且我没有数据包,但它仍然显示可达。
我查看了几个Stack Overflow答案,其中用户询问如何检查互联网连接性,但大多数答案都围绕“类型”wifi、wwan等展开,而不是检测是否存在有效的互联网连接,而不是连接到网络。
谢谢您的时间。