Как на мобильном устройстве приходит пуш-уведомление о готовности заказа?
Что проверяют
Видите ли вы всю цепочку доставки, чтобы понимать, где искать баг, когда пуш не пришёл. Следом обычно просят составить набор проверок для этой фичи или рассказать, как вы локализуете проблему: бэкенд, сервис доставки или устройство.
Как отвечать
Опишите цепочку по звеньям:
- регистрация: приложение просит разрешение (на iOS всегда, на Android начиная с 13-й версии нужно разрешение
POST_NOTIFICATIONS), получает токен от APNs или FCM и отправляет его на бэкенд вместе с идентификатором пользователя; - событие: заказ переходит в статус «готов», бэкенд, часто через очередь, формирует уведомление;
- отправка: сервер шлёт запрос в FCM HTTP v1 API или в APNs по HTTP/2 с токеном и payload. FCM умеет доставлять и на iOS, через тот же APNs;
- доставка: сервис держит соединение с устройством и доставляет, когда оно в сети. Гарантии нет, при долгом офлайне сообщение истекает по TTL;
- показ: если приложение в фоне, уведомление показывает ОС, если на переднем плане, решает само приложение. Тап открывает диплинк на экран заказа.
Отсюда проверки: разрешение выдано и отозвано; приложение открыто, свёрнуто и выгружено; офлайн с последующим подключением; переустановка (токен меняется); выход из аккаунта; несколько устройств; режим «Не беспокоить» и энергосбережение; текст, локализация и диплинк. Отдельно: после принудительной остановки приложения в настройках Android пуши не приходят до следующего запуска, и это не баг. Без бэкенда пуш можно отправить из консоли Firebase, на симулятор iOS командой xcrun simctl push, а логи на Android смотреть через adb logcat.
Где спотыкаются
Считают, что сервер шлёт пуш прямо на телефон. Без звена APNs или FCM нельзя объяснить, почему доставка не гарантирована и почему пуш приходит с задержкой.
Проверяют только открытое приложение. Чаще всего ломается фон и выгруженный процесс, особенно на прошивках с агрессивным энергосбережением.
Не проверяют жизненный цикл токена: после выхода из аккаунта и входа под другим пользователем устройство продолжает получать уведомления о чужих заказах.