Ответ
Поведение WebSocket-соединения зависит от состояния приложения. По умолчанию работа в свернутом (фоновом) режиме сильно ограничена.
Поведение по умолчанию:
- Приложение активно или свернуто: Соединение остается стабильным. iOS не прерывает сетевую активность для свернутого приложения немедленно.
- Приложение перешло в фон (background): Через несколько секунд система приостанавливает выполнение кода и может разорвать сетевые соединения, включая WebSocket.
Как поддерживать соединение в фоне: Для длительной работы в фоне требуются специальные разрешения (Background Modes), которые необходимо обосновать Apple:
- VoIP (Voice over IP): Прямая поддержка фоновых сокетов для аудиозвонков.
- Удаленные уведомления (Push Notifications): Основной способ. Сервер отправляет push-уведомление, которое "будит" приложение, позволяя ему на короткое время восстановить WebSocket-соединение и получить актуальные данные.
- Фоновое обновление контента (Background Fetch): Позволяет приложению периодически запускаться в фоне, но интервалы не гарантированы.
Пример конфигурации для VoIP (в Info.plist):
<key>UIBackgroundModes</key>
<array>
<string>voip</string>
</array>
Практическая рекомендация: Для большинства приложений (чат, live-обновления) оптимальная стратегия — полагаться на Push-уведомления. При получении push приложение может быстро восстановить соединение, получить данные и обновить интерфейс. Прямое поддержание WebSocket в фоне без веской причины приведет к отклонению приложения при ревью App Store.