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 下载进度

AFNetworking 3.0 无法下载图片

关于最新版AFNetworking(3.0)上传多张图片的问题

AFNetworking 3.0 下载 *.m4r 文件

AFNetworking 3.0 断点续传 使用记录