Как исправить проблему фоновой загрузки в IOS по сотовым данным - PullRequest
0 голосов
/ 07 января 2020

У меня есть приложение, связанное с электронной книгой, в магазине приложений. Это приложение загружает большие файлы (от ~ 100 МБ до 1 ГБ) в фоновом режиме. Из 100 пользователей 10 пользователей сообщили о проблемах с загрузкой при загрузке через сотовые данные. Мы проверили ОС устройства, и у них есть последнее обновление 13.x. код ниже мы используем для загрузки данных в фоновом режиме.

#import "MyAccountViewController.h"
@interface MyAccountViewController ()<NSURLSessionDelegate>
{
    NSURLSessionConfiguration *sessionConfiguration;
}
@property (nonatomic, strong) NSURLSession *backgroundSession;
@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask;
@end

- (void)viewDidLoad 
{
    sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @“testdownloadIdentifier];
    self.backgroundSession = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate: self delegateQueue [NSOperationQueue mainQueue]];
    sessionConfiguration.discretionary = false;
}

- (IBAction)downloadBtnTapped:(id)sender 
{
NSURL *sourceUrl = [NSURL URLWithString:@“http://files.infogridpacific.com/ss/igp-twss.epub”];
  self.downloadTask = [self.backgroundSession downloadTaskWithURL: sourceUrl];
 [self.downloadTask resume];
}

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
  NSLog(@"INSIDE_didWriteData ");
}

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
  NSLog(@"INSIDE_didFinishDownloadingToURL ");
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
  NSInteger code = [(NSHTTPURLResponse *)task.response statusCode];
  NSLog(@"INSIDE_didCompleteWithError code :  %ld",code);
}

-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session{

   [self.backgroundSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
        if ([downloadTasks count] == 0) {
            if (appDelegate.backgroundTransferCompletionHandler != nil) {
                void(^completionHandler)() = appDelegate.backgroundTransferCompletionHandler;
                appDelegate.backgroundTransferCompletionHandler = nil;
                [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                    completionHandler();
                }];
            }
        }
    }];
}

Мы попробовали следующее 1. Настройки безопасности транспорта приложения -> Разрешить произвольные загрузки -> ДА 2. Пробная загрузка на переднем плане (она отлично работает на уязвимых устройствах) 3. Пробные значения по усмотрению ДА / НЕТ оба, но это не имеет никакого эффекта.

На устройствах, где загрузка не удалась, методы делегата не вызывались.

Пожалуйста, предложите, если есть какой-либо альтернативный способ загрузки больших файлов по сотовым данным.

...