Как ведут себя пуш-уведомления при использовании одного аккаунта на нескольких устройствах?
Что проверяют
Понимаете ли вы, что пуш адресуется устройству, а не аккаунту, и умеете ли вывести из этого тест-кейсы. Следом обычно спрашивают, что должно происходить после выхода из аккаунта на одном из устройств.
Как отвечать
Сначала механика. Каждая установка приложения регистрируется в сервисе доставки (APNs у Apple, Firebase Cloud Messaging у Android) и получает токен устройства. Бэкенд хранит у пользователя список токенов и сам решает, на какие отправить. Значит, поведение на нескольких устройствах задаёт логика сервера, а не платформа, и первым делом стоит уточнить требования:
- куда отправлять: на все устройства, только на последнее активное или не слать остальным, пока приложение открыто на одном;
- синхронизация прочтения: сама не происходит. Убрать прочитанное на телефоне уведомление с планшета обычно можно лишь тихим пушем, а счётчик на иконке считает сервер;
- замена вместо дубля:
apns-collapse-idна iOS иtagуведомления на Android заменяют предыдущее уведомление, а не складывают их в стопку.
Тест-кейсы, которые стоит назвать:
- несколько устройств: один аккаунт на двух-трёх устройствах разных платформ, приложение открыто, в фоне, выгружено;
- выход: на этом устройстве пуши прекращаются, на остальных продолжают приходить;
- смена аккаунта: новый пользователь на том же устройстве не получает пуши предыдущего;
- новый токен: переустановка, восстановление из бэкапа;
- запрет уведомлений: выключены в системных настройках одного устройства;
- без сети: что устройство покажет, когда появится связь.
Инструменты: тестовая отправка из консоли Firebase, логи бэкенда с токенами, Charles или Proxyman, чтобы увидеть регистрацию токена.
Где спотыкаются
Думают, что пуш отправляется «на аккаунт» и платформа сама разошлёт его по устройствам. Из-за этого не проверяют, что сервер удаляет токен при выходе, а это уже утечка чужих данных.
Проверяют только открытое приложение. В фоне и после выгрузки уведомление показывает система, и поведение отличается.
Забывают про устаревшие токены. APNs и FCM сообщают, что токен недействителен, и сервер обязан удалять такие записи, иначе рассылка копит ошибки.