Перед тем как тестировать push-уведомления на симуляторе, нужно получить разрешение от пользователя. Как запросить разрешение написано в конце туториала. На симуляторе можно тестировать как обычные, так и Rich-уведомления, это которые с картинками, звуками и кнопками-действиями.
Можно это сделать через 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"
}
Если бандл не указали, то получите такую ошибку:
Если все в порядке, то на симуляторе появится пуш:
Через Terminal
В этом способе вы так же используете APNS-файл, но передаете его через терминал. Проверьте в настройках Xcode что Command Line Tools установлен, иначе simctl будет выдавать ошибку. Если внизу не видно путь, то выберите еще раз версию Xcode:
Для отправки пуша используется команда:
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-уведомления показывались на симуляторе и устройстве, нужно запросить разрешение. Можно это сделать вручную или через нашу библиотеку.
Запрос разрешения
Импортируем UserNotifications и вызываем системный запрос:
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {(granted, error) in
print("Permission Granted: \(granted)")
}
Запрашивать нужно в любом месте до отправки уведомлений. Примерно то же самое делает наша библиотека PermissionsKit
import PermissionsKit
Permission.notification.request {}
Сброс разрешения
Если нужно сбросить разрешение на push-уведомления, достаточно удалить приложение