Как тестировать push-уведомления в мобильном приложении?

Ответ

Тестирование push-уведомлений охватывает их доставку, отображение, функциональность и работу в различных состояниях системы.

Основные области проверки:

  1. Доставка и отображение:

    • Уведомление приходит при наступлении целевого события (новое сообщение, напоминание).
    • Корректность содержимого: заголовок, текст, иконка (app icon и custom image).
    • Наличие и корректность звука и вибрации (согласно настройкам).
    • Отображение в шторке уведомлений и в центре уведомлений ОС.
  2. Интерактивность и действия:

    • Тап по уведомлению открывает приложение на правильном экране (deep linking).
    • Работают ли action-кнопки в уведомлении (например, "Ответить", "Отметить как прочитанное").
    • Правильная группировка уведомлений (например, по чатам).
  3. Работа в разных состояниях приложения:

    • Приложение активно и на переднем плане.
    • Приложение свёрнуто или находится в фоне.
    • Приложение полностью закрыто.
    • Устройство в режиме "Не беспокоить" (Do Not Disturb).
  4. Настройки системы и особенности ОС:

    • Поведение при отключении уведомлений для приложения в настройках ОС.
    • Влияние режимов энергосбережения (Battery Optimization) на доставку.
    • Особенности разных версий iOS и Android.
    • Локализация текста уведомлений.

Пример отправки тестового уведомления на Android через ADB:

# Отправка уведомления с данными
adb shell am broadcast -a com.example.app.PUSH_TEST 
  --es "title" "Test Title" 
  --es "message" "Test message body" 
  --es "type" "news"

Для iOS используйте сертификаты и payload, отправляемые через APNs (Apple Push Notification service) в sandbox-режиме.

Ответ 18+ 🔞

Да ты посмотри, какие нам тут танцы с бубном устраивают эти пуш-уведомления! Целая наука, блядь, а не фича. Сейчас разложу, как не сойти с ума, проверяя эту дичь.

Ну, поехали. Первым делом, конечно, доставка и показ. Главный вопрос — прилетело или нет? Если событие наступило (тебе письмо пришло или напоминалка сработала), а уведомление где-то в параллельной вселенной зависло — это пиздец, а не фича. Смотрим, чтобы всё на месте было: заголовок, текст, иконка (и родная, и кастомная, если есть). Звук должен быть тот, что заказывали, вибрация — как в настройках. И, само собой, эта хрень должна красуется в шторке и в центре уведомлений системы. Если нет — начинаем материться.

Дальше — интерактивность. Тыкнул на уведомление — приложение должно открыться ровно на том экране, где нужно, а не на главной с предложением зарегаться снова. Это называется deep linking, и если он не работает, то это просто пизда, а не уведомление. Action-кнопки типа «Ответить» или «Удалить» тоже должны шевелиться. И смотри, чтобы уведомления от одного чата, например, в кучку собирались, а не спамили по одному. Группировка, ёпта!

А теперь самое весёлое — состояния приложения. Тут три слона:

  1. Приложение открыто и у тебя перед носом. Уведомление может приходить тихо, а может и не приходить вовсе — зависит от логики. Проверяй.
  2. Приложение свёрнуто или в фоне. Вот тут оно должно прилетать в шторку обязательно, как гром среди ясного неба.
  3. Приложение убито, закрыто, похоронено. Уведомление всё равно должно прорваться, как назойливый комар, иначе какой в нём смысл?
  4. И отдельная песня — режим «Не беспокоить». Уведомление либо проходит с оговорками, либо нет — нужно смотреть по требованиям.

И, конечно, настройки системы — наш главный враг. Выключил уведомления для приложения в настройках телефона? Всё, пиши пропало, ни хуя не прилетит. Режим энергосбережения может эту хуйню задушить в зародыше. На разных версиях андроида и iOS одни и те же пушки могут вести себя, как два разных зверя. И да, если приложение мультиязычное — текст в пушах тоже должен переводиться, а не светить «Hello, Ivan» пользователю из Урюпинска.

Чё по тестам? На андроиде можно адб-командой впендюрить тестовое уведомление, чтобы не ждать, пока бекенд проснётся:

# Отправка уведомления с данными
adb shell am broadcast -a com.example.app.PUSH_TEST 
  --es "title" "Test Title" 
  --es "message" "Test message body" 
  --es "type" "news"

На iOS всё сложнее, там нужно через APNs в песочнице с сертификатами танцевать. Короче, ёперный театр.

Вот так вот, блядь. Кажется, просто — «ну пришло и пришло», а на деле — волнение ебать, и терпения нужно овердохуища.