Notification Extension: kulcsfogalmak, bővítménytípusok és beállítás

Szerző: IT Sectr Megjelenés: 2026-03-20 Olvasási idő: 8 perc

A Notification Extension egy iOS-mechanizmus, amely lehetővé teszi a push-értesítések tartalmának és megjelenésének módosítását a felhasználó számára történő megjelenítés előtt. A bővítmények az operációs rendszer oldalán, külön folyamatban működnek: az UNNotificationServiceExtension a bejövő tartalmat dolgozza fel, az UNNotificationContentExtension pedig az interfészt kezeli. A Apple Developer Documentation, 2026 szerint a Service Extension legfeljebb 30 másodpercet kap a feladatok végrehajtására az értesítés megjelenítése előtt. Ez a korlátozás kritikus a mellékletek betöltésekor vagy az adatok visszafejtésekor.

Főbb pontok

  • Service Extension — elkapja az értesítést a megjelenítés előtt, lehetővé teszi a szöveg módosítását, média hozzáadását és adatok visszafejtését 30 másodperces korláttal.
  • Content Extension — egyedi értesítési felületet hoz létre tetszőleges UI-val, gombokkal és érintéskezeléssel storyboard vagy SwiftUI segítségével.
  • Média-mellékletek — képek, videók és hanganyagok az UNNotificationAttachment segítségével kerülnek hozzáadásra a Service Extension-ben, mielőtt továbbításra kerülnének a Content Extension-be.
  • Regisztráció — mindkét bővítmény az Info.plist-ben kerül regisztrálásra különálló targetekként, megadva az értesítési kategóriákat és az NSExtensionPointIdentifier-t.
  • Korlátozások — a bővítmények nem férnek hozzá a fő alkalmazáshoz, izolált homokozóban működnek 50 MB memóriakorláttal.

Mi az a Notification Extension

Notification Extension egy iOS szoftverkomponens, amely kiterjeszti a push-értesítések szokásos viselkedését, lehetővé téve a tartalom módosítását és a felület testreszabását. A szokásos értesítésekkel ellentétben, amelyeket a rendszer szabványos formában jelenít meg, a bővítmények lehetővé teszik a fejlesztő számára, hogy befolyásolja a tartalmat a megjelenítés előtt, és egyedi felhasználói felületet hozzon létre.

Két típusú értesítési bővítmény

Az Apple két típusú Notification Extension-t kínál különböző célokra: UNNotificationServiceExtension a bejövő payload feldolgozásáért felelős, az UNNotificationContentExtension pedig a megjelenítést kezeli. A Service Extension az értesítés megjelenítése előtt indul, és az Apple Developer Documentation szerint korlátozott ideje van a végrehajtásra — legfeljebb 30 másodperc. A Content Extension akkor aktiválódik, miután a felhasználó interakcióba lép az értesítéssel, és egyedi nézetet jelenít meg.

Különbség a szabványos értesítésektől

A szabványos iOS push-értesítést a rendszer automatikusan jeleníti meg a JSON-payload alert, title és subtitle mezői alapján. Notification Extension átveszi az irányítást: a Service Extension megkapja a nyers payloadot, módosítja azt, és továbbítja a rendszernek megjelenítésre. A Content Extension a szabványos banner-t tetszőleges felületre cseréli bármilyen vezérlőelemmel.

A bővítmény életciklusa

Amikor a készülék push-értesítést kap a mutable-content: 1 kulccsal, a rendszer elindítja a Service Extension-t egy külön folyamatban. A bővítmény folyamata el van szigetelve a fő alkalmazástól, és saját homokozóval rendelkezik 50 MB memóriakorláttal. A feldolgozás befejezése után a bővítmény meghívja a completion handlert, továbbítva a módosított UNNotificationContent-ot a rendszernek megjelenítésre.

UNNotificationServiceExtension: tartalom módosítása

UNNotificationServiceExtension a fő eszköz a push-értesítések programozott módosítására, mielőtt azok megjelennének a felhasználónak. A bővítmény automatikusan aktiválódik, amikor olyan értesítés érkezik, amelynek payloadjában a mutable-content: 1 jelző be van állítva. 30 másodpercen belül a bővítmény betölthet egy média-mellékletet, módosíthatja a szöveget, visszafejtheti a titkosított adatokat, vagy gazdagíthatja a tartalmat.

Az UNNotificationServiceExtension protokoll metódusai

A bővítmény két kulcsfontosságú metódust implementál az UNNotificationServiceExtension protokollból. A didReceive metódus fogadja a bejövő kérést a nyers UNNotificationRequest-tel, és lehetővé teszi annak módosítását a completion handleren keresztül új UNNotificationContent-tel. A serviceExtensionTimeWillExpire metódust a rendszer hívja meg egy másodperccel az időkorlát lejárta előtt — itt be kell fejezni a feldolgozást és továbbítani az aktuális (esetleg részleges) eredményt.

Példa: kép hozzáadása az értesítéshez

Vegyünk egy forgatókönyvet, amikor a szerver push-t küld egy kép URL-jével egy egyedi mezőben. A Service Extension betölti ezt a képet a hálózaton keresztül, létrehoz egy UNNotificationAttachment-et, és hozzáadja a tartalomhoz. UNNotificationAttachment elfogad egy helyi kép-, videó- vagy hangfájlt, és automatikusan átmásolja a bővítmény homokozójába. A melléklet létrehozása után a bővítmény továbbítja a frissített tartalmat a rendszernek.

swift
class NotificationService: UNNotificationServiceExtension {

    override func didReceive(_ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void) {

        let userInfo = request.content.userInfo
        guard let imageURL = URL(string: userInfo["image-url"] as! String)
        else { contentHandler(request.content); return }

        let attachment = try! UNNotificationAttachment(
            identifier: "image", url: imageURL,
            options: [UNNotificationAttachmentOptionsTypeHintKey: "jpg"])

        let modifiedContent = request.content.mutableCopy()
            as! UNMutableNotificationContent
        modifiedContent.attachments = [attachment]
        contentHandler(modifiedContent)
    }

    override func serviceExtensionTimeWillExpire() {
        contentHandler?(bestAttemptContent ?? request.content)
    }
}

Gyorsítótárazás és újrafelhasználás

Azonos mellékletekkel történő gyakori értesítésküldés esetén ajánlott a letöltött fájlok gyorsítótárazása a készüléken. FileManager hozzáférést biztosít a bővítmény gyorsítótár-könyvtárához, amely megmarad az indítások között. Ez csökkenti a későbbi értesítések feldolgozási idejét és a hálózati terhelést. Az Apple szerint a mellékletek gyorsítótárazása 2–5 másodpercre csökkentheti a feldolgozási időt a teljes betöltés helyett.

UNNotificationContentExtension: egyedi felület

UNNotificationContentExtension lehetővé teszi az értesítés szabványos bannerének lecserélését egy Interface Builder-ben vagy SwiftUI-ben létrehozott egyedi felületre. A bővítmény akkor aktiválódik, amikor a felhasználó műveletet hajt végre az értesítéssel: érintés, lefelé húzás vagy 3D Touch. A Content Extension megkapja a Service Extension által már feldolgozott tartalmat, és egy egyedi nézetben jeleníti meg.

Storyboard és értesítési kategóriák

Minden Content Extension egy vagy több értesítési kategóriához van kötve az Info.plisten keresztül. A kategóriát a szerver határozza meg az APNS payload category mezőjével. A rendszer automatikusan kiválasztja a megfelelő bővítményt a fogadott értesítés kategóriája alapján. A felület storyboard segítségével épül fel, szabványos UIKit komponensek vagy SwiftUI View használatával.

Felhasználói műveletek kezelése

A Content Extension támogatja az UNNotificationAction-ben definiált egyedi gombokat és érintéskezelőket. UNNotificationAction a kategória regisztrációs szakaszában jön létre, és lehet szövegbevitel az UNTextInputNotificationAction segítségével. Amikor a felhasználó megnyom egy gombot, a bővítmény megkapja a didReceive callback-et a művelet azonosítójával, és végrehajthatja a megfelelő logikát — URL megnyitása, kérés küldése a szervernek vagy a felület frissítése.

Teljesítménykorlátozások

A Content Extension izolált folyamatban működik saját végrehajtási ciklussal és körülbelül 50 MB memóriakorláttal. A bővítmény teljesítménye kritikus, mert a rendszer watchdog leállítja a folyamatot a korlátok túllépése esetén. Javasolt elkerülni a nehéz számításokat, nagy képek betöltését és hosszú hálózati kéréseket a Content Extension-en belül.

Média-mellékletek és UNNotificationAttachment

UNNotificationAttachment egy objektum, amely médiafájlt ad a push-értesítéshez: képet, videót, hangot vagy GIF-et. A melléklet egy helyi fájl URL-ből jön létre, amelynek a bővítmény homokozójában kell lennie. A melléklet maximális mérete nem haladhatja meg a 10 MB-ot, ellenkező esetben a rendszer elutasítja a melléklet létrehozását.

Támogatott formátumok

Az Apple korlátozott formátumkészletet támogat a média-mellékletekhez. Képek — JPEG, PNG, GIF (animáltakat is beleértve), TIFF. Videó — MPEG, MP4, MOV legfeljebb 30 másodperc időtartammal. Hang — MP3, AAC, WAV, CAF. Minden formátumhoz megadható a típus az UNNotificationAttachmentOptionsTypeHintKey segítségével, ami segít a rendszernek a fájl helyes feldolgozásában.

Melléklet betöltése a hálózatról

Mivel a push payload csak az URL-t tartalmazza, nem magát a fájlt, a melléklet betöltését a Service Extension-en belül kell elvégezni. A maximális betöltési idő 30 másodpercre korlátozott, ezért ajánlott a URLSession használata minimális beállításokkal, és a betöltés letiltása gyenge jel esetén. Ha a melléklet nem töltődött be időben, az értesítés média nélkül jelenik meg — ez a rendszer alapértelmezett viselkedése.

Implementációs példa Swift-ben

Vizsgáljunk meg egy teljes Notification Extension példát, amely betölt egy képet, letölti és hozzáadja az értesítéshez. NotificationService az UNNotificationServiceExtension-ből származik és felülírja a didReceive metódust. A példa bemutatja az opcionális mezők feldolgozását, a melléklet létrehozását és a completion handler meghívását a módosított tartalommal.

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(
        _ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void
    ) {
        self.contentHandler = contentHandler
        self.bestAttemptContent =
            (request.content.mutableCopy()
                as! UNMutableNotificationContent)

        guard let attachmentURLString =
            bestAttemptContent?.userInfo["attachment-url"] as? String,
            let url = URL(string: attachmentURLString)
        else {
            contentHandler(request.content)
            return
        }

        URLSession.shared.downloadTask(with: url) {
            [weak self] localURL, _, error in
            guard let localURL = localURL, error == nil
            else {
                contentHandler(request.content)
                return
            }
            let attachment = try! UNNotificationAttachment(
                identifier: "media", url: localURL)
            self?.bestAttemptContent?.attachments = [attachment]
            contentHandler(self?.bestAttemptContent
                ?? request.content)
        }.resume()
    }

    override func serviceExtensionTimeWillExpire() {
        if let content = bestAttemptContent {
            contentHandler?(content)
        }
    }
}

Info.plist konfigurálása a bővítményhez

A bővítmény helyes működéséhez regisztrálni kell az értesítési kategóriákat az Info.plist-ben. Az NSExtensionPointIdentifier kulcs beállítása com.apple.usernotifications.service a Service Extension vagy com.apple.usernotifications.content a Content Extension esetében. A kategóriák az AppDelegate-ben kerülnek meghatározásra az alkalmazás indításakor az UNUserNotificationCenter segítségével, és a bővítmény csak a payload-ban megfelelő kategóriával rendelkező értesítéseknél aktiválódik.

Gyakran Ismételt Kérdések

Mi a különbség a Service Extension és a Content Extension között?

Service Extension módosítja a tartalmat az értesítés megjelenítése előtt — médiát ad hozzá, szöveget változtat, adatokat fejt vissza. A Content Extension az értesítés felületét cseréli egyedire a felhasználói interakció után. A Service Extension a megjelenítés előtt működik, a Content Extension — utána.

Mennyi idő áll rendelkezésre a feldolgozásra a Service Extension-ben?

A rendszer 30 másodpercet biztosít a kód végrehajtására a didReceive-ben. Ha a feldolgozás nem fejeződik be ez idő alatt, a serviceExtensionTimeWillExpire hívódik meg, ahol át kell adni az aktuális eredményt. Javasolt 10–15 másodpercen belül maradni, figyelembe véve a mellékletek betöltését.

Használható-e a SwiftUI a Content Extension-ben?

Igen, a SwiftUI támogatott a Content Extension-ben iOS 16-tól kezdve. A View UIHostingController-be van csomagolva és hozzáadva a storyboard-hoz. A memóriakorlátok miatt azonban ajánlott a SwiftUI-t csak egyszerű felületekhez használni minimális számú elemmel.

Hogyan kezeljük a melléklet betöltési hibáit?

Betöltési hiba vagy időkorlát túllépése esetén egyszerűen hívja meg a completion handlert az eredeti tartalommal melléklet nélkül. A rendszer megjeleníti az értesítést szabványos formában, média nélkül. Naplózza a hibákat OSLog segítségével diagnosztikai célból, de ne blokkolja az értesítés megjelenítését.

Mik a Notification Extension memóriakorlátai?

A bővítmény egy izolált folyamatban működik, körülbelül 50 MB korláttal. A korlát túllépése esetén a rendszer watchdog-on keresztül leállítja a folyamatot. Kerülje a nagy fájlok betöltését, képek memóriában tartását és memóriaszivárgásokat a URLSession használata során.

Összefoglalás

  • Notification Extension — iOS mechanizmus push-értesítések módosítására, beleértve a Service Extension (tartalom) és Content Extension (felület) elemeket.
  • Service Extension feldolgozza a payload-ot az értesítés megjelenítése előtt 30 másodperces korláttal, média-mellékleteket adhat hozzá és adatokat fejthet vissza.
  • Content Extension lecseréli a szabványos bannert egyedi felületre UIKit vagy SwiftUI segítségével, interaktív gombok támogatásával.
  • UNNotificationAttachment képeket, videókat és hangot ad az értesítéshez, támogatva a JPEG, PNG, MP4, MP3 és más formátumokat.
  • Bővítmények regisztrációja az Info.plist-en keresztül történik, megadva az NSExtensionPointIdentifier-t és az aktiváláshoz szükséges értesítési kategóriákat.
  • Korlátozások — 50 MB memóriakorlát, izolált homokozó a fő alkalmazáshoz való hozzáférés nélkül, korlátozott végrehajtási idő.
  • Notification Extension kulcsfontosságú eszköz gazdag felhasználói értesítések létrehozásához, növelve az elköteleződést és a push-kommunikáció funkcionalitását iOS-ben.

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.

Projekt megbeszélése

Olvassa el is