Я использую iOS BACKGROUND FETCH n BACKGROUND TRANSFER для обновления нашего приложения.
Когда мы загружаем MP4 как часть большой загрузки большого количества файлов, загрузка может внезапно остановиться и получить ошибку:
«Клиент закрыл соединение до получения полного ответа»
http-код по-прежнему 200.
У нас нет ограничений на данные из-за корпоративных учетных записей сотовой связи, и у нас есть отдельные приложения на нашем iPad, поэтому руководство хочет, чтобы мы загружали больший объем данных и количество файлов где-то более 20/30 при чистой установке. Это корпоративные видео/pdf-файлы, публикуемые ежедневно.
Я создал NSURLSession
NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]
Затем для каждого URL-адреса mp4 или PDF я создаю NSURLSessionDownloadTask из моего NSURLSession.
NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_];
Запуск возобновляется при каждой задаче загрузки. Когда все возвращаются, NSURLSession завершается, и я сообщаю пользователю в уведомлении, что приложения были обновлены.
Я использую CHARLES PROXY на своем Mac для мониторинга загрузок. Это занимает некоторое время, так как файлов много, а также я заметил, что фильмы кажутся потоковыми, поэтому могут быть медленными. Обычно он проверяет, что было загружено, и загружает только последнее, но если я делаю много загрузок, скажем, для чистой установки, я заметил, что часто потоки в mp4 убиваются. У них есть код 200, но с сообщением
«Клиент закрыл соединение до получения полного ответа»
Любая идея, что может вызвать это, потому что это может помешать завершению моей NSURLSession, поэтому моя синхронизация может попасть в своего рода зависшее состояние.
ИЗОБРАЖЕНИЕ: OK СКАЧАТЬ: ПОТОКИ ФИЛЬМОВ И СОХРАНЕНИЕ НА ДИСК: 200: Завершено
ИЗОБРАЖЕНИЕ: ЗАГРУЗКА ВНЕЗАПНО ОСТАНАВЛИВАЕТСЯ:
Любые идеи: я использую фоновую выборку, поэтому не уверен, является ли клиент в сообщении iOS8 или моим приложением. После того, как каждая задача загрузки возвращается, я копирую файл tmp в mp4 в документах и вызываю
[session finishTasksAndInvalidate];
если некоторые из этих задач загрузки завершатся неудачно, я замечаю, что сеанс никогда не завершается и зависает. Когда я делаю еще одну выборку, я получаю все эти старые задачи загрузки и старые сеансы.