Notification Content Extension — esența, UI personalizat și configurarea în iOS

Autor: IT Sectr Publicat: 2026-06-15 Timp de citire: 9 min

Notification Content Extension — este un tip de extensie iOS care înlocuiește șablonul standard de notificare push cu o interfață complet personalizată. Dezvoltatorul primește posibilitatea de a afișa imagini, player audio, butoane de acțiune, bare de progres și animații personalizate în interiorul notificării, extinzând bannerul standard la o mini-aplicație completă. Conform datelor WWDC 2025, extensia utilizează UNNotificationContentExtension și suportă până la 4 atașamente media într-o singură notificare, precum și procesarea acțiunilor interactive prin UNNotificationAction.

Repere

  • Notification Content Extension creează o interfață personalizată pentru notificările push în locul șablonului standard de sistem
  • Arhitectura se bazează pe protocolul UNNotificationContentExtension cu metodele didReceive(_:with:) și didReceive(_:withCompletionHandler:)
  • Extensia poate afișa atașamente media — imagini, audio și video — direct în notificare fără a deschide aplicația
  • Notificările interactive suportă acțiuni personalizate cu feedback și introducere text
  • Dimensiunea interfeței este limitată — înălțimea maximă a notificării personalizate este de 320 de puncte pe iPhone și 352 pe iPad

Ce este Notification Content Extension

Notification Content Extension — este o extensie de aplicație care suprascrie afișarea notificării push pe iOS. În locul unui banner standard cu titlu, corp de mesaj și butoane, se poate afișa o interfață complet proiectată în Interface Builder sau programatic prin UIKit ori SwiftUI.

Spre deosebire de Notification Service Extension, care modifică conținutul înainte de afișare, Content Extension răspunde doar de prezentarea vizuală. Extensia primește notificarea gata după toate modificările și decide cum să o afișeze. Aceasta este diferența cheie între cele două tipuri de extensii de notificări.

Extensia se activează când utilizatorul execută un gest de extindere — derulează notificarea în jos sau face clic pe ea (în funcție de modelul dispozitivului). iOS pornește procesul extensiei, creează controlerul din nib-ul sau storyboard-ul specificat și transmite notificarea prin UNNotificationContentExtension.

Crearea unei interfețe personalizate de notificare

Dezvoltarea începe cu adăugarea unui nou target în Xcode cu șablonul Notification Content Extension. Xcode creează fișierul MainInterface.storyboard și o clasă care moștenește UIViewController, implementând protocolul UNNotificationContentExtension.

Dimensiunea și limitările interfeței

Înălțimea maximă a zonei personalizate — 320 de puncte pe iPhone (pentru modelele cu ecran mare) și 352 de puncte pe iPad. Conținutul care depășește aceste limite este tăiat. Pentru adaptarea la diferite dimensiuni, se recomandă utilizarea Auto Layout și UIScrollView pentru conținut derulabil. Lățimea este întotdeauna egală cu lățimea notificării și se modifică automat la rotirea dispozitivului.

Apple Human Interface Guidelines avertizează: interfața notificării trebuie să fie concisă și să conțină un singur element principal — imagine, player, hartă sau formular de introducere rapidă. Elementele interactive multiple supraîncarcă utilizatorul și complică interacțiunea.

Comunicarea cu aplicația principală

App Group — este singurul mecanism de schimb de date între extensie și aplicația principală. Prin directorul comun App Group se pot transmite imagini cache, tokeni și setări. Apelurile directe API ale aplicației principale sau accesul la UserDefaults-ul acesteia nu sunt disponibile din cauza izolării proceselor.

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()
        }
    }
}

Protocolul UNNotificationContentExtension

UNNotificationContentExtension — protocolul principal care definește ciclul de viață al notificării personalizate. Protocolul oferă metode pentru primirea conținutului, procesarea acțiunilor și gestionarea interfeței.

Metoda didReceive:with:

didReceive(_:with:) este apelată la primirea notificării. Extensia primește un obiect UNNotification și UNNotificationContentExtensionMediaPlayPauseButtonType pentru gestionarea playerului media. În această metodă trebuie configurată interfața — încărcată imaginea, inițializat playerul sau afișate datele. Sistemul apelează această metodă de fiecare dată când notificarea este actualizată în timp real.

Este important de reținut că extensia are timp limitat pentru execuție — aproximativ 30 de secunde pentru un ciclu complet de afișare. Dacă interfața nu este pregătită în acest timp, iOS va afișa o notificare de sistem. Pentru resurse grele — încărcarea imaginilor din rețea, decodarea video — se recomandă utilizarea operațiilor asincrone cu cache prealabil prin App Group.

Gestionarea playerului media

Protocolul include metode opționale pentru butoanele play/pause: mediaPlay, mediaPause și mediaPlayPauseButtonType. Dacă notificarea conține conținut audio sau video, extensia poate afișa un player încorporat cu element de control de sistem. iOS adaugă automat un buton de redare în colțul din dreapta sus al extensiei la returnarea tipului de buton corespunzător.

Atașamentele media și procesarea lor

UNNotificationAttachment — obiectul care conține datele media atașate notificării. Imaginile, fișierele audio și video sunt adăugate în etapa de creare a notificării pe server sau în Notification Service Extension prin UNNotificationAttachment.

Formate suportate

Pentru imagini: JPEG, PNG, GIF, HEIF. Pentru audio: MP3, AAC, ALAC, WAV. Pentru video: MPEG-4, H.264, HEVC. Dimensiunea maximă a fiecărui atașament — 50 MB, până la 4 atașamente per notificare. Sistemul descarcă automat atașamentele în fundal înainte de afișarea notificării și oferă extensiei acces la URL-uri locale prin resurse security-scoped.

Conform Apple, extensia nu ar trebui să încarce media independent — UNNotificationAttachment conține deja un URL local după finalizarea descărcării de către sistem. Totuși, dacă atașamentul nu a fost descărcat la timp (de exemplu, la conexiune slabă), extensia poate afișa un placeholder sau text alternativ.

Lucrul cu resursele security-scoped

Fiecare UNNotificationAttachment oferă un security-scoped URL, la care extensia trebuie să acceseze prin startAccessingSecurityScopedResource() și să îl elibereze prin stopAccessingSecurityScopedResource(). Aceste metode trebuie apelate în perechi — altfel resursa nu va fi eliberată și va cauza scurgerea permisiunilor de acces.

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)

Notificări interactive și acțiuni

Notification Content Extension suportă acțiuni interactive personalizate — butoane care sunt afișate sub conținutul notificării. Acțiunile sunt înregistrate la crearea categoriei de notificare prin UNNotificationCategory și pot fi distructive, text sau de fundal.

Tipuri de acțiuni

UNNotificationAction — o acțiune simplă cu titlu și un flag opțional de distructivitate. UNTextInputNotificationAction — o acțiune cu câmp de introducere text, de exemplu pentru răspuns rapid la un mesaj. Ambele tipuri suportă opțiunea UNNotificationActionOptions.authenticationRequired — cerința de deblocare a dispozitivului înainte de execuție.

Extensia primește acțiunea selectată prin metoda didReceive(_:withCompletionHandler:), unde este transmis un obiect UNNotificationResponse cu identificatorul acțiunii și textul opțional. Extensia poate procesa răspunsul independent sau îl poate transmite aplicației principale prin containerul comun 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: []
)

Întrebări frecvente

Care este diferența dintre Notification Content Extension și Service Extension?

Content Extension răspunde de afișarea vizuală a notificării, iar Service Extension — de modificarea conținutului înainte de afișare. Content Extension funcționează după Service Extension și nu poate modifica payload-ul notificării.

Ce limbaje de programare sunt suportate?

Swift și Objective-C pentru UIKit. De la iOS 16, SwiftUI este de asemenea suportat pentru crearea interfeței de notificare prin NotificationContentView cu modificatori de dimensiune și configurare.

Se poate folosi SwiftUI în Notification Content Extension?

Da, de la iOS 16 extensia poate folosi SwiftUI prin UIHostingController. Cu toate acestea, toate competențele UIKit — dimensiune, constrângeri, resurse security-scoped — sunt păstrate și aplicate conținutului SwiftUI.

Câte atașamente media pot fi atașate unei notificări?

Până la 4 atașamente per notificare. Fiecare atașament de până la 50 MB. Sunt suportate imagini (JPEG, PNG, HEIF), audio (MP3, AAC) și video (MPEG-4, H.264).

Cum se transferă datele din extensie în aplicația principală?

Prin App Group — un director comun pe disc. UserDefaults cu sufixul app group funcționează de asemenea. Apelurile directe API ale aplicației principale nu sunt disponibile din cauza izolării proceselor extensiei.

Concluzii

  • Notification Content Extension înlocuiește interfața standard de notificare cu una personalizată cu orice elemente vizuale
  • Arhitectura utilizează protocolul UNNotificationContentExtension cu metodele didReceive pentru actualizarea interfeței
  • UNNotificationAttachment oferă atașamente media cu descărcare automată în fundal și acces security-scoped
  • Acțiunile interactive suportă introducerea textului și operații distructive prin UNNotificationAction
  • Înălțimea maximă a interfeței — 320 de puncte pe iPhone, pentru adaptarea conținutului se recomandă UIScrollView
  • Schimbul de date cu aplicația principală — doar prin App Group și directorul comun pe disc

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și