Rich Notification je rozšířený formát push oznámení iOS, který zahrnuje mediální přílohy, interaktivní tlačítka a vlastní rozhraní pro zlepšení uživatelského zážitku. Na rozdíl od standardních textových oznámení může Rich Notification zobrazovat obrázky, videa a audio přímo v banneru nebo na uzamčené obrazovce. Podle Apple Developer Documentation, 2026 podporuje UNNotificationAttachment až 10 souborů v jednom oznámení a automaticky je škáluje pro optimální zobrazení na všech zařízeních.
Hlavní body
Rich Notification je push oznámení iOS, které obsahuje nejen text, ale také mediální přílohy, interaktivní prvky a přizpůsobené rozhraní. Termín „rich“ (bohatý) odráží možnost zahrnout do oznámení obrázky, video, audio, tlačítka akcí a textový vstup, což mění jednoduché upozornění na plnohodnotný interaktivní prvek.
Apple zavedl podporu pro Rich Notification v iOS 10 spolu s frameworkem UserNotifications. Před tím mohla push oznámení obsahovat pouze text, zvuk a badge. iOS 10 představil UNNotificationServiceExtension a UNNotificationContentExtension, které otevřely možnost modifikace obsahu a vytváření vlastních rozhraní. V pozdějších verzích byla přidána podpora pro SwiftUI v Content Extension, animované GIFy a vylepšené škálování médií.
Rich Notification výrazně zvyšuje zapojení uživatelů. Výzkumy Apple ukazují, že oznámení s obrázky získávají o 30–40 % více interakcí ve srovnání s textovými. Obrázek produktu, náhled videa nebo tlačítko rychlé odpovědi umožňují uživateli učinit rozhodnutí přímo z oznámení bez otevření aplikace. To zkracuje cestu k cílové akci a zlepšuje uživatelský zážitek.
UNNotificationAttachment podporuje tři kategorie médií: obrázky, video a audio. Každý typ má svá vlastní omezení formátu, velikosti a délky. Systém automaticky škáluje obrázky na velikost oznámení a omezuje délku videa na 30 sekund pro optimalizaci výkonu.
| Typ média | Podporované formáty | Maximální velikost |
|---|---|---|
| Obrázky | JPEG, PNG, GIF, TIFF | 10 MB na soubor |
| Video | MPEG, MP4, MOV | 10 MB, až 30 sekund |
| Audio | MP3, AAC, WAV, CAF | 10 MB |
Obrázky jsou automaticky ořezávány a škálovány systémem pro zobrazení v kompaktním a rozšířeném pohledu oznámení. Animované GIFy jsou podporovány od iOS 12 a přehrávají se automaticky při prohlížení oznámení. Doporučená velikost obrázku je 1024x1024 pixelů, což zajišťuje ostré zobrazení na všech zařízeních včetně iPadu s velkou obrazovkou.
Video v Rich Notification se přehrává ve výchozím nastavení bez zvuku — uživatel může zapnout zvuk pomocí tlačítka v přehrávači. Maximální délka videa je 30 sekund, po které se přehrávání zastaví. Audio přílohy lze použít pro hlasové zprávy nebo zvukové náhledy a přehrávají se při klepnutí na oznámení v rozšířeném pohledu.
Interaktivní akce umožňují uživateli provádět operace přímo z oznámení bez otevření aplikace. Akce se registrují prostřednictvím UNNotificationCategory a UNNotificationAction při spuštění aplikace. Každá akce může být na pozadí (bez otevření aplikace) nebo v popředí (otevře aplikaci pro dokončení operace).
UNNotificationAction představuje tlačítko s názvem a volitelnými modifikátory, jako je requiresAuthentication (vyžaduje Face ID/Touch ID) nebo destructive (zvýrazněno červeně). UNTextInputNotificationAction rozšiřuje tuto možnost přidáním textového pole pro vstup — ideální pro rychlou odpověď na zprávu nebo komentář. Akce se zobrazí při dlouhém stisknutí oznámení nebo přejetí dolů.
Kategorie oznámení spojují typ obsahu se sadou dostupných akcí. Proces registrace se provádí v AppDelegate při spuštění aplikace přes UNUserNotificationCenter.current().setNotificationCategories. Kategorie je specifikována na serveru v poli category JSON payloadu a systém automaticky aplikuje odpovídající sadu akcí na oznámení.
Když uživatel klikne na tlačítko nebo odešle text, systém zavolá delegáta UNUserNotificationCenterDelegate s metodou didReceive response. UNNotificationResponse obsahuje identifikátor akce a zadaný text (pro UNTextInputNotificationAction). Na základě těchto informací aplikace provede odpovídající obchodní logiku: odešle zprávu, potvrdí akci nebo otevře určitou obrazovku.
Podívejme se na celý cyklus vytváření Rich Notification: od registrace kategorií v AppDelegate po zpracování v Service Extension a zobrazení. AppDelegate registruje kategorii s tlačítky, server odešle oznámení s URL obrázku, Service Extension stáhne média a Content Extension zobrazí vlastní rozhraní s tlačítky.
// AppDelegate — registrace kategorií a akcí
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Odpovědět",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "Líbí se",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
Po přijetí push oznámení s kategorií „social_post“ a URL obrázku ve vlastním poli se aktivuje Service Extension. Rozšíření stáhne obrázek po síti, vytvoří UNNotificationAttachment s jedinečným identifikátorem a přidá jej do obsahu. Je důležité zkontrolovat velikost staženého souboru — pokud přesahuje 10 MB, příloha se nevytvoří a systém zobrazí oznámení bez médií.
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()
}
}
Pro testování Rich Notification bez serveru použijte iOS simulátor a odešlete push přes terminál pomocí xcrun simctl push. V payloadu povinně uveďte mutable-content: 1 pro aktivaci Service Extension a category pro zobrazení akcí. Příkaz odešle push z JSON souboru přímo na vybraný simulátor, což umožňuje rychlou iteraci bez nastavování serverové infrastruktury.
UNNotificationContentExtension umožňuje zcela nahradit standardní rozhraní oznámení libovolným UIKit nebo SwiftUI view. Rozšíření se aktivuje, když uživatel rozbalí oznámení (force touch nebo přejetí dolů) a může obsahovat tlačítka, posuvníky, animace a další UI komponenty. Velikost rozhraní se přizpůsobuje obsahu pomocí Auto Layout.
Content Extension je založen na storyboard s view, které dědí z UIViewController. SwiftUI View je integrováno přes UIHostingController od iOS 16, což umožňuje použití moderních přístupů k budování rozhraní. Pro zpětnou kompatibilitu s iOS 14–15 se doporučuje používat UIKit s xib soubory. Rozhraní přijímá upravený obsah od Service Extension přes UNNotificationContent.
Content Extension implementuje protokol UNNotificationContentExtension s metodou didReceive response. UNNotificationResponse obsahuje informace o stisknutém tlačítku nebo zadaném textu. Rozšíření může aktualizovat rozhraní bez zavření oznámení nebo zavolat completion handler pro jeho zavření. To umožňuje vytvářet scénáře rychlé interakce, například „like“ s vizuální zpětnou vazbou přímo v oznámení.
Apple doporučuje, aby Content Extension byl stručný a funkční, s vynecháním nadbytečných prvků. Maximální výška rozbaleného oznámení je přibližně 400 bodů, po které se obsah posouvá. Používejte systémová písma a odsazení pro jednotnost s ostatními oznámeními. Testujte na různých velikostech obrazovky, abyste zajistili správné zobrazení rozhraní na iPhonu i iPadu.
Často kladené otázky
Maximální velikost jedné mediální přílohy je 10 MB. Při překročení limitu se UNNotificationAttachment nevytvoří a oznámení se zobrazí bez médií. Doporučuje se optimalizovat obrázky na 1–3 MB pro rychlé stažení v Service Extension.
Rich Notification je podporováno na všech zařízeních s iOS 10 a vyšším, včetně iPhone 5s a novějších. Content Extension s vlastním UI je k dispozici od iOS 12. SwiftUI v Content Extension — od iOS 16. Na starších verzích se oznámení zobrazí ve standardní podobě.
Ano, animované GIFy jsou podporovány od iOS 12. GIF se stahuje přes UNNotificationAttachment jako běžný obrázek a automaticky se přehrává při prohlížení oznámení. Velikost GIFu je omezena na stejných 10 MB jako ostatní formáty.
Maximálně 4 akce na oznámení při registraci kategorie. Při větším počtu systém zobrazí první 4 a zbytek ignoruje. Doporučuje se používat 2–3 tlačítka pro optimální UX — příliš mnoho možností přetěžuje rozhraní.
Ano, server musí odesílat push přes APNS (Apple Push Notification service) s JSON payloadem obsahujícím URL mediálního souboru ve vlastním poli a příznakem mutable-content: 1. Server také specifikuje category pro aktivaci Content Extension a akcí.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také