Notification Content Extension — шта је то, како креирати прилагођени интерфејс за iOS

Аутор: IT Sectr Објављено: 2026-03-21 Време читања: 8 мин

Notification Content Extension — је iOS екстензија која омогућава замену стандардног интерфејса пусх обавештења прилагођеним UIView. Програмер добија потпуну контролу над приказом садржаја: слике, видео, анимације, прилагођене фонтове и интерактивне елементе. Према Apple Developer, 2025, Notification Content Extension подржава било који UIKit интерфејс у ограниченом простору обавештења.

Главне тачке

  • Notification Content Extension — iOS екстензија за прилагођени UI пусх обавештења.
  • Екстензија имплементира протокол UNNotificationContentExtension са обавезном методом didReceive.
  • Прилагођени интерфејс се креира у Storyboard и може садржати било које UIKit компоненте.
  • Максимална величина екстензије — 50 MB и не би требало да прелази 12 MB у компресованом облику.
  • Екстензија се активира за обавештења са наведеним categoryIdentifier.

Шта је Notification Content Extension

Notification Content Extension — је апп екстензија у iOS која замењује стандардни шаблон приказа пусх обавештења прилагођеним UIView. За разлику од обичног обавештења где је садржај ограничен на наслов, поднаслов и тело, екстензија омогућава приказ било ког UIKit интерфејса: мапу са координатама, графикон, галерију слика или формулар за унос.

Како ово ради

Када iOS прими пусх обавештење са наведеним categoryIdentifier, систем проверава да ли је екстензија регистрована за ову категорију. Ако јесте — систем покреће екстензију у одвојеном процесу и прослеђује јој садржај обавештења. Екстензија приказује свој интерфејс уместо стандардног. Корисник интерагује са прилагођеним интерфејсом без отварања главне апликације.

Разлика у односу на Notification Service Extension

Важно је не мешати Notification Content Extension са Notification Service Extension. Service Extension обрађује садржај пре приказа обавештења (преузимање прилога, дешифровање). Content Extension замењује интерфејс након пријема готовог садржаја. Обе екстензије могу радити у тандему: Service Extension припрема податке, Content Extension их приказује.

КарактеристикаContent ExtensionService Extension
НаменаПрилагођени UI обавештењаМодификација садржаја пре приказа
Време извршењаДок корисник види обавештењеДо 30 секунди у позадини
ИнтерфејсПотпуни UIKit UIViewНема интерфејса
APIUNNotificationContentExtensionUNNotificationServiceExtension

Ограничења екстензије

Notification Content Extension ради у изолованом процесу са ограниченим ресурсима. Екстензија нема приступ главном складишту апликације преко NSUserDefaults, осим App Group. Величина екстензије је ограничена на 50 MB у распакованом облику. Време за приказ садржаја је такође ограничено — ако екстензија не заврши ажурирање у разумном времену, систем је затвара.

Креирање Notification Content Extension у Xcode

За креирање екстензије у Xcode потребно је додати нови target типа Notification Content Extension. Xcode ће аутоматски креирати MainInterface.storyboard са контролером који наслеђује UIViewController и имплементира UNNotificationContentExtension.

Додавање target-екстензије

У Xcode изаберите File → New → Target → Notification Content Extension. Наведите име екстензије, језик (Swift или Objective-C) и уверите се да је пројекат повезан са истим тимом програмера. Након креирања target-а, појавиће се фолдер са три датотеке: MainInterface.storyboard, Info.plist и датотека контролера.

Подешавање Info.plist

У Info.plist екстензије обавезно се наводи низ NSExtensionAttributes са кључем UNNotificationExtensionCategory. Овај низ садржи идентификаторе категорија обавештења за које ће се екстензија активирати. Опциони кључ UNNotificationExtensionInitialContentSizeRatio поставља почетни однос страница прилагођеног интерфејса за правилно позиционирање.

Архитектура фолдера екстензије

Препоручује се одржавање чисте архитектуре у target-екстензији: посебан фолдер за контролере, посебан за прилагођене приказе. Пошто је екстензија засебан бинарни фајл, код главне апликације није директно доступан. За дељење кода креирајте засебан framework или користите App Group за податке.

Имплементација протокола UNNotificationContentExtension

UNNotificationContentExtension — протокол који контролер у Notification Content Extension мора да имплементира. Једина обавезна метода је didReceive(_:with:), која се позива при пријему обавештења. Контролер прима обавештење и готов view controller који треба ажурирати подацима.

Основна имплементација контролера

Контролер екстензије мора да наслеђује UIViewController и имплементира UNNotificationContentExtension. Storyboard или xib је повезан са овим контролером. При пријему обавештења, метода didReceive прослеђује садржај, а контролер ажурира своје приказе.

swift
import UIKit
import UserNotifications
import UserNotificationsUI

class CustomNotificationViewController: UIViewController {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var customImageView: UIImageView!

    func didReceive(
        notification: UNNotification
    ) {
        let content = notification.request.content
        titleLabel.text = content.title
        loadAttachment(content.attachments.first)
    }

    private func loadAttachment(attachment: UNNotificationAttachment?) {
        guard let url = attachment?.URL else { return }
        if let image = UIImage(contentsOfFile: url.path) {
            customImageView.image = image
        }
    }
}

extension CustomNotificationViewController: UNNotificationContentExtension {
    func didReceive(
        notification: UNNotification
    ) {
        didReceive(notification: notification)
    }
}

Управљање величином интерфејса

Систем одређује величину прилагођеног интерфејса на основу кључа UNNotificationExtensionInitialContentSizeRatio у Info.plist и тренутног садржаја. Препоручује се постављање овог кључа на вредност 0.1 за минималну почетну величину, а затим промена величине путем preferredContentSize након учитавања садржаја.

Прилагођавање интерфејса и интерактивност

Notification Content Extension даје потпуну слободу у креирању интерфејса. Могу се користити било које UIKit компоненте: UITableView, MKMapView, WKWebView, UIStackView. Међутим, важно је узети у обзир ограничени простор обавештења и оптимизовати перформансе.

Додавање мапе у обавештење

Један од популарних сценарија је приказ мапе са локацијом. За то се у Storyboard екстензије додаје MKMapView, а контролер прослеђује координате из садржаја обавештења. Важно је не заборавити да додате MapKit у target екстензије. При коришћењу мапе узмите у обзир ограничење меморије екстензије — учитавање сложених плочица може премашити доступне ресурсе.

Анимације и прелази

Notification Content Extension подржава UIView анимације, укључујући промену величине, померање и провидност елемената. При уласку у проширени режим обавештења можете покренути анимацију појављивања садржаја. Анимације треба да буду кратке (до 0.5 секунди) и да не ометају корисника у интеракцији са обавештењем. Избегавајте бесконачне анимације — оне троше батерију и смањују перформансе.

Обрада додира у прилагођеном интерфејсу

Пошто је екстензија пуноправни UIViewController, можете додавати гестове и обраду додира. UIKit гестови (UITapGestureRecognizer, UIButton) раде стандардно. За радње које захтевају отварање апликације користите делегата екстензије или userNotificationCenter. Интерактивни елементи треба да буду довољно велики за удобан додир у ограниченом простору — минимална величина touch target-а је 44x44 тачке према препорукама Apple.

Рад са медијима и прилозима

Медијски садржај — кључна могућност Notification Content Extension. Обавештење може садржати слике, GIF, аудио и видео који се приказују у прилагођеном интерфејсу. Прилози се достављају путем UNNotificationAttachment, који може бити додат и од стране сервера кроз payload и од стране Notification Service Extension након преузимања. Подржани формати су JPEG, PNG, MPEG-4 и MP3.

Приказ медија у екстензији

За приказ слике довољно је добити UNNotificationAttachment из садржаја обавештења и учитати га са локалног URL-а. Важно је запамтити да екстензија има приступ само локалним фајловима — удаљени ресурси морају бити претходно преузети од стране Service Extension. Максимална величина прилога — 50 MB на iOS 15+, ограничење се повећава са сваким наредним ажурирањем. За подршку више слика користите UNNotificationAttachment са различитим идентификаторима и прикажите их путем UIPageViewController.

Учитавање и приказ слика

За приказ слике у прилагођеном интерфејсу екстензија добија UNNotificationAttachment из садржаја обавештења и учитава га са локалног URL-а. Прилог мора бити претходно преузет од стране Notification Service Extension — Content Extension нема приступ мрежи. Максимална величина медијског прилога — 50 MB на iOS 15+, у ранијим верзијама ограничење је било 10 MB. Екстензија треба да правилно обради одсуство прилога и прикаже fallback интерфејс. За претходно учитавање слика ниске резолуције користите верзије умањених приказа креиране од стране Service Extension пре причвршћивања.

Репродукција видеа у обавештењу

iOS подржава репродукцију видеа у Notification Content Extension путем AVPlayerLayer. Екстензија може приказати видео плејер са контролним дугмадима директно у обавештењу. Ово је посебно корисно за апликације за видео надзор, стриминг или преглед садржаја. Аутоматска репродукција без звука је дозвољена под условом да корисник очекује медијски садржај у овом обавештењу. При имплементацији видео плејера додајте контролне елементе: play/pause, траку напретка и дугме за затварање. Уверите се да видео не почиње аутоматски са звуком — ово крши Apple препоруке за корисничко искуство. За слајд шоу од више слика користите анимирани прелаз између њих путем UIView.transition са опцијом прелаза окретања странице.

Оптимизација перформанси екстензије

Notification Content Extension ради у ограниченом окружењу са лимитом меморије од око 50 MB. За оптимизацију перформанси користите лењо учитавање слика, избегавајте тешка израчунавања на главној нити и примењујте Auto Layout са једноставним ограничењима. Тешке операције, попут обраде слика или парсирања података, извршавајте у позадинским редовима (DispatchQueue.global). При прекорачењу лимита меморије систем ће затворити екстензију и корисник ће видети стандардно обавештење. Препоручује се профилисање екстензије путем Instruments (Allocations и Time Profiler) пре објављивања, као и провера потрошње меморије на стварним уређајима са различитим верзијама iOS.

Често постављана питања

Може ли се користити SwiftUI у Notification Content Extension?

Да, од iOS 16 Notification Content Extension подржава SwiftUI путем UIHostingController. Међутим, UIKit остаје стабилнији избор за сложене интерфејсе због ограничене подршке SwiftUI у екстензијама.

Зашто се екстензија не активира за моје обавештење?

Проверите да се categoryIdentifier у payload-у обавештења поклапа са UNNotificationExtensionCategory у Info.plist екстензије. Такође се уверите да је екстензија додата у main app target и да је исправно потписана.

Како пренети податке из главне апликације у екстензију?

Користите App Group — заједничко складиште (UserDefaults suite) или контејнер фајлова. Главна апликација и екстензија морају бити у истом групи програмера и имати омогућену могућност App Groups.

Како ажурирати садржај екстензије без новог обавештења?

Користите методу didReceive(_:with:) са UNNotificationContentExtensionMediaPlayPauseButtonType за контролу медија или затражите ажурирање преко делегата. Потпуно ажурирање садржаја без новог обавештења није могуће.

Како отклонити грешке у Notification Content Extension?

Изаберите target екстензије у Xcode и покрените на симулатору. Користите lldb и breakpoint-е као у обичној апликацији. За тестирање пошаљите пусх обавештење путем Firebase Console или локално путем Pusher-а.

Закључак

  • Notification Content Extension — iOS екстензија за прилагођени приказ пусх обавештења.
  • Екстензија имплементира UNNotificationContentExtension и пружа потпуни UIKit интерфејс.
  • Активира се за обавештења са одговарајућим categoryIdentifier.
  • Подржава било које UI компоненте: мапе, слике, видео, анимације.
  • Ради у изолованом процесу са приступом путем App Group.
  • Ограничење величине — 50 MB распаковане екстензије.
  • За медијски садржај користите UNNotificationAttachment припремљен од стране Service Extension.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође