EngX Code Review: начни писать код еще лучше и построй эффективный процесс код-ревью.

Как настроить iOS Push-уведомления? Детальный гайд

Какие основные виды iOS Push-уведомлений существуют? Как их правильно внедрить? Как отправить уведомление так, чтобы пользователь его не увидел? iOS developer Надзея Савицкая рассказывает на конкретных примерах и делится кодом.

iOS developer Надзея Савицкая

Читать другие статьи эксперта: 

    Что-то на айтишном31 мая 2023время чтения: 4 мин

    — С пушами мы все сталкиваемся каждый день. От многих даже устаем и запрещаем приложениям их отправлять. Но несмотря на то, что никто из разработчиков не может гарантировать на 100% доставку уведомлений пользователям, они все еще остаются одним из главных инструментов вовлечения потребителей, — рассказывает Надзея.

    Local Push Notifications

    — Начнем с самого простого. У меня как у разработчика нет ничего, кроме Xcode и платного аккаунта разработчика. Свое приложение я разрабатываю одна, без back-end и без использования каких-либо сторонних сервисов, — улыбается Надзея, — Да, вы не ослышались: для того, чтобы использовать push notifications, нужно иметь платный аккаунт разработчика. С таким сетапом я смогу отправлять пользователям только Local Push Notifications. Как это выглядит для разработчика: в Xcode во вкладке Signing & Capabilities добавляется новая capability — Push Notifications.

    Push notifications in Xcode

    Дальше мы уже можем писать код для запроса разрешения на отправку уведомлений пользователю. Когда будет разрешение, мы зарегистрируем токен девайса в APNs — Apple Push Notifications Service. Этот токен — адрес конкретного девайса, по которому можно будет отправлять уведомления конкретному пользователю.

    Пользователь в любой момент может запретить отправку уведомлений. Разработчику на это не надо никак реагировать и что-либо дополнительно писать в коде. Девайс-токен остается активным на тот случай, когда пользователь передумает и снова включит отправку уведомлений.

    Фрагмент кода 1
    Фрагмент кода 1


    — Для отправки Local Push Notifications нужно написать еще пару строк кода, — добавляет Надзея, — Можно создать расписание с любым количеством уведомлений так, чтобы они все отправлялись в нужном графике. Например, это может быть схема из 5 уведомлений, где первое уведомление отправляется через сутки от последней пользовательской сессии, второе — через три дня, дальше — через пять, семь и десять, или как вы сами придумаете.

    Фрагмент кода 2
    Фрагмент кода 2


    — Минусы Local Push Notifications заключаются в том, что их никак не изменить после релиза приложения. Для любых изменений в текстах или расписании нужно будет пересобирать сборку и заново проходить ревью.

    Remote Push Notifications

    Инфографика: Remote Push Notifications

    — К нашему сетапу из Local Push Notifications надо добавить провайдер, и можно будет отправлять уведомления пользователям более гибко. Под провайдером может быть как серверная часть приложения, так и любой из сторонних сервисов, таких как Firebase, Amazon Simple Notification Service, Braze, Kulumos, Onesignal, Airship. Мы можем использовать в одном приложении как Local Push Notifications, так и Remote Push Notifications.

    Для настройки любого из вышеперечисленных сервисов разработчику необходимо с личного кабинета developer.apple.com скачать ключ .p8 и загрузить в личном кабинете провайдера, например, Firebase. Как интегрировать любой из сервисов в свое приложение, лучше всего опишут документации на официальных сайтах. Если сервис был настроен, а отправленное тестовое уведомление так и не доходит до нужного девайса, можно воспользоваться приложением для проверки Remote Push Notifications — например, onmyway133.com. Так можно понять, на какой стороне ошибка: в интеграции сервиса или в настройке уведомлений.

    Remote Notification Payload

    — По своей сути, уведомление — это некоторая информация, которая написана определенным образом, она называется payload, — объясняет Надзея, — Эту информацию можно редактировать, добавляя или убирая некоторые поля, тем самым изменяя внешний вид и функции уведомлений. Давайте рассмотрим некоторые примеры.

    Самое простое уведомление содержит Title и Body:

    Фрагмент кода 3
    Фрагмент кода 3


    На месте простого текста можно отправлять ключи локализации для того, чтобы пользователю отображался текст на нужном языке:

    Фрагмент кода 4
    Фрагмент кода 4


    Можно добавить поле для добавления badge и нужного числа на нем:

    Фрагмент кода 5
    Фрагмент кода 5


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

    Фрагмент кода 6
    Фрагмент кода 6


    И передавать какую-то кастомную информацию:

    Фрагмент кода 7
    Фрагмент кода 7

    Silent Push Notifications

    — Часто для клиент-серверного приложения разработчики хотят обновлять какую-то информацию, когда приложение у пользователя находится в бэкграунде (свернуто). Для этого подойдут Silent Push Notifications. При отправке таких уведомлений пользователи их не увидят, но приложение сможет понять, что необходимо сделать какое-то действие, например, обновить какую угодно информацию с сервера.

    Для реализации этих уведомлений в Xcode во вкладке Signing & Capabilities добавляется еще одна capability — Background Modes. В ней выбирается пункт Remote notifications.

    Background Modes - Remote notifications

    В payload уведомления необходимо добавить поле "content-available" со значением 1 или true.

    Фрагмент кода 8
    Фрагмент кода 8


    Теперь разработчику осталось только поймать такое уведомление. В didReceiveRemoteNotification методе необходимо сделать проверку на Silent Push Notification и вызвать нужный метод обновления.

    Фрагмент кода 9
    Фрагмент кода 9


    Silent Push Notification не придет на устройство если:

    1. Приложение было выгружено из памяти, то есть оно не в background mode.
    2. На устройстве включен режим “Low Data Mode“.

    Другие Push Notifications

    — Кроме вышеперечисленного есть еще следующие виды уведомлений:

    1. Provisional Push Notifications — пользователь не получит запрос на разрешение отправки ему уведомлений. И уведомления будут отображаться без звука и только в Центре уведомлений.
    2. Critical Alert Push Notification — такое уведомление придет пользователю со звуком, даже если был включен режим «Не беспокоить». Вам потребуется специальное разрешение от Apple, чтобы использовать эту опцию, потому что она предназначена только для особых случаев.

    — Я постаралась рассказать про основные виды iOS Push Notifications, — завершает Надзея, — Надеюсь, статья была полезной.

    Чтобы делиться своей экспертизой в блоге Anywhere Club, заполняй форму Стань героем клуба.

    Материалы по теме
    Следи за новостями на любимых платформах