1

我的目标是在应用程序处于后台时将数据/图像发送到服务器。从 iOS7 开始,我们可以使用后台获取来做到这一点。但后台提取仅提供 30 秒的时间限制。我发送到服务器的数据可能需要更长的时间,因为它有更多的图像。在谷歌搜索时,我遇到了后台传输服务,它提供无限时间在后台上传/下载数据。是否可以在后台获取代码中启动后台传输服务?如果有怎么处理。

4

1 回答 1

0

每当您想开始上传/下载时(在您的 30 秒后台获取期间)执行以下行:

        NSString *downloadURLString = //Your link here;
        NSURL* downloadURL = [NSURL URLWithString:downloadURLString];

        NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];


        // Create a background session
        static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSString *identifier = @"com.yourcompany.yourapp";
        NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];

        session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
    });


        //Init a NSURLSessionDownloadTask with the just-created request and resume it
        NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request];
        [task resume];

    });

另外,不要忘记实现这些委托方法:

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
                              didFinishDownloadingToURL:(NSURL *)location;

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
                                           didWriteData:(int64_t)bytesWritten
                                      totalBytesWritten:(int64_t)totalBytesWritten
                              totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;


- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
                                      didResumeAtOffset:(int64_t)fileOffset
                                     expectedTotalBytes:(int64_t)expectedTotalBytes;

有关详细示例,请查看示例应用程序

于 2015-12-14T14:47:52.100 回答