Фоновая NSURLSession с большим количеством файлов и HTTPS-заголовком wsse для аутентификации

Я схожу с ума от функции, которую реализую в своем приложении для iOS:/

Я пытаюсь добавить для пользователя возможность загружать некоторые документы в приложение, чтобы он мог получить к ним доступ даже в автономном режиме.

Например, в приложении пользователь может перемещаться по некоторым категориям, которые приведут его к документам. В этой функции он мог выбрать загрузку категории A. Приложение загрузит весь контент этой категории с сервера и документы.

Категория может варьироваться от нескольких десятков файлов до нескольких тысяч! Вот почему мы решили загружать содержимое, даже если приложение работает в фоновом режиме.

Итак, вот как это работает под капотом с использованием NSURLSession: у меня есть NSObject, который я назвал DownloadManager, который обрабатывает делегирование для NSURLSession и самого сеанса. Когда я его создаю, я создаю сеанс с фоновой конфигурацией. Я обрабатываю категорию, которую хочу загрузить, чтобы получить все, что мне нужно, чтобы создать задачу загрузки и запустить ее. Когда это заканчивается, у категории есть подкатегории и так далее (для глубины 3 максимального уровня), которые я также должен загрузить, чтобы получить всю их информацию.

Дело в том, что я не могу просто поставить задачи в NSURLSession, как только он у меня появится, потому что сервер использует систему аутентификации wsse для разрешения GET маршрутов. Этот заголовок имеет срок жизни 5 минут, поэтому я должен создать его непосредственно перед тем, как он перейдет к объекту NSURLSession, и чтобы быть (почти) уверенным, что он отправит его сразу после этого, я ограничиваю количество задач в NSURLSession до предела одновременных подключений на хост.

В режиме отладки (компиляция и запуск с помощью XCode) приложение работает нормально и, кажется, не имеет проблем с выполнением задач загрузки в фоновом режиме, но когда я тестировал его в режиме тестирования (с использованием Crashlytics), обработка в фоновом режиме действительно много медленнее, и иногда кажется, что NSURLSession больше не отправляет события...

Есть ли что-то сложное, чтобы понять, что я не получил за использование NSURLSession? Это нормально, что сессия нормально работает в фоновом режиме, а потом вдруг кажется мертвой и не отправляет события в течение более или менее длительного времени (это может длиться от нескольких секунд до целых минут!), чтобы снова «работать»? :Икс

Изменить. Другое дело, что загрузка работает без проблем, пока приложение находится на переднем плане.

Спасибо за любую помощь, которую вы мне окажете, Билкикс


person Bilkix    schedule 17.03.2016    source источник


Ответы (1)


Хорошо, у меня есть ответ на форуме разработчиков Apple благодаря Eskimo. Я связываю пост здесь, чтобы дальнейшие разработчики могли легко увидеть объяснение :)

https://forums.developer.apple.com/message/125217#125217

person Bilkix    schedule 21.03.2016