在后台获取ios中启动后台传输服务

时间:2015-08-14 06:29:42

标签: ios objective-c background-fetch

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

1 个答案:

答案 0 :(得分: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;

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