Използвам 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, така че синхронизирането ми да попадне в нещо като закачено състояние.
ИЗОБРАЖЕНИЕ: ОК ИЗТЕГЛЯНЕ: ПОТОЦИ НА ФИЛМИ И ЗАПАЗЕНИ НА ДИСКА: 200: Завършен
ИЗОБРАЖЕНИЕ: ИЗТЕГЛЯНЕТО ВНЕЗАПНО СПИРА:
Някакви идеи: Използвам Background Fetch, така че не съм сигурен дали клиентът в съобщението е iOS8 или моето приложение. След всяко връщане на задачата за изтегляне копирам tmp файла в mp4 в документи и се обаждам
[session finishTasksAndInvalidate];
ако някои от тези задачи за изтегляне се провалят, тогава забелязвам, че сесията никога не завършва и се забива. Когато направя друго извличане, получавам всички тези стари задачи за изтегляне и стари сесии.