在后台IOS可达性通知

即使他在后台,用户上网也要尽快完成一些任务。 我正在使用Reachability类来检查互联网。 但是当我在后台时,这个class级不通知我。 我知道人们早些时候问过这个问题,但没有得到任何解决scheme。 如果我使用beginBackgroundTaskWithExpirationHandler 。 它只给我3到4分钟,之后,如果networking变化,我没有得到任何通知。 请给我一些build议。我认为这是可能的,因为本地邮件应用程序以这种方式工作,我的应用程序只支持iOS7。

当应用程序处于后台时, 无法通知您的课程,您可以使用新的iOS 7后台提取function。 这是一个教程http://www.objc.io/issue-5/multitasking.html

这是不可能做到你想要的。 您无法将自己的假设build立在Apple提供的应用程序上,因为Apple可以访问您不需要的stream程/ API。 邮件作为守护进程在设备上运行,您的应用永远不会这样做。

阅读关于iOS 7的背景function 。 它基于您的应用程序获取处理时间,而不是在用户想要运行应用程序之前,而不是在您select的任意时间。

使用Capabilities中的后台获取模式。 首先,您需要选中背景模式checkbox:

 Project settings -> Capabilities -> BackgroundMode -> Background Fetch 

然后你需要尽可能经常地询问时间间隔,所以我build议application:didFinishLaunchingWithOptions:你需要把这一行:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; return YES; } 

UIApplicationBackgroundFetchIntervalMinimum – 系统支持的最小提取间隔。

然后当背景获取将触发你可以检查AppDelegate的方法:

 -(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ Reachability *reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus status = [reachability currentReachabilityStatus]; switch (status) { case NotReachable: { NSLog(@"no internet connection"); break; } case ReachableViaWiFi: { NSLog(@"WiFi"); break; } case ReachableViaWWAN: { NSLog(@"cellular"); break; } } completionHandler(YES); } 

支持iOS 7.0 +