Работа в сети iOS - HTTP-соединения и работа в фоновом режиме

У меня есть приложение, которое позволяет пользователю отправлять сообщения с изображениями. Пользователь может нажать "Отправить", а затем сразу же закрыть свой телефон или переключиться на другое приложение.

Мы столкнулись с проблемой, что если временно отсутствует сетевое соединение, сообщение не будет отправлено. Мы переключились на использование NSURLSession backgroundConfigurationWithIdentifier, чтобы фоновое приложение не сразу истекло время выполнения запроса. Мы перешли на использование этого для всех наших запросов API, полагая, что для каждого запроса не помешает возможность продолжить работу в фоновом режиме, если приложение будет закрыто в неподходящее время.

Перемотав пару недель, мы замечаем, что все запросы кажутся медленными. Используя wireshark, я только что обнаружил, что этот фоновый сеанс, похоже, использует новое http-соединение для каждого запроса, то есть для него требуется настройка TCP-соединения и новое TLS-квитирование для каждого запроса, что добавляло задержку ~500 мс к каждому запросу в нашем приложении. Это довольно большое дело, но я не могу найти такое поведение, документированное где-либо, включая ссылку выше или соображения Apple о переносе фона.

Итак, мой вопрос, это поведение ожидается, или я что-то делаю не так? Есть ли простой способ с NSURLSession сделать HTTP-запрос, который будет использовать существующее поддерживающее соединение, если оно есть, но может вернуться к backgroundConfiguration, если приложение будет перемещено в фоновый режим?

1 ответ

NSURLSession - рекомендуемый способ выполнить ваш вариант использования. Вы пробовали установку backgroundSessionConfig.discretionary = true

Ссылка на iOS

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

Если это не поможет, я рекомендую оставить сообщение об ошибке в iOS.

Другие вопросы по тегам