我正在开发一个 iPhone 应用程序,每当我调用我的网络服务时,我都想确保用户已连接到互联网。
我在 github 上使用了 Tony Million 提供的 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 活动指示器在我的应用程序中旋转,这意味着应用程序检测到某种连接并且正在尝试连接到我的网络服务。但这永远不会发生,我知道它正在检测蜂窝 3g,因为我进入设置->常规->使用->蜂窝使用,将统计信息重置为 0。过了一会儿,我可以看到正在发送和接收的数据。
- 我去设置->常规->蜂窝->关闭3g,运行应用程序,现在它显示没有连接的警报。
我知道很多人都有数据包,而且我看到应用程序以我上面提到的可达性水平进入市场,我只是觉得在我刚才解释的场景中可以改进。
我有一个 3g 连接,但我不知道如何
[Reachability reachabilityWithHostname:@"www.google.com"];
被ping通,或者不是?
虽然我确实关闭了我的 wifi 并打开了 safari,但它的行为方式相同,它表明它加载了一段时间,然后只是说 safari 无法打开......
这只是无法完成的事情吗?
最后,我什至看到了 github 页面上提供的示例 Tony Million,当在我的手机上运行时,尽管 wifi 已关闭且我没有数据包,但它显示可访问。
我查看了一些堆栈溢出答案,用户询问是否检查互联网连接,但大多数答案都围绕“类型”wifi、wwan 等,而不是检测它是否是有效的互联网连接而不是连接到网络。
感谢您的时间。