IT虾米网

ios后台更新和下载详解

developer 2018年06月24日 手机开发 336 0
- (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; 
} 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

IOS UIDevice & IOS检测屏幕旋转实例详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。