Notification Content Extension — podstata, vlastní UI a nastavení v iOS

Autor: IT Sectr Publikováno: 2026-06-15 Doba čtení: 9 min

Notification Content Extension — je typ rozšíření iOS, které nahrazuje standardní šablonu push oznámení zcela vlastním uživatelským rozhraním. Vývojář získává možnost zobrazovat obrázky, audio přehrávač, tlačítka akcí, ukazatele průběhu a vlastní animaci uvnitř oznámení, čímž rozšiřuje standardní banner na plnohodnotnou mini-aplikaci. Podle údajů z WWDC 2025 rozšíření používá UNNotificationContentExtension a podporuje až 4 multimediální přílohy v jednom oznámení, stejně jako zpracování interaktivních akcí prostřednictvím UNNotificationAction.

Hlavní body

  • Notification Content Extension vytváří vlastní rozhraní pro push oznámení místo standardní systémové šablony
  • Architektura je založena na protokolu UNNotificationContentExtension s metodami didReceive(_:with:) a didReceive(_:withCompletionHandler:)
  • Rozšíření může zobrazovat multimediální přílohy — obrázky, audio a video — přímo uvnitř oznámení bez otevření aplikace
  • Interaktivní oznámení podporují vlastní akce se zpětnou vazbou a textovým vstupem
  • Velikost rozhraní je omezená — maximální výška vlastního oznámení 320 bodů na iPhone a 352 na iPadu

Co je Notification Content Extension

Notification Content Extension — je rozšíření aplikace, které přepisuje zobrazení push oznámení na iOS. Místo standardního banneru s názvem, tělem zprávy a tlačítky lze zobrazit rozhraní zcela navržené v Interface Builder nebo programově přes UIKit či SwiftUI.

Na rozdíl od Notification Service Extension, které mění obsah před zobrazením, je Content Extension zodpovědné pouze za vizuální prezentaci. Rozšíření obdrží hotové oznámení po všech úpravách a rozhodne, jak jej zobrazit. To je klíčový rozdíl mezi těmito dvěma typy rozšíření oznámení.

Rozšíření se aktivuje, když uživatel provede gesto rozšíření — posune oznámení dolů nebo na něj klikne (v závislosti na modelu zařízení). iOS spustí proces rozšíření, vytvoří řadič z určeného nib nebo storyboard a předá oznámení prostřednictvím UNNotificationContentExtension.

Vytvoření vlastního rozhraní oznámení

Vývoj začíná přidáním nového targetu v Xcode se šablonou Notification Content Extension. Xcode vytvoří soubor MainInterface.storyboard a třídu dědící z UIViewController, implementující protokol UNNotificationContentExtension.

Velikost a omezení rozhraní

Maximální výška vlastní oblasti — 320 bodů na iPhone (pro modely s velkým displejem) a 352 bodů na iPadu. Obsah přesahující tyto hranice je oříznut. Pro přizpůsobení různým velikostem se doporučuje použít Auto Layout a UIScrollView pro posouvatelný obsah. Šířka je vždy rovna šířce oznámení a mění se automaticky při otočení zařízení.

Apple Human Interface Guidelines varuje: rozhraní oznámení by mělo být stručné a obsahovat pouze jeden hlavní prvek — obrázek, přehrávač, mapu nebo formulář rychlého vstupu. Více interaktivních prvků uživatele přetěžuje a komplikuje interakci.

Komunikace s hlavní aplikací

App Group — jediný mechanismus výměny dat mezi rozšířením a hlavní aplikací. Prostřednictvím sdíleného adresáře App Group lze přenášet kešované obrázky, tokeny a nastavení. Přímá volání API hlavní aplikace nebo přístup k jejímu UserDefaults nejsou kvůli izolaci procesů dostupné.

swift
class NotificationViewController: UIViewController {

    func didReceive(
        _ notification: UNNotification
    ) {
        guard let attachment = notification
            .request.content.attachments.first()
        else { return }
        if attachment.url.startAccessingSecurityScopedResource() {
            imageView.image = UIImage(contentsOfFile:
                attachment.url.path)
            attachment.url.stopAccessingSecurityScopedResource()
        }
    }
}

Protokol UNNotificationContentExtension

UNNotificationContentExtension — hlavní protokol, který definuje životní cyklus vlastního oznámení. Protokol poskytuje metody pro příjem obsahu, zpracování akcí a správu rozhraní.

Metoda didReceive:with:

didReceive(_:with:) je volána při přijetí oznámení. Rozšíření obdrží objekt UNNotification a UNNotificationContentExtensionMediaPlayPauseButtonType pro správu multimediálního přehrávače. V této metodě je třeba nakonfigurovat rozhraní — načíst obrázek, inicializovat přehrávač nebo zobrazit data. Systém volá tuto metodu pokaždé, když je oznámení aktualizováno v reálném čase.

Je důležité vzít v úvahu, že rozšíření má omezený čas na provedení — přibližně 30 sekund na celý cyklus zobrazení. Pokud rozhraní není v tomto čase připraveno, iOS zobrazí systémové oznámení. Pro náročné zdroje — načítání obrázků ze sítě, dekódování videa — se doporučuje používat asynchronní operace s předchozím kešováním prostřednictvím App Group.

Správa multimediálního přehrávače

Protokol obsahuje volitelné metody pro tlačítka play/pause: mediaPlay, mediaPause a mediaPlayPauseButtonType. Pokud oznámení obsahuje audio nebo video obsah, rozšíření může zobrazit vestavěný přehrávač s ovládacím prvkem systému. iOS automaticky přidá tlačítko přehrávání do pravého horního rohu rozšíření při vrácení odpovídajícího typu tlačítka.

Multimediální přílohy a jejich zpracování

UNNotificationAttachment — objekt, který obsahuje multimediální data připojená k oznámení. Obrázky, audio soubory a video se přidávají ve fázi vytváření oznámení na serveru nebo v Notification Service Extension prostřednictvím UNNotificationAttachment.

Podporované formáty

Pro obrázky: JPEG, PNG, GIF, HEIF. Pro audio: MP3, AAC, ALAC, WAV. Pro video: MPEG-4, H.264, HEVC. Maximální velikost každé přílohy — 50 MB, až 4 přílohy na oznámení. Systém automaticky stahuje přílohy na pozadí před zobrazením oznámení a poskytuje rozšíření přístup k místním URL prostřednictvím security-scoped zdrojů.

Podle Apple by rozšíření nemělo načítat média samostatně — UNNotificationAttachment již obsahuje místní URL po dokončení stahování systémem. Pokud však příloha nebyla stažena včas (např. při špatném připojení), rozšíření může zobrazit placeholder nebo alternativní text.

Práce se security-scoped zdroji

Každý UNNotificationAttachment poskytuje security-scoped URL, ke kterému musí rozšíření získat přístup přes startAccessingSecurityScopedResource() a uvolnit ho přes stopAccessingSecurityScopedResource(). Tyto metody musí být volány v párech — jinak zdroj nebude uvolněn a způsobí únik přístupových práv.

swift
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)

Interaktivní oznámení a akce

Notification Content Extension podporuje vlastní interaktivní akce — tlačítka, která se zobrazují pod obsahem oznámení. Akce se registrují při vytváření kategorie oznámení prostřednictvím UNNotificationCategory a mohou být destruktivní, textové nebo na pozadí.

Typy akcí

UNNotificationAction — jednoduchá akce s názvem a volitelným příznakem destruktivnosti. UNTextInputNotificationAction — akce s polem pro zadání textu, například pro rychlou odpověď na zprávu. Oba typy podporují volbu UNNotificationActionOptions.authenticationRequired — požadavek na odemknutí zařízení před provedením.

Rozšíření obdrží vybranou akci prostřednictvím metody didReceive(_:withCompletionHandler:), kde je předán objekt UNNotificationResponse s identifikátorem akce a volitelným textem. Rozšíření může zpracovat odpověď samostatně nebo ji předat hlavní aplikaci prostřednictvím sdíleného kontejneru App Group.

swift
let category = UNNotificationCategory(
    identifier: "message",
    actions: [
        UNTextInputNotificationAction(
            identifier: "reply",
            title: "Reply",
            options: .authenticationRequired
        ),
        UNNotificationAction(
            identifier: "mark_read",
            title: "Mark Read",
            options: .foreground
        )
    ],
    intentIdentifiers: []
)

Často kladené otázky

Jaký je rozdíl mezi Notification Content Extension a Service Extension?

Content Extension je zodpovědné za vizuální zobrazení oznámení, zatímco Service Extension je zodpovědné za změnu obsahu před zobrazením. Content Extension pracuje po Service Extension a nemůže změnit payload oznámení.

Jaké programovací jazyky jsou podporovány?

Swift a Objective-C pro UIKit. Od iOS 16 je SwiftUI také podporován pro vytváření rozhraní oznámení prostřednictvím NotificationContentView s modifikátory velikosti a konfigurace.

Lze použít SwiftUI v Notification Content Extension?

Ano, od iOS 16 může rozšíření používat SwiftUI prostřednictvím UIHostingController. Všechny kompetence UIKit — velikost, omezení, security-scoped zdroje — však zůstávají a jsou aplikovány na obsah SwiftUI.

Kolik multimediálních příloh lze připojit k oznámení?

4 přílohy na oznámení. Každá příloha do 50 MB. Podporovány jsou obrázky (JPEG, PNG, HEIF), audio (MP3, AAC) a video (MPEG-4, H.264).

Jak přenést data z rozšíření do hlavní aplikace?

Prostřednictvím App Group — sdíleného adresáře na disku. UserDefaults s příponou app group také funguje. Přímá volání API hlavní aplikace nejsou kvůli izolaci procesů rozšíření dostupná.

Shrnutí

  • Notification Content Extension nahrazuje standardní rozhraní oznámení vlastním s libovolnými vizuálními prvky
  • Architektura používá protokol UNNotificationContentExtension s metodami didReceive pro aktualizaci rozhraní
  • UNNotificationAttachment poskytuje multimediální přílohy s automatickým stahováním na pozadí a security-scoped přístupem
  • Interaktivní akce podporují textový vstup a destruktivní operace prostřednictvím UNNotificationAction
  • Maximální výška rozhraní — 320 bodů na iPhone, pro přizpůsobení obsahu se doporučuje UIScrollView
  • Výměna dat s hlavní aplikací — pouze prostřednictvím App Group a sdíleného adresáře na disku

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í.

Prodiskutovat projekt

Přečtěte si také