AFNetworking 3.0 下载后台模式
Posted
技术标签:
【中文标题】AFNetworking 3.0 下载后台模式【英文标题】:AFNetworking 3.0 download background mode 【发布时间】:2019-08-01 08:09:00 【问题描述】:我使用 AFNetworking 库 3.0 下载文件。我为 AFNetworking 会话创建了单例,但是当我的手机进入锁屏会话时已被取消。我的项目也接受了“后台获取模式” 我做错了什么?感谢帮助! 我的代码如下:
-(void)downloadShowingProgress:(NSString *)url nameString:(NSString *)nameString indexPath:(NSIndexPath *)indexPath
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
self.downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *directoryURL = [fileManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
NSURL *documentsDirectoryURL = [directoryURL URLByAppendingPathComponent:@".fade"];
NSError *error;
if ([fileManager createDirectoryAtURL:documentsDirectoryURL withIntermediateDirectories:YES attributes:nil error:&error])
NSLog(@"Create Sucess");
else
NSLog(@"Create error: %@", error);
return [documentsDirectoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",nameString]];
completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
NSLog(@"** File downloaded to: %@", filePath);
];
[self.downloadTask resume];
【问题讨论】:
【参考方案1】:你必须像这样添加 backgroundSessionConfigurationWithIdentifier:
-(void)downloadShowingProgress:(NSString *)url nameString:(NSString *)nameString indexPath:(NSIndexPath *)indexPath
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"download-task"];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
self.downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *directoryURL = [fileManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
NSURL *documentsDirectoryURL = [directoryURL URLByAppendingPathComponent:@".fade"];
NSError *error;
if ([fileManager createDirectoryAtURL:documentsDirectoryURL withIntermediateDirectories:YES attributes:nil error:&error])
NSLog(@"Create Sucess");
else
NSLog(@"Create error: %@", error);
return [documentsDirectoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",nameString]];
completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
NSLog(@"** File downloaded to: %@", filePath);
];
[self.downloadTask resume];
【讨论】:
以上是关于AFNetworking 3.0 下载后台模式的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序移动到后台时,AFNetworking 3.0 继续上传
AFNetworking 3.0 setImageWithURLRequest 下载进度