Notification Content Extension — је iOS екстензија која омогућава замену стандардног интерфејса пусх обавештења прилагођеним UIView. Програмер добија потпуну контролу над приказом садржаја: слике, видео, анимације, прилагођене фонтове и интерактивне елементе. Према Apple Developer, 2025, Notification Content Extension подржава било који UIKit интерфејс у ограниченом простору обавештења.
Главне тачке
Notification Content Extension — је апп екстензија у iOS која замењује стандардни шаблон приказа пусх обавештења прилагођеним UIView. За разлику од обичног обавештења где је садржај ограничен на наслов, поднаслов и тело, екстензија омогућава приказ било ког UIKit интерфејса: мапу са координатама, графикон, галерију слика или формулар за унос.
Када iOS прими пусх обавештење са наведеним categoryIdentifier, систем проверава да ли је екстензија регистрована за ову категорију. Ако јесте — систем покреће екстензију у одвојеном процесу и прослеђује јој садржај обавештења. Екстензија приказује свој интерфејс уместо стандардног. Корисник интерагује са прилагођеним интерфејсом без отварања главне апликације.
Важно је не мешати Notification Content Extension са Notification Service Extension. Service Extension обрађује садржај пре приказа обавештења (преузимање прилога, дешифровање). Content Extension замењује интерфејс након пријема готовог садржаја. Обе екстензије могу радити у тандему: Service Extension припрема податке, Content Extension их приказује.
| Карактеристика | Content Extension | Service Extension |
|---|---|---|
| Намена | Прилагођени UI обавештења | Модификација садржаја пре приказа |
| Време извршења | Док корисник види обавештење | До 30 секунди у позадини |
| Интерфејс | Потпуни UIKit UIView | Нема интерфејса |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension ради у изолованом процесу са ограниченим ресурсима. Екстензија нема приступ главном складишту апликације преко NSUserDefaults, осим App Group. Величина екстензије је ограничена на 50 MB у распакованом облику. Време за приказ садржаја је такође ограничено — ако екстензија не заврши ажурирање у разумном времену, систем је затвара.
За креирање екстензије у Xcode потребно је додати нови target типа Notification Content Extension. Xcode ће аутоматски креирати MainInterface.storyboard са контролером који наслеђује UIViewController и имплементира UNNotificationContentExtension.
У Xcode изаберите File → New → Target → Notification Content Extension. Наведите име екстензије, језик (Swift или Objective-C) и уверите се да је пројекат повезан са истим тимом програмера. Након креирања target-а, појавиће се фолдер са три датотеке: MainInterface.storyboard, Info.plist и датотека контролера.
У Info.plist екстензије обавезно се наводи низ NSExtensionAttributes са кључем UNNotificationExtensionCategory. Овај низ садржи идентификаторе категорија обавештења за које ће се екстензија активирати. Опциони кључ UNNotificationExtensionInitialContentSizeRatio поставља почетни однос страница прилагођеног интерфејса за правилно позиционирање.
Препоручује се одржавање чисте архитектуре у target-екстензији: посебан фолдер за контролере, посебан за прилагођене приказе. Пошто је екстензија засебан бинарни фајл, код главне апликације није директно доступан. За дељење кода креирајте засебан framework или користите App Group за податке.
UNNotificationContentExtension — протокол који контролер у Notification Content Extension мора да имплементира. Једина обавезна метода је didReceive(_:with:), која се позива при пријему обавештења. Контролер прима обавештење и готов view controller који треба ажурирати подацима.
Контролер екстензије мора да наслеђује UIViewController и имплементира UNNotificationContentExtension. Storyboard или xib је повезан са овим контролером. При пријему обавештења, метода didReceive прослеђује садржај, а контролер ажурира своје приказе.
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.
Често постављана питања
Да, од 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 за контролу медија или затражите ажурирање преко делегата. Потпуно ажурирање садржаја без новог обавештења није могуће.
Изаберите target екстензије у Xcode и покрените на симулатору. Користите lldb и breakpoint-е као у обичној апликацији. За тестирање пошаљите пусх обавештење путем Firebase Console или локално путем Pusher-а.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође