Notification Content Extension — az iOS-bővítmény egy típusa, amely a push értesítés szabványos sablonját egy teljesen egyedi felhasználói felületre cseréli. A fejlesztő lehetőséget kap képek, audiolejátszó, műveleti gombok, folyamatjelző sávok és egyedi animáció megjelenítésére az értesítésen belül, kiterjesztve a szabványos bannert egy teljes értékű mini-alkalmazássá. A WWDC 2025 adatai szerint a bővítmény az UNNotificationContentExtension-t használja, és legfeljebb 4 média mellékletet támogat egy értesítésben, valamint az interaktív műveletek feldolgozását az UNNotificationAction segítségével.
Főbb pontok
Notification Content Extension — egy alkalmazásbővítmény, amely felülírja a push értesítés megjelenítését iOS-ben. A szabványos banner helyett címmel, üzenettel és gombokkal megjeleníthető egy teljesen az Interface Builder-ben vagy programozottan UIKit-en vagy SwiftUI-n keresztül tervezett felület.
Ellentétben a Notification Service Extension-nel, amely a megjelenítés előtt módosítja a tartalmat, a Content Extension csak a vizuális megjelenítésért felelős. A bővítmény az összes módosítás után kapja meg a kész értesítést, és eldönti, hogyan jelenítse meg. Ez a legfontosabb különbség a két értesítésbővítmény-típus között.
A bővítmény akkor aktiválódik, amikor a felhasználó egy kiterjesztő gesztust hajt végre — lefelé görgeti az értesítést, vagy rákattint (a készülék modelljétől függően). Az iOS elindítja a bővítmény folyamatát, létrehozza a vezérlőt a megadott nib-ből vagy storyboard-ból, és átadja az értesítést a UNNotificationContentExtension segítségével.
A fejlesztés egy új target hozzáadásával kezdődik az Xcode-ban a Notification Content Extension sablonnal. Az Xcode létrehozza a MainInterface.storyboard fájlt és egy osztályt, amely a UIViewController-ből származik, megvalósítva az UNNotificationContentExtension protokollt.
Az egyedi terület maximális magassága — 320 pont iPhone-on (a nagy képernyős modelleknél) és 352 pont iPaden. Az e határokon túlnyúló tartalom levágásra kerül. A különböző méretekhez való alkalmazkodáshoz ajánlott az Auto Layout és UIScrollView használata a görgethető tartalomhoz. A szélesség mindig megegyezik az értesítés szélességével, és automatikusan változik a készülék elforgatásakor.
Az Apple Human Interface Guidelines figyelmeztet: az értesítési felület legyen tömör, és csak egy fő elemet tartalmazzon — képet, lejátszót, térképet vagy gyorsbeviteli űrlapot. A több interaktív elem túlterheli a felhasználót és megnehezíti az interakciót.
App Group — az egyetlen adatcsere-mechanizmus a bővítmény és a fő alkalmazás között. Az App Group megosztott könyvtárán keresztül gyorsítótárazott képek, tokenek és beállítások továbbíthatók. A fő alkalmazás API-jának közvetlen hívásai vagy a UserDefaults-hoz való hozzáférés a folyamatok elkülönítése miatt nem elérhetők.
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()
}
}
}
UNNotificationContentExtension — a fő protokoll, amely meghatározza az egyedi értesítés életciklusát. A protokoll metódusokat biztosít a tartalom fogadásához, a műveletek feldolgozásához és a felület kezeléséhez.
didReceive(_:with:) az értesítés fogadásakor hívódik meg. A bővítmény egy UNNotification objektumot és UNNotificationContentExtensionMediaPlayPauseButtonType-ot kap a médialejátszó kezeléséhez. Ebben a metódusban kell konfigurálni a felületet — betölteni a képet, inicializálni a lejátszót vagy megjeleníteni az adatokat. A rendszer ezt a metódust minden alkalommal meghívja, amikor az értesítés valós időben frissül.
Fontos figyelembe venni, hogy a bővítmény korlátozott idővel rendelkezik a végrehajtáshoz — körülbelül 30 másodperc egy teljes megjelenítési ciklushoz. Ha a felület nem készül el ezen idő alatt, az iOS egy rendszerértesítést jelenít meg. Nehéz erőforrásokhoz — képek betöltése a hálózatról, videó dekódolása — aszinkron műveletek használata javasolt előzetes gyorsítótárazással az App Group segítségével.
A protokoll opcionális metódusokat tartalmaz a play/pause gombokhoz: mediaPlay, mediaPause és mediaPlayPauseButtonType. Ha az értesítés audio- vagy videotartalmat tartalmaz, a bővítmény megjeleníthet egy beépített lejátszót rendszervezérlő elemmel. Az iOS automatikusan hozzáad egy lejátszás gombot a bővítmény jobb felső sarkához, amikor a megfelelő gombtípust adja vissza.
UNNotificationAttachment — az objektum, amely az értesítéshez csatolt médiaadatokat tartalmazza. Képek, audiofájlok és videók az értesítés létrehozásának szakaszában kerülnek hozzáadásra a szerveren vagy a Notification Service Extension-ben az UNNotificationAttachment segítségével.
Képekhez: JPEG, PNG, GIF, HEIF. Audiohoz: MP3, AAC, ALAC, WAV. Videóhoz: MPEG-4, H.264, HEVC. Az egyes mellékletek maximális mérete — 50 MB, legfeljebb 4 melléklet értesítésenként. A rendszer automatikusan letölti a mellékleteket a háttérben az értesítés megjelenítése előtt, és hozzáférést biztosít a bővítmény számára a helyi URL-ekhez security-scoped erőforrásokon keresztül.
Az Apple szerint a bővítmény nem töltheti le önállóan a médiát — az UNNotificationAttachment már tartalmazza a helyi URL-t a rendszer általi letöltés befejezése után. Ha azonban a melléklet nem töltődött le időben (például gyenge kapcsolat esetén), a bővítmény megjeleníthet egy helyőrzőt vagy alternatív szöveget.
Minden UNNotificationAttachment egy security-scoped URL-t biztosít, amelyhez a bővítménynek a startAccessingSecurityScopedResource() segítségével kell hozzáférnie, és a stopAccessingSecurityScopedResource() segítségével kell felszabadítania. Ezeket a metódusokat párban kell meghívni — ellenkező esetben az erőforrás nem szabadul fel, és hozzáférési jogosultság szivárgást okoz.
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)
Notification Content Extension támogatja az egyedi interaktív műveleteket — gombokat, amelyek az értesítés tartalma alatt jelennek meg. A műveletek az értesítési kategória létrehozásakor kerülnek regisztrálásra az UNNotificationCategory segítségével, és lehetnek destruktívak, szövegesek vagy háttérben futók.
UNNotificationAction — egy egyszerű művelet címmel és opcionális destruktív flag-gel. UNTextInputNotificationAction — egy művelet szövegbeviteli mezővel, például gyors válaszhoz egy üzenetre. Mindkét típus támogatja az UNNotificationActionOptions.authenticationRequired opciót — a készülék feloldásának követelményét a végrehajtás előtt.
A bővítmény a kiválasztott műveletet a didReceive(_:withCompletionHandler:) metóduson keresztül kapja, ahol egy UNNotificationResponse objektum kerül átadásra a művelet azonosítójával és opcionális szöveggel. A bővítmény feldolgozhatja a választ önállóan, vagy továbbíthatja a fő alkalmazásnak az App Group megosztott tárolóján keresztül.
let category = UNNotificationCategory(
identifier: "message",
actions: [
UNTextInputNotificationAction(
identifier: "reply",
title: "Reply",
options: .authenticationRequired
),
UNNotificationAction(
identifier: "mark_read",
title: "Mark Read",
options: .foreground
)
],
intentIdentifiers: []
)
Gyakran ismételt kérdések
A Content Extension az értesítés vizuális megjelenítéséért felelős, míg a Service Extension a tartalom megjelenítés előtti módosításáért. A Content Extension a Service Extension után működik, és nem tudja megváltoztatni az értesítés payload-ját.
Swift és Objective-C az UIKit-hez. iOS 16-tól kezdve a SwiftUI is támogatott az értesítési felület létrehozásához a NotificationContentView segítségével, méret- és konfigurációs módosítókkal.
Igen, iOS 16-tól a bővítmény használhatja a SwiftUI-t az UIHostingController-en keresztül. Az UIKit összes kompetenciája — méret, korlátozások, security-scoped erőforrások — azonban megmarad, és alkalmazásra kerül a SwiftUI-tartalomra is.
Legfeljebb 4 melléklet értesítésenként. Minden melléklet legfeljebb 50 MB méretű. Támogatottak a képek (JPEG, PNG, HEIF), audió (MP3, AAC) és videó (MPEG-4, H.264).
Az App Group segítségével — egy megosztott könyvtáron keresztül a lemezen. Az app group utótaggal ellátott UserDefaults szintén működik. A fő alkalmazás API-jának közvetlen hívásai nem elérhetők a bővítmény folyamatainak elkülönítése miatt.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is