如何判断用户是否为我的应用关闭了手机数据?

C. *_*ith 8 cocoa-touch foundation ios

虽然我的应用程序可以在没有任何互联网连接的情况下使用,但它可以与Web服务器交换数据(以显示一些用户统计信息).因此,我将该应用宣传为"无需互联网连接".一些用户随后关闭了我的应用程序的移动数据,这应该是完全正常的.但是当我的应用程序尝试交换数据时,这些用户会收到"关于[应用程序名称]关闭蜂窝数据"的警告.对话.

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

有Apple的可达性样本代码.

但是,虽然我关闭了整个设备的WiFi和应用程序的移动数据,但Reachability确认了一个积极的互联网连接.更具体地说,它报告

Reachability Flag Status: WR t------ networkStatusForFlags
Run Code Online (Sandbox Code Playgroud)

无论我是否激活了细胞数据.当然,当蜂窝数据关闭时,实际上没有互联网连接可用,因此数据交换失败.但无论如何,用户都会看到蜂窝数据对话框.

有没有办法检测iOS 7和iOS 8上的互联网连接是否可用,考虑到特定应用程序的蜂窝数据设置 - 所有这些都不会再次通过蜂窝数据对话框窃听用户?

我的应用程序目前没有任何设置面板,所以我想避免设置(第二个应用程序内)开关"不要使用手机数据".此外,我不想将数据交换限制为WiFi连接,因为每个会话只有2 KB的数据,这对大多数用户来说并不是一件大事.

cat*_*cat 2

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

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

另一位开发人员写信给 DTS,因此我有机会深入调查此事。唉,这个消息正如我所预期的那样:没有受支持的方法来检测您的应用程序是否处于这种状态。也没有办法建立“无用户交互”网络连接,即请求连接失败而不是像这样呈现 UI。

以下文章建议了使用 ping 的方法:

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

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