Notification Content Extension — egy iOS-bővítmény, amely lehetővé teszi a push-értesítés szabványos felületének lecserélését egy egyedi UIView-re. A fejlesztő teljes irányítást kap a tartalom megjelenítése felett: képek, videók, animációk, egyedi betűtípusok és interaktív elemek. A Apple Developer, 2025 szerint a Notification Content Extension bármilyen UIKit-felületet támogat az értesítés korlátozott helyén.
Főbb pontok
Notification Content Extension — egy alkalmazásbővítmény iOS-ben, amely felülírja a push-értesítés szabványos megjelenítési sablonját egy egyedi UIView-val. Ellentétben a szokásos értesítéssel, ahol a tartalom a címre, alcímre és szövegtörzsre korlátozódik, a bővítmény lehetővé teszi bármilyen UIKit-felület megjelenítését: térkép koordinátákkal, grafikon, képgaléria vagy beviteli űrlap.
Amikor az iOS egy push-értesítést kap a megadott categoryIdentifier-rel, a rendszer ellenőrzi, hogy a bővítmény regisztrálva van-e ehhez a kategóriához. Ha igen — a rendszer elindítja a bővítményt egy külön folyamatban, és átadja neki az értesítés tartalmát. A bővítmény a saját felületét jeleníti meg a szabványos helyett. A felhasználó anélkül lép kapcsolatba az egyedi felülettel, hogy megnyitná a fő alkalmazást.
Fontos, hogy ne keverjük össze a Notification Content Extension-t a Notification Service Extension-nel. A Service Extension az értesítés megjelenítése előtt dolgozza fel a tartalmat (mellékletek letöltése, visszafejtés). A Content Extension a kész tartalom kézhezvétele után cseréli le a felületet. Mindkét bővítmény együttműködhet: a Service Extension előkészíti az adatokat, a Content Extension megjeleníti azokat.
| Jellemző | Content Extension | Service Extension |
|---|---|---|
| Cél | Egyedi értesítési UI | Tartalom módosítása megjelenítés előtt |
| Végrehajtási idő | Amíg a felhasználó látja az értesítést | Akár 30 másodperc a háttérben |
| Felület | Teljes UIKit UIView | Nincs felület |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
A Notification Content Extension izolált folyamatban működik korlátozott erőforrásokkal. A bővítmény nem fér hozzá az alkalmazás fő tárolójához NSUserDefaults-on keresztül, kivéve az App Group-ot. A bővítmény mérete 50 MB-ra korlátozódik kicsomagolt formában. A tartalom megjelenítésének ideje is korlátozott — ha a bővítmény nem fejezi be a frissítést ésszerű időn belül, a rendszer bezárja.
A bővítmény Xcode-ban történő létrehozásához hozzá kell adni egy új Notification Content Extension típusú target-et. Az Xcode automatikusan létrehozza a MainInterface.storyboard-ot egy vezérlővel, amely az UIViewController-ből származik és implementálja az UNNotificationContentExtension-t.
Az Xcode-ban válassza a File → New → Target → Notification Content Extension lehetőséget. Adja meg a bővítmény nevét, nyelvét (Swift vagy Objective-C) és győződjön meg arról, hogy a projekt ugyanahhoz a fejlesztői csapathoz csatlakozik. A target létrehozása után megjelenik egy mappa három fájllal: MainInterface.storyboard, Info.plist és a vezérlő fájlja.
A bővítmény Info.plist fájljában kötelezően meg kell adni az NSExtensionAttributes tömböt az UNNotificationExtensionCategory kulccsal. Ez a tömb tartalmazza azoknak az értesítési kategóriáknak az azonosítóit, amelyekhez a bővítmény aktiválódik. Az opcionális UNNotificationExtensionInitialContentSizeRatio kulcs megadja az egyedi felület kezdeti képarányát a helyes pozicionáláshoz.
Ajánlott tiszta architektúrát fenntartani a target-bővítményben: külön mappa a vezérlőknek, külön az egyedi nézeteknek. Mivel a bővítmény egy külön bináris fájl, a fő alkalmazás kódja nem érhető el közvetlenül. A kód megosztásához hozzon létre egy külön framework-öt vagy használjon App Group-ot az adatokhoz.
UNNotificationContentExtension — egy protokoll, amelyet a vezérlőnek a Notification Content Extension-ben implementálnia kell. Az egyetlen kötelező metódus a didReceive(_:with:), amelyet az értesítés fogadásakor hívnak meg. A vezérlő megkapja az értesítést és egy kész view controller-t, amelyet frissíteni kell az adatokkal.
A bővítmény vezérlőjének az UIViewController-ből kell származnia és implementálnia kell az UNNotificationContentExtension-t. A Storyboard vagy xib ehhez a vezérlőhöz van kapcsolva. Az értesítés fogadásakor a didReceive metódus átadja a tartalmat, és a vezérlő frissíti a nézeteit.
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)
}
}
A rendszer meghatározza az egyedi felület méretét az Info.plist-ben lévő UNNotificationExtensionInitialContentSizeRatio kulcs és az aktuális tartalom alapján. Javasolt ezt a kulcsot 0.1 értékre állítani a minimális kezdeti mérethez, majd a méretet a preferredContentSize-on keresztül módosítani a tartalom betöltése után.
Notification Content Extension teljes szabadságot ad a felület létrehozásában. Bármilyen UIKit-komponens használható: UITableView, MKMapView, WKWebView, UIStackView. Azonban figyelembe kell venni az értesítés korlátozott helyét és optimalizálni kell a teljesítményt.
Az egyik népszerű forgatókönyv a térkép megjelenítése a helyszínnel. Ehhez a bővítmény Storyboard-jához hozzáadunk egy MKMapView-t, és a vezérlő átadja a koordinátákat az értesítés tartalmából. Fontos, hogy ne felejtse el hozzáadni a MapKit-et a bővítmény target-jéhez. A térkép használatakor vegye figyelembe a bővítmény memóriakorlátját — az összetett csempék betöltése meghaladhatja a rendelkezésre álló erőforrásokat.
A Notification Content Extension támogatja az UIView-animációkat, beleértve a méretváltoztatást, mozgatást és az elemek átlátszóságát. Az értesítés kibővített módjába lépve elindítható a tartalom megjelenésének animációja. Az animációknak rövidnek kell lenniük (0.5 másodpercig) és nem zavarhatják a felhasználót az értesítéssel való interakcióban. Kerülje a végtelen animációkat — ezek fogyasztják az akkumulátort és csökkentik a teljesítményt.
Mivel a bővítmény egy teljes értékű UIViewController, gesztusokat és érintéskezelőket adhat hozzá. Az UIKit gesztusok (UITapGestureRecognizer, UIButton) szabványosan működnek. Az alkalmazás megnyitását igénylő műveletekhez használja a bővítmény delegáltját vagy a userNotificationCenter-t. Az interaktív elemeknek elég nagyoknak kell lenniük a kényelmes érintéshez a korlátozott helyen — a minimális érintési célpont mérete 44x44 pont az Apple ajánlásai szerint.
Multimédiás tartalom — a Notification Content Extension kulcsfontosságú képessége. Az értesítés tartalmazhat képeket, GIF-eket, audiót és videót, amelyek az egyedi felületen jelennek meg. A mellékletek az UNNotificationAttachment-en keresztül érkeznek, amelyet hozzáadhat a szerver a payload-on keresztül, valamint a Notification Service Extension a letöltés után. Támogatott formátumok: JPEG, PNG, MPEG-4 és MP3.
Egy kép megjelenítéséhez elegendő az UNNotificationAttachment beszerzése az értesítés tartalmából és betöltése egy helyi URL-ről. Fontos megjegyezni, hogy a bővítmény csak helyi fájlokhoz fér hozzá — a távoli erőforrásokat előzetesen a Service Extension-nek kell letöltenie. A melléklet maximális mérete — 50 MB iOS 15+-on, a korlátozás minden egyes frissítéssel növekszik. Több kép támogatásához használjon UNNotificationAttachment-et különböző azonosítókkal, és jelenítse meg őket a UIPageViewController-en keresztül.
Egy kép megjelenítéséhez az egyedi felületen a bővítmény lekéri az UNNotificationAttachment-et az értesítés tartalmából és betölti egy helyi URL-ről. A mellékletet előzetesen a Notification Service Extension-nek kell letöltenie — a Content Extension nem fér hozzá a hálózathoz. A média melléklet maximális mérete — 50 MB iOS 15+-on, korábbi verziókban a korlátozás 10 MB volt. A bővítménynek megfelelően kell kezelnie a melléklet hiányát és egy fallback-felületet kell megjelenítenie. Az alacsony felbontású képek előzetes betöltéséhez használjon a Service Extension által a csatolás előtt létrehozott miniatűr verziókat.
Az iOS támogatja a videó lejátszását a Notification Content Extension-ben az AVPlayerLayer-en keresztül. A bővítmény megjeleníthet egy videólejátszót vezérlő gombokkal közvetlenül az értesítésben. Ez különösen hasznos a videómegfigyelő, streamelő vagy tartalom-előnézeti alkalmazások számára. Az automatikus lejátszás hang nélkül megengedett, feltéve, hogy a felhasználó multimédiás tartalomra számít ebben az értesítésben. A videólejátszó implementálásakor adjon hozzá vezérlőelemeket: play/pause, folyamatjelző sáv és bezáró gomb. Győződjön meg arról, hogy a videó nem indul automatikusan hanggal — ez megsérti az Apple felhasználói élményre vonatkozó ajánlásait. Több képből álló diavetítéshez használjon animált átmenetet közöttük a UIView.transition-en keresztül az oldallapozási átmenet opcióval.
A Notification Content Extension korlátozott környezetben működik, körülbelül 50 MB memóriakorláttal. A teljesítmény optimalizálásához használja a képek lusta betöltését, kerülje a nehéz számításokat a fő szálon és alkalmazza az Auto Layout-ot egyszerű megszorításokkal. A nehéz műveleteket, mint a képfeldolgozás vagy adatfeldolgozás, végezze háttérszálakon (DispatchQueue.global). A memóriakorlát túllépése esetén a rendszer bezárja a bővítményt, és a felhasználó a szabványos értesítést fogja látni. Javasolt a bővítmény profilozása az Instruments (Allocations és Time Profiler) segítségével a közzététel előtt, valamint a memóriahasználat ellenőrzése valós eszközökön különböző iOS-verziókkal.
Gyakran ismételt kérdések
Igen, iOS 16-tól kezdve a Notification Content Extension támogatja a SwiftUI-t az UIHostingController-en keresztül. Az UIKit azonban stabilabb választás marad az összetett felületekhez a SwiftUI korlátozott bővítménytámogatása miatt.
Ellenőrizze, hogy az értesítés payload-jában lévő categoryIdentifier megegyezik-e a bővítmény Info.plist fájljában lévő UNNotificationExtensionCategory-val. Győződjön meg arról is, hogy a bővítmény hozzá van adva a fő alkalmazás target-jéhez és megfelelően alá van írva.
Használjon App Group-ot — megosztott tárolót (UserDefaults suite) vagy fájlkonténert. A fő alkalmazásnak és a bővítménynek ugyanabban a fejlesztői csoportban kell lennie, és az App Groups képességnek engedélyezve kell lennie.
Használja a didReceive(_:with:) metódust UNNotificationContentExtensionMediaPlayPauseButtonType-pal a média vezérléséhez, vagy kérjen frissítést a delegálton keresztül. A tartalom teljes frissítése új értesítés nélkül nem lehetséges.
Válassza ki a bővítmény target-jét az Xcode-ban és futtassa a szimulátoron. Használja az lldb-t és a breakpoint-okat, mint egy szokásos alkalmazásban. Teszteléshez küldjön push-értesítést a Firebase Console-on keresztül vagy lokálisan a Pusher-en keresztül.
Ö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