虽然我的应用程序可以在没有任何互联网连接的情况下使用,但它可以与Web服务器交换数据(以显示一些用户统计信息)。所以我宣传应用程序为"不需要互联网连接"。一些用户随后关闭了我的应用程序的移动数据,这应该是完全正常的。但是,当我的应用程序尝试交换数据时,这些用户会被“#App名称”关闭。#34;关闭[移动数据库]。#34;对话框。
这对他们来说是一个烦恼,我想阻止这些对话,只是跳过整个数据交换的事情。
有Apple's Reachability Sample Code。
但是虽然我关闭了整个设备的WiFi和应用程序的移动数据,但Reachability确认了一个积极的互联网连接。更具体地说,它报告
Reachability Flag Status: WR t------ networkStatusForFlags
无论我是否激活了细胞数据。当然,当蜂窝数据关闭时,实际上没有互联网连接可用,因此数据交换失败。但无论如何,用户都会看到蜂窝数据对话框。
有没有办法检测iOS 7和iOS 8上的互联网连接是否可用,考虑到特定应用程序的蜂窝数据设置 - 所有这些都不会在每次使用蜂窝数据对话框时再次窃听用户?
我的应用程序目前没有任何设置面板,所以我想避免设置(第二个应用内)交换机"不要使用移动数据"。此外,我不想将数据交换限制为WiFi连接,因为每个会话只需2 KB的数据,这对大多数用户来说并不是一件大事。
答案 0 :(得分:2)
我认为iOS8中唯一受支持的方式是将Ping发送到已知服务器并使用警报面板对用户造成几次错误。在iOS8上,Apple只显示面板两次,即使应用程序重新启动也会跳过它,也许它会在一天之后再次出现。 (对于广告支持的应用来说,这确实是个坏消息。)
Apple说(https://devforums.apple.com/message/1059332#1059332):
另一位开发人员写信给DTS,因此我有机会 深入研究这一点。唉,这个消息和我预期的一样: 没有支持的方法来检测您的应用是否处于此状态。 也没有办法进行“没有用户互动”#34;网络连接, 也就是说,请求连接失败而不是呈现UI 此
以下文章介绍了使用ping的方法:
http://www.splinter.com.au/how-to-ping-a-server-in-objective-c-iphone/
http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/
答案 1 :(得分:-1)
尝试使用此git
project.
如何安装,您可以在git
上的自述文件中查看。
我还使用了dispatch_once
来确保只能初始化一次Reachability。这种dispatch
类型有时非常有用!
在课程中定义变量
BOOL _online = NO;
初始化变量
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
Reachability *reach =
[Reachability reachabilityWithHostname:gameApiHost];
reach.reachableBlock = ^(Reachability*reach) {
NSLog(@"REACHABLE!"); _online = YES;
};
reach.unreachableBlock = ^(Reachability*reach) {
NSLog(@"UNREACHABLE!"); _online = NO;
};
[reach startNotifier];
});