后台的IOS可达性通知

时间:2014-03-05 12:21:46

标签: ios iphone ios7 reachability

即使他在后台,我也想在用户上线后立即完成一些任务。我正在使用Reachability类来检查互联网。但是当我在后台时,这堂课并没有通知我。我知道人们早些时候会问这个问题,但那里没有任何解决方案。如果我使用beginBackgroundTaskWithExpirationHandler。  它只给我3到4分钟,之后如果网络改变我没有得到任何通知。请建议我。我认为这是可能的,因为本机邮件应用程序以这种方式工作,我的应用程序仅支持iOS7。

3 个答案:

答案 0 :(得分:3)

不可能完全按照自己的意愿行事。您不能将您的假设基于Apple提供的应用程序,因为Apple可以访问您不能访问的流程/ API。 Mail在设备上作为守护程序进程运行,您的应用程序永远不会这样做。

了解iOS 7 background capabilities。它基于您的应用程序在用户想要运行应用程序之前获得处理时间 - 而不是在您选择的任意时间。

答案 1 :(得分:2)

当应用在后台时,您无法获得通知,您可以利用新的iOS 7后台提取功能。这是一个教程 http://www.objc.io/issue-5/multitasking.html

答案 2 :(得分:0)

使用Capabilities中的Background Fetch模式。 Firstable你需要选中背景模式的复选框:

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

然后你需要尽可能多地询问时间间隔越快越好,所以我建议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 +