如何判断用户是否closures我的应用程序的蜂窝数据?

虽然我的应用程序可以在没有任何互联网连接的情况下使用,但它可以与networking服务器交换数据(为了显示一些用户统计信息)。 所以我宣传应用程序为“不需要互联网连接”。 一些用户随后closures了我的应用的蜂窝数据,这应该是完全正常的。 但是,当我的应用程序尝试交换数据时,这些用户与“蜂窝数据closures[应用程序名称]”。 对话。

这对他们来说是一个烦恼,我想要阻止这些对话,并简单地跳过整个数据交换的事情。

有苹果的可达性示例代码 。

但是,虽然我closures了整个设备和应用程序的蜂窝数据的WiFi,可达性证实了一个积极的互联网连接。 报告更具体一些

Reachability Flag Status: WR t------ networkStatusForFlags 

不pipe我是否启动蜂窝数据。 当然,当蜂窝数据closures时,实际上没有互联网连接,所以数据交换失败。 但无论如何,用户都会看到蜂窝数据对话框。

有没有什么办法可以检测iOS 7和iOS 8上的互联网连接是否可用,同时考虑到特定应用程序的蜂窝数据设置 – 所有操作都不会每次都通过蜂窝数据对话框来窃听用户?

我的应用程序目前没有任何设置面板,所以我想避免设置(第二,在应用程序)切换“不使用手机数据”。 另外,我不希望将数据交换限制为WiFi连接,因为每个会话只有2 KB的数据,这对于大多数用户来说不是一件大事。

我认为在iOS8中唯一支持的方式是发送一个Ping到一个已知的服务器,并用几次警告面板错误地向用户报告。 在iOS8上,Apple只显示面板两次,即使应用程序重新启动也会跳过,也许一天后会显示。 (对于广告支持的应用来说,这真是个坏消息。)

苹果说( https://devforums.apple.com/message/1059332#1059332 ):

另一位开发人员写信给DTS,因此我有机会深入调查。 唉,这个消息和我想象的一样:没有支持的方式来检测你的应用程序是否处于这种状态。 也没有办法做一个“没有用户交互”的networking连接,也就是说,请求连接失败,而不是像这样呈现UI。

以下文章提出了使用ping的方法:

http://www.splinter.com.au/how-to-ping-a-server-in-objective-c-iphone/

http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/

尝试使用这个git项目。

如何安装你可以在git的Readme里面看到。 我也用dispatch_once来确保可达性只会被初始化一次。 这种dispatchtypes有时非常有用!

在类中定义variables

 BOOL _online = NO; 

初始化variables

 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]; });