Реализация Notification Content Extension для iOS

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация Notification Content Extension для iOS
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация Notification Content Extension для iOS

Notification Content Extension отображается, когда пользователь длинно нажимает на уведомление (3D Touch / Haptic Touch) или разворачивает его в Notification Center. Вместо стандартного превью система показывает кастомный UIViewController, который определяете вы. Кнопки действий остаются — их добавляем через UNNotificationCategory.

Что можно реализовать

Интерактивный предпросмотр заказа с картой и адресом доставки прямо в уведомлении. Карточка входящего сообщения с аватаром отправителя и полным текстом. Уведомление о матче с live-счётом, который обновляется через UNUserNotificationCenter.current().getDeliveredNotifications(). Форма быстрого ответа без открытия приложения.

Это не требует, чтобы пользователь открывал приложение — всё происходит в системном UI.

Как работает

Content Extension — отдельный таргет с NSExtensionPrincipalClass, унаследованным от UIViewController, который реализует UNNotificationContentExtension. Метод didReceive(_ notification:) получает UNNotification и должен заполнить UI данными из payload.

В Info.plist Extension'а задаём UNNotificationExtensionCategory — строку, совпадающую с identifier у UNNotificationCategory в основном приложении. Только уведомления с этой категорией будут показывать кастомный UI.

class NotificationViewController: UIViewController, UNNotificationContentExtension {
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var bodyLabel: UILabel!

    func didReceive(_ notification: UNNotification) {
        let content = notification.request.content
        titleLabel.text = content.title
        bodyLabel.text = content.body
        // парсим content.userInfo для дополнительных данных
    }

    func didReceive(_ response: UNNotificationResponse,
                    completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
        // обработка нажатия на action buttons
        completion(.dismissAndForwardAction)
    }
}

Кастомный размер. Высота кастомного UI задаётся в Info.plist через UNNotificationExtensionInitialContentSizeRatio (отношение высоты к ширине) — например, 0.6 для карточки. Если нужна динамическая высота, меняем preferredContentSize в коде.

Медиа. Если Notification Service Extension скачал attachment, он доступен через notification.request.content.attachments. Content Extension может отображать это изображение в кастомном UIImageView вместо системного превью.

Ограничения

Extension не имеет доступа к сети во время отображения — это не баг, это ограничение sandbox. Данные должны приходить в payload (до 4KB для APNs) или через attachment (скачанный заранее Service Extension'ом).

Интерактивные элементы (UIButton, UITextField) поддерживаются, но тапы по ним обрабатываются через didReceive(_:completionHandler:) — не через обычные IBAction. Это неочевидно и ломает классику UIKit на первом же проекте.

Что входит в работу

  • Создание таргета Notification Content Extension
  • Кастомный UI для развёрнутого уведомления (XIB или программный)
  • Регистрация UNNotificationCategory с action buttons в основном приложении
  • Обработка action responses и передача управления приложению
  • App Groups для доступа к shared данным
  • Тестирование через Xcode Simulator (Notification Content Extension работает в симуляторе, в отличие от Service Extension)

Сроки

Базовый кастомный UI для одного типа уведомлений: 1–2 дня. С несколькими категориями, интерактивными элементами и интеграцией с Service Extension: 2–3 дня. Стоимость рассчитывается индивидуально.