Можно ли пуш уведомления приходить без интернета и в каких случаях
Что проверяют
Понимаете ли вы, что «пуш» бывает двух видов и что без сети не приходит только один из них. Следом обычно просят составить набор проверок: что будет с уведомлением, отправленным, пока телефон был в авиарежиме.
Как отвечать
Сначала разведите понятия:
- удалённый пуш: сервер приложения отправляет сообщение в APNs (iOS) или FCM (Android), а те доставляют его на устройство по постоянному соединению. Без выхода к серверам Apple или Google такой пуш не придёт;
- локальное уведомление: приложение само планирует его на устройстве (
UNUserNotificationCenterна iOS,AlarmManagerилиWorkManagerплюсNotificationManagerна Android). Сеть не нужна, напоминание сработает и в авиарежиме; - отложенная доставка: если устройство офлайн, APNs и FCM держат сообщение и отдают его после подключения. APNs хранит только последнее уведомление для приложения, FCM держит сообщение до истечения
ttl, по умолчанию до четырёх недель; - сеть без интернета: на iOS есть Local Push Connectivity, пуш по локальной Wi-Fi сети без выхода в интернет. Это нишевый случай для кораблей, больниц и закрытых площадок.
Дальше покажите тестовую сторону. Отправить пуш в авиарежиме и включить сеть: пришёл ли, в каком порядке, не задублировался ли. Отправить с коротким ttl и выждать дольше: сообщение должно пропасть. Проверить collapse_key или apns-collapse-id: из пяти однотипных остаётся одно. На Android отдельно проверить Doze: сообщения с обычным приоритетом при выключенном экране приходят с задержкой, высокий приоритет будит устройство.
Где спотыкаются
Отвечают «нет, никогда» и забывают про локальные уведомления, хотя будильники и напоминания тестируют почти в каждом приложении.
Путают пуш с SMS. SMS приходит по сотовой сети без мобильного интернета, но к пуш-сервисам отношения не имеет.
Считают, что всё отправленное офлайн придёт потом целиком. Сообщения со схлопыванием и истёкшим ttl теряются, и это надо проверять, а не предполагать.