ios背景更新和下载

ios背景更新和下载

by 吴雪莹

- ( 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;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的:(ios)