Rich Notification је проширени формат iOS push обавештења који укључује медијске прилоге, интерактивна дугмад и прилагођене интерфејсе за побољшање корисничког искуства. За разлику од стандардних текстуалних обавештења, Rich Notification може да приказује слике, видео и аудио директно у банеру или на закључаном екрану. Према Apple Developer Documentation, 2026, UNNotificationAttachment подржава до 10 датотека у једном обавештењу и аутоматски их скалира за оптималан приказ на свим уређајима.
Главно
Rich Notification је iOS push обавештење које садржи не само текст, већ и медијске прилоге, интерактивне елементе и прилагођени интерфејс. Термин „rich“ (богат) одражава могућност укључивања слика, видеа, аудио, дугмади за акције и уноса текста у обавештење, што претвара једноставно обавештење у потпуни интерактивни елемент.
Apple је увео подршку за Rich Notification у iOS 10 заједно са UserNotifications оквиром. Пре тога, push обавештења су могла да садрже само текст, звук и badge. iOS 10 је представио UNNotificationServiceExtension и UNNotificationContentExtension, који су отворили могућност модификације садржаја и креирања прилагођених интерфејса. У каснијим верзијама додата је подршка за SwiftUI у Content Extension, анимиране GIF-ове и побољшано скалирање медија.
Rich Notification значајно повећава ангажовање корисника. Apple истраживања показују да обавештења са сликама добијају 30–40% више интеракција у поређењу са текстуалним. Слика производа, преглед видеа или дугме за брзи одговор омогућавају кориснику да донесе одлуку директно из обавештења, без отварања апликације. То скраћује пут до циљне акције и побољшава корисничко искуство.
UNNotificationAttachment подржава три категорије медија: слике, видео и аудио. Сваки тип има своја ограничења у погледу формата, величине и трајања. Систем аутоматски скалира слике на величину обавештења и ограничава трајање видеа на 30 секунди ради оптимизације перформанси.
| Тип медија | Подржани формати | Максимална величина |
|---|---|---|
| Слике | JPEG, PNG, GIF, TIFF | 10 MB по датотеци |
| Видео | MPEG, MP4, MOV | 10 MB, до 30 секунди |
| Аудио | MP3, AAC, WAV, CAF | 10 MB |
Слике се аутоматски обрезују и скалирају од стране система за приказ у компактном и проширеном приказу обавештења. Анимирани GIF су подржани од iOS 12 и репродукују се аутоматски при прегледу обавештења. Препоручена величина слике је 1024x1024 пиксела, што обезбеђује јасан приказ на свим уређајима, укључујући iPad са великим екраном.
Видео у Rich Notification се репродукује без звука подразумевано — корисник може да укључи звук преко дугмета у плејеру. Максимално трајање видеа је 30 секунди, након чега се репродукција зауставља. Аудио прилози се могу користити за гласовне поруке или звучне прегледе и репродукују се при додиру обавештења у проширеном приказу.
Интерактивне акције омогућавају кориснику да изврши операције директно из обавештења без отварања апликације. Акције се региструју преко UNNotificationCategory и UNNotificationAction при покретању апликације. Свака акција може бити у позадини (без отварања апликације) или у предњем плану (отвара апликацију за довршавање операције).
UNNotificationAction представља дугме са насловом и опционим модификаторима, као што су requiresAuthentication (захтева Face ID/Touch ID) или destructive (истакнуто црвеном бојом). UNTextInputNotificationAction проширује ову могућност додавањем поља за унос текста — идеално за брзи одговор на поруку или коментар. Акције се приказују при дугом притиску на обавештење или превлачењу надоле.
Категорије обавештења повезују тип садржаја са скупом доступних акција. Процес регистрације се извршава у AppDelegate при покретању апликације преко UNUserNotificationCenter.current().setNotificationCategories. Категорија се наводи на серверу у пољу category JSON payload-а, а систем аутоматски примењује одговарајући скуп акција на обавештење.
Када корисник кликне дугме или пошаље текст, систем позива делегата UNUserNotificationCenterDelegate са методом didReceive response. UNNotificationResponse садржи идентификатор акције и унети текст (за UNTextInputNotificationAction). На основу ових информација, апликација извршава одговарајућу пословну логику: шаље поруку, потврђује акцију или отвара одређени екран.
Размотримо комплетан циклус креирања Rich Notification: од регистрације категорија у AppDelegate до обраде у Service Extension и приказа. AppDelegate региструје категорију са дугмадима, сервер шаље обавештење са URL-ом слике, Service Extension преузима медије, а Content Extension приказује прилагођени интерфејс са дугмадима.
// AppDelegate — регистрација категорија и акција
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Одговори",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "Свиђа ми се",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
Након пријема push обавештења са категоријом „social_post“ и URL-ом слике у прилагођеном пољу, активира се Service Extension. Екстензија преузима слику преко мреже, креира UNNotificationAttachment са јединственим идентификатором и додаје га у садржај. Важно је проверити величину преузете датотеке — ако прелази 10 MB, attachment неће бити креиран и систем ће приказати обавештење без медија.
class NotificationService: UNNotificationServiceExtension {
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void
) {
let content = (request.content.mutableCopy()
as! UNMutableNotificationContent)
guard let urlString = content.userInfo["media-url"]
as? String,
let url = URL(string: urlString)
else { contentHandler(request.content); return }
URLSession.shared.downloadTask(with: url) {
location, _, _ in
guard let location = location else {
contentHandler(content); return }
let attachment = try! UNNotificationAttachment(
identifier: "media", url: location,
options: [UNNotificationAttachmentOptionsTypeHintKey:
"jpg"])
content.attachments = [attachment]
contentHandler(content)
}.resume()
}
}
За тестирање Rich Notification без сервера, користите iOS симулатор и шаљите push преко терминала помоћу xcrun simctl push. У payload-у обавезно наведите mutable-content: 1 за активацију Service Extension и category за приказ акција. Команда покреће push из JSON датотеке директно на изабрани симулатор, што омогућава брзу итерацију без подешавања серверске инфраструктуре.
UNNotificationContentExtension омогућава потпуну замену стандардног интерфејса обавештења произвољним UIKit или SwiftUI приказом. Екстензија се активира када корисник прошири обавештење (force touch или превлачење надоле) и може да садржи дугмад, клизаче, анимације и било које друге UI компоненте. Величина интерфејса се прилагођава садржају помоћу Auto Layout-а.
Content Extension се заснива на storyboard-у са приказом који наслеђује UIViewController. SwiftUI View се интегрише преко UIHostingController-а од iOS 16, што омогућава коришћење савремених приступа за изградњу интерфејса. За уназадну компатибилност са iOS 14–15, препоручује се коришћење UIKit-а са xib датотекама. Интерфејс добија модификовани садржај од Service Extension-а преко UNNotificationContent-а.
Content Extension имплементира протокол UNNotificationContentExtension са методом didReceive response. UNNotificationResponse садржи информације о притиснутом дугмету или унетом тексту. Екстензија може да ажурира интерфејс без затварања обавештења или да позове completion handler за његово затварање. Ово омогућава креирање сценарија брзе интеракције, као што је „лајк“ са визуелном повратном спрегом директно у обавештењу.
Apple препоручује да Content Extension буде концизан и функционалан, избегавајући сувишне елементе. Максимална висина проширеног обавештења је око 400 тачака, након чега се садржај помера. Користите системске фонтове и размаке за уједначеност са другим обавештењима. Тестирајте на различитим величинама екрана да бисте се уверили да се интерфејс исправно приказује и на iPhone-у и на iPad-у.
Често постављана питања
Максимална величина једног медијског прилога је 10 MB. При прекорачењу лимита, UNNotificationAttachment се не креира и обавештење се приказује без медија. Препоручује се оптимизација слика на 1–3 MB за брзо преузимање у Service Extension-у.
Rich Notification је подржан на свим уређајима са iOS 10 и новијим, укључујући iPhone 5s и новије. Content Extension са прилагођеним UI доступан је од iOS 12. SwiftUI у Content Extension-у — од iOS 16. На старијим верзијама обавештење се приказује у стандардном облику.
Да, анимирани GIF су подржани од iOS 12. GIF се преузима преко UNNotificationAttachment као обична слика и аутоматски се репродукује при прегледу обавештења. Величина GIF-а је ограничена на истих 10 MB као и остали формати.
Максимум 4 акције по обавештењу при регистрацији категорије. При већем броју систем приказује прве 4, остале игнорише. Препоручује се коришћење 2–3 дугмета за оптималан UX — превише опција преоптерећује интерфејс.
Да, сервер мора да шаље push преко APNS (Apple Push Notification service) са JSON payload-ом који садржи URL медијске датотеке у прилагођеном пољу и заставу mutable-content: 1. Сервер такође наводи category за активацију Content Extension-а и акција.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође