Какие особенности, преимущества и недостатки silent push уведомлений
Что проверяют
Понимаете ли вы, что тихий пуш это сигнал приложению обновить данные, а не уведомление для пользователя, и что доставку никто не гарантирует. Следом обычно спрашивают, как его тестировать, раз на экране ничего не появляется.
Как отвечать
Сначала устройство механизма на двух платформах:
- iOS: в
apsтолькоcontent-available: 1, безalert, звука и бейджа, заголовкиapns-push-type: backgroundиapns-priority: 5. В приложении включён Background Modes с пунктом Remote notifications. Обработка идёт вapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:), на работу даётся до 30 секунд; - Android: аналог это data-сообщение FCM без блока
notification. Оно приходит вonMessageReceivedи на переднем плане, и в фоне, долгую работу из обработчика передают вWorkManager.
Плюсы: данные свежие к моменту, когда пользователь открывает приложение, можно сбросить кэш, отозвать сессию, подтянуть конфигурацию без визуального шума.
Минусы конкретные. iOS троттлит фоновые пуши, Apple советует не больше двух-трёх в час, в режиме энергосбережения доставка откладывается, а после смахивания приложения из списка задач они не приходят вовсе. На Android сообщения обычного приоритета в Doze ждут окна обслуживания, высокий приоритет без показа уведомления система со временем понижает, после принудительной остановки не приходит ничего.
Тестировать нужно на реальном устройстве, отправляя через APNs с нужными заголовками или через FCM HTTP v1 API. Ответ APNs 200 значит только «принято», поэтому результат смотрят по логам приложения и по изменению данных. Матрица: передний план, фон, выгружено системой, закрыто пользователем, энергосбережение, нет сети.
Где спотыкаются
Строят на тихом пуше критичную логику, например отзыв доступа. Нужен запасной путь: проверка при открытии приложения или периодическая синхронизация.
Тестируют только с приложением на экране и делают вывод, что всё работает, хотя интересны как раз фоновые сценарии.
Отправляют на iOS с приоритетом 10 или вместе с alert и получают отказ APNs или обычное уведомление, а на Android путают notification и data сообщения.