Моя цель - отправить данные/изображение на сервер, когда приложение находится в фоновом режиме. В iOS7 мы можем сделать это, используя фоновую выборку. Но фоновая выборка предлагает только 30-секундный лимит времени. Данные, которые я отправляю на сервер, могут занять больше времени, так как в них больше изображений. Во время поиска в Google я наткнулся на службу фоновой передачи, которая предлагает неограниченное время для загрузки / выгрузки данных в фоновом режиме. Можно ли инициировать службу фоновой передачи в коде фоновой выборки? Если да, то как с этим справиться.
Запуск службы фоновой передачи в фоновой выборке ios
comment
Проверьте nsurlsession, он позволяет делегировать процесс загрузки на iOS, который позвонит вам при загрузке файла.
- person user996142   schedule 17.10.2015
Ответы (1)
Всякий раз, когда вы хотите начать загрузку/выгрузку (в вашем случае в течение 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;
Подробный пример см. в этом примере приложения.
person
The Good Giant
schedule
14.12.2015