Rate this page:

Push-уведомления в Kit Chat для iOS

Voximplant Kit отправляет alert push-уведомления о новых входящих сообщениях в чате. Уведомления доставляются через APNs и отображаются системой автоматически. Приложению не нужно формировать push-уведомления самостоятельно.

В этой статье описано, как зарегистрировать push-токен, настроить обработку уведомлений в активном приложении, изменить содержимое уведомлений и протестировать их.

Информация

Перед началом работы настройте push-уведомления в Voximplant Kit, как описано в инструкции.

Содержание

Copy URL

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

Copy URL

Пример payload, который приходит от Voximplant Kit:

Пример payload push-уведомления
  • aps — системный блок APNs, необходимый для получения и отображения alert push-уведомления со стандартным звуком. Поле mutable-content: 1 позволяет изменить уведомление перед показом через Notification Service Extension.

  • voximplant_im — блок данных от Voximplant Kit:

    • client_id — идентификатор клиента, которому предназначено push-уведомление
    • message_uuid — UUID сообщения
    • with_attachments — флаг наличия вложений

Регистрация push-токена

Copy URL

Чтобы приложение получало уведомления, запросите у пользователя разрешение на показ уведомлений и зарегистрируйте APNs-токен в Voximplant Kit.

Запрос разрешения и получение токена

Запрос разрешения и получение токена

Регистрация токена в SDK

Регистрация push-токена

Значение параметра isDevelopment зависит от типа сборки приложения:

  • true — сборка через Xcode в режиме debug, токен получен из sandbox APNs

  • false — сборка для App Store или TestFlight, токен получен из production APNs

Чтобы прекратить получение уведомлений, используйте VIKitChatUI.unregisterPushToken(_:isDevelopment:completion:) аналогичным образом.

Обработка уведомлений

Copy URL

Управление уведомлениями в активном приложении

Когда приложение активно, iOS по умолчанию не отображает push-уведомления, если делегат UNUserNotificationCenterDelegate не назначен или метод userNotificationCenter(_:willPresent:withCompletionHandler:) не реализован.

Если уведомления нужны в активном приложении, но не на всех экранах, назначьте делегат UNUserNotificationCenter и задайте логику в методе userNotificationCenter(_:willPresent:withCompletionHandler:).

В примере ниже уведомления отображаются всегда, кроме случая, когда VIKitChatViewController отображается на экране:

Обработка уведомлений в активном приложении

Payload push-уведомления от Voximplant Kit содержит ключ voximplant_im. Этот ключ можно использовать для фильтрации, если приложение получает push-уведомления из разных источников.

Кастомизация уведомлений

Copy URL

Кастомизация уведомлений выполняется через Notification Service Extension. Расширение получает push-уведомление до того, как iOS покажет уведомление пользователю, и позволяет изменить отображаемый заголовок, текст, звук, badge или другие параметры.

Доступные варианты кастомизации:

  • Изменение заголовка и текста

  • Локализация

  • Управление звуком

  • Управление badge

  • Использование данных из payload push-уведомления

  • Выполнение асинхронного кода

Чтобы изменить содержимое уведомлений, создайте отдельный таргет в Xcode: File > New > Target > Notification Service Extension. Notification Service Extension получает push-уведомление до того, как iOS покажет уведомление пользователю, и позволяет изменить отображаемое содержимое.

Ограничения Notification Service Extension:

  • Примерно 30 секунд на обработку. После этого вызывается UNNotificationServiceExtension.serviceExtensionTimeWillExpire()

  • Примерно 24 МБ памяти

  • Отдельный процесс. Для общих данных с приложением используется App Group

Примечание

Если в коде Notification Service Extension выполнение завершается через return без вызова contentHandler, то уведомление не отобразится.

Если Notification Service Extension уже содержит проверки для других типов push-уведомлений, убедитесь, что push-уведомления от Voximplant Kit с ключом voximplant_im в payload проходят эти проверки и для них вызывается contentHandler. Иначе уведомление не отобразится пользователю.

В базовом варианте Notification Service Extension получает push-уведомление от Voximplant Kit и изменяет содержимое уведомления, например заменяет текст:

Кастомизация текста уведомления

Другие варианты кастомизации

Copy URL

Локализация

Для локализации текста уведомления используется NSLocalizedString, который подставляет значение из .strings-файла таргета Notification Service Extension в зависимости от языка устройства:

Локализация текста уведомления

Отключение звука

По умолчанию push-уведомление от Voximplant Kit приходит со звуком. Чтобы отключить звук, используйте следующий код:

Отключение звука уведомления
Информация

При включенном режиме Не беспокоить iOS заглушает звук уведомлений независимо от этой настройки.

Управление badge

Badge — это числовой счетчик на иконке приложения. Для работы с badge между Notification Service Extension и приложением необходим общий App Group:

Управление badge

Использование данных из payload

Данные из payload push-уведомления можно использовать для изменения уведомления, которое увидит пользователь. В примере ниже при наличии вложений (with_attachments: 1) к уведомлению добавляется иконка:

Использование данных из payload

Выполнение асинхронного кода

Notification Service Extension поддерживает выполнение асинхронного кода, например сетевых запросов. В примере ниже загружается изображение для отображения в уведомлении:

Выполнение асинхронного кода

В данном примере реализации, если запрос не успеет выполниться за ~30 секунд, serviceExtensionTimeWillExpire() передаст bestAttemptContent с немодифицированным содержимым. Пользователь увидит уведомление без изображения.

Тестирование push-уведомлений

Copy URL

Перед интеграцией рекомендуется протестировать push-уведомления с помощью Apple Push Notifications Console, подробнее см. в документации. Консоль позволяет отправить APNs push с заданным payload на устройство по его токену.

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

Для тестирования можно использовать следующий payload. При необходимости замените значения на тестовые данные:

Пример payload для тестирования push-уведомления

Миграция с предыдущих версий

Copy URL

В версиях SDK до 1.6.0 для кастомизации уведомлений использовались API SDK. Начиная с версии 1.6.0 эти API устарели (deprecated).

При обновлении выполните следующие действия:

  1. Удалите вызовы configureChatNotification(configuration:) и handlePushNotification(_:completion:).

  2. Удалите использование VINotificationConfiguration.

  3. Удалите обработку push-уведомлений, связанных с чатом, в application(_:didReceiveRemoteNotification:fetchCompletionHandler:).

  4. Замените VIPushNotificationError на VIPushTokenError.

  5. Для кастомизации уведомлений используйте Notification Service Extension, как описано выше.

Rate this page: