ios后臺更新和下載
- (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
[task resume]; } // 2.利用Remote Notification / 推送的內容 { "aps" : { "content-available" : 1 }, "content-id" : 42 }/completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { completionHandler(UIBackgroundFetchResultFailed); return; } completionHandler(UIBackgroundFetchResultNewData); }];
(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; } </pre>