- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
- NSLog(@"Launched in background %d",UIApplicationStateBackground == application.applicationState);
- return YES;
- }
- // 1.利用Background Fetch
- - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
- NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
- NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
- NSURL *url = [[NSURL alloc] initWithString:@"http://127.0.0.1/data.json"];
- NSURLSessionDataTask *task = [session dataTaskWithURL:url
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- if (error) {
- completionHandler(UIBackgroundFetchResultFailed);
- return;
- }
- completionHandler(UIBackgroundFetchResultNewData);
- }];
- [task resume];
- }
- // 2.利用Remote Notification
- /*
- 推送的内容
- {
- "aps" : {
- "content-available" : 1
- },
- "content-id" : 42
- }
- */
- - (void)application:(UIApplication *)application
- didReceiveRemoteNotification:(NSDictionary *)userInfo
- fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
- {
- NSLog(@"Received remote notification with userInfo %@", userInfo);
- NSNumber *contentID = userInfo[@"content-id"];
- NSString *downloadURLString = [NSString stringWithFormat:@"http://yourserver.com/downloads/%d.mp3", [contentID intValue]];
- NSURL* downloadURL = [NSURL URLWithString:downloadURLString];
- NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];
- NSURLSessionDownloadTask *task = [[self backgroundURLSession] downloadTaskWithRequest:request];
- task.taskDescription = [NSString stringWithFormat:@"Podcast Episode %d", [contentID intValue]];
- [task resume];
- completionHandler(UIBackgroundFetchResultNewData);
- }
- - (NSURLSession *)backgroundURLSession
- {
- static NSURLSession *session = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- NSString *identifier = @"io.objc.backgroundTransferExample";
- NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:identifier];
- session = [NSURLSession sessionWithConfiguration:sessionConfig
- delegate:self
- delegateQueue:[NSOperationQueue mainQueue]];
- });
- return session;
- }
来源: http://www.phpxs.com/code/1005643/