Как тестировать push-уведомлений на симуляторе

Посмотрим как тестировать push-уведобления на симуляторе, разберем что такое apns фаил

Поможем в Telegram-чате для iOS разработчиков

Читается за 2 минуты Обновлено 16 дней назад

Перед тем как тестировать push-уведомления на симуляторе, нужно получить разрешение от пользователя. Как запросить разрешение написано в конце туториала. На симуляторе можно тестировать как обычные, так и Rich-уведомления, это которые с картинками, звуками и кнопками-действиями.

Apple Push Notification Service-сервер присылает устройствам файл c контентом уведомления. Чтобы тестировать пуш-уведомления, можно сэмулировать этот запрос

Можно это сделать через json-файл с данными, или через терминал.

Перетащить json-файла

Создаем файл с данными для пуша. Здесь я добавлю текст, звук и число в бейдже иконки приложения:

{
   "aps" : {
      "alert" : {
         "title" : "Game Request",
         "body" : "Bob wants to play poker"
      },
      "badge" : 9,
      "sound" : "bingbong.aiff"
   }
}

Вы можете указать больше контента, например, картинку или действия. Все доступные ключи для push-уведомлений по ссылке.

Теперь в файл нужно добавить Simulator Target Bundle, чтобы симулятор понимал какому таргету прилетает пуш:

{
   "aps" : {
      "alert" : {
         "title" : "Game Request",
         "body" : "Bob wants to play poker"
      }
   },
   "Simulator Target Bundle": "com.bundle.example"
}

Если бандл не указали, то получите такую ошибку:

 Ошибка, потому что не указали Target Bundle
Ошибка, потому что не указали Target Bundle

Если все в порядке, то на симуляторе появится пуш:

 Пуш уведомление
Пуш уведомление

Через Terminal

В этом способе вы так же используете APNS-файл, но передаете его через терминал. Проверьте в настройках Xcode что Command Line Tools установлен, иначе simctl будет выдавать ошибку. Если внизу не видно путь, то выберите еще раз версию Xcode:

 Включаем Command Line Tools
Включаем Command Line Tools

Для отправки пуша используется команда:

xcrun simctl push <id simulator> <bundle id> <path to apns file>

Bundle id - это бандл вашего приложения. А чтобы узнать id simulator используется команда:

xcrun simctl list

Она покажет список всех симуляторов и их id. Обратите внимание, у запущенного симулятора будет указанно Booted:

 Список всех доступных симуляторов
Список всех доступных симуляторов

Собираем команду с id симулятора и вызываем:

xcrun simctl push 4D1C144E-7C68-484D-894D-CF17928D3D3A com.bundle.example payload.apns

Если у вас запущен симулятор, то вместо ключа можно указать Booted, так пуш автоматически улетит на запущенный симулятор.

Если все сделано правильно получите такое сообщение:

 Сообщение об отправке push-уведомления
Сообщение об отправке push-уведомления

Разрешения

Чтобы push-уведомления показывались на симуляторе и устройстве, нужно запросить разрешение. Можно это сделать вручную или через нашу библиотеку.

Запрос разрешения

Импортируем UserNotifications и вызываем системный запрос:

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {(granted, error) in
   print("Permission Granted: \(granted)")
}

Запрашивать нужно в любом месте до отправки уведомлений. Примерно то же самое делает наша библиотека PermissionsKit

import PermissionsKit

Permission.notification.request {}

Сброс разрешения

Если нужно сбросить разрешение на push-уведомления, достаточно удалить приложение

Иногда разрешение может остаться даже после переустановки, тогда после удаления подождите минуту и установите снова
Поправить или дополнить статью через Pull Request