Notification Content Extension — ce este, cum să creați o interfață personalizată pentru iOS

Autor: IT Sectr Publicat: 2026-03-21 Timp de citire: 8 min

Notification Content Extension — este o extensie iOS care permite înlocuirea interfeței standard a notificării push cu un UIView personalizat. Dezvoltatorul obține control complet asupra afișării conținutului: imagini, video, animații, fonturi personalizate și elemente interactive. Conform Apple Developer, 2025, Notification Content Extension suportă orice interfață UIKit în spațiul limitat al notificării.

Principalele puncte

  • Notification Content Extension — extensie iOS pentru UI personalizat al notificărilor push.
  • Extensia implementează protocolul UNNotificationContentExtension cu metoda obligatorie didReceive.
  • Interfața personalizată se creează în Storyboard și poate conține orice componente UIKit.
  • Dimensiunea maximă a extensiei — 50 MB și nu trebuie să depășească 12 MB în formă comprimată.
  • Extensia se activează pentru notificările cu categoryIdentifier specificat.

Ce este Notification Content Extension

Notification Content Extension — este o extensie de aplicație în iOS care suprascrie șablonul standard de afișare a notificării push cu un UIView personalizat. Spre deosebire de o notificare obișnuită, unde conținutul este limitat la titlu, subtitlu și corp, extensia permite afișarea oricărei interfețe UIKit: hartă cu coordonate, grafic, galerie de imagini sau formular de introducere.

Cum funcționează

Când iOS primește o notificare push cu categoryIdentifier specificat, sistemul verifică dacă extensia este înregistrată pentru această categorie. Dacă da — sistemul lansează extensia într-un proces separat și îi transmite conținutul notificării. Extensia afișează propria interfață în locul celei standard. Utilizatorul interacționează cu interfața personalizată fără a deschide aplicația principală.

Diferența față de Notification Service Extension

Este important să nu confundați Notification Content Extension cu Notification Service Extension. Service Extension procesează conținutul înainte de afișarea notificării (descărcarea atașamentelor, decriptarea). Content Extension înlocuiește interfața după primirea conținutului gata. Ambele extensii pot funcționa în tandem: Service Extension pregătește datele, Content Extension le afișează.

CaracteristicăContent ExtensionService Extension
ScopUI personalizat al notificăriiModificarea conținutului înainte de afișare
Timp de execuțieCât timp utilizatorul vede notificareaPână la 30 de secunde în fundal
InterfațăUIKit UIView completFără interfață
APIUNNotificationContentExtensionUNNotificationServiceExtension

Limitările extensiei

Notification Content Extension funcționează într-un proces izolat cu resurse limitate. Extensia nu are acces la stocarea principală a aplicației prin NSUserDefaults, cu excepția App Group. Dimensiunea extensiei este limitată la 50 MB în formă decomprimată. Timpul de afișare a conținutului este de asemenea limitat — dacă extensia nu finalizează actualizarea într-un timp rezonabil, sistemul o închide.

Crearea Notification Content Extension în Xcode

Pentru a crea extensia în Xcode, trebuie să adăugați un nou target de tip Notification Content Extension. Xcode va crea automat MainInterface.storyboard cu un controler care moștenește UIViewController și implementează UNNotificationContentExtension.

Adăugarea target-extensiei

În Xcode selectați File → New → Target → Notification Content Extension. Specificați numele extensiei, limbajul (Swift sau Objective-C) și asigurați-vă că proiectul este conectat la aceeași echipă de dezvoltatori. După crearea targetului, va apărea un folder cu trei fișiere: MainInterface.storyboard, Info.plist și fișierul controlerului.

Configurarea Info.plist

În Info.plist al extensiei se specifică obligatoriu tabloul NSExtensionAttributes cu cheia UNNotificationExtensionCategory. Acest tablou conține identificatorii categoriilor de notificări pentru care extensia va fi activată. Cheia opțională UNNotificationExtensionInitialContentSizeRatio stabilește raportul de aspect inițial al interfeței personalizate pentru poziționarea corectă.

Arhitectura folderelor extensiei

Se recomandă menținerea unei arhitecturi curate în target-extensie: folder separat pentru controlere, folder separat pentru vizualizări personalizate. Deoarece extensia este un fișier binar separat, codul aplicației principale nu este accesibil direct. Pentru partajarea codului, creați un framework separat sau utilizați App Group pentru date.

Implementarea protocolului UNNotificationContentExtension

UNNotificationContentExtension — protocol pe care controlerul din Notification Content Extension trebuie să îl implementeze. Singura metodă obligatorie este didReceive(_:with:), apelată la primirea notificării. Controlerul primește notificarea și un view controller gata care trebuie actualizat cu date.

Implementarea de bază a controlerului

Controlerul extensiei trebuie să moștenească UIViewController și să implementeze UNNotificationContentExtension. Storyboard sau xib este asociat cu acest controler. La primirea notificării, metoda didReceive transmite conținutul, iar controlerul își actualizează vizualizările.

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

Gestionarea dimensiunii interfeței

Sistemul determină dimensiunea interfeței personalizate pe baza cheii UNNotificationExtensionInitialContentSizeRatio din Info.plist și a conținutului curent. Se recomandă setarea acestei chei la valoarea 0.1 pentru o dimensiune inițială minimă, apoi modificarea dimensiunii prin preferredContentSize după încărcarea conținutului.

Personalizarea interfeței și interactivitatea

Notification Content Extension oferă libertate completă în crearea interfeței. Puteți utiliza orice componente UIKit: UITableView, MKMapView, WKWebView, UIStackView. Cu toate acestea, trebuie să țineți cont de spațiul limitat al notificării și să optimizați performanța.

Adăugarea hărții în notificare

Unul dintre scenariile populare este afișarea hărții cu locația. Pentru aceasta, în Storyboard al extensiei se adaugă MKMapView, iar controlerul transmite coordonatele din conținutul notificării. Este important să nu uitați să adăugați MapKit la targetul extensiei. Când utilizați harta, luați în considerare limita de memorie a extensiei — încărcarea plăcilor complexe poate depăși resursele disponibile.

Animații și tranziții

Notification Content Extension suportă animații UIView, inclusiv modificarea dimensiunilor, deplasarea și transparența elementelor. La intrarea în modul extins al notificării, puteți porni animația de apariție a conținutului. Animațiile trebuie să fie scurte (până la 0.5 secunde) și să nu împiedice utilizatorul să interacționeze cu notificarea. Evitați animațiile infinite — acestea consumă bateria și reduc performanța.

Gestionarea atingerilor în interfața personalizată

Deoarece extensia este un UIViewController complet, puteți adăuga gesturi și gestionarea atingerilor. Gestiunile UIKit (UITapGestureRecognizer, UIButton) funcționează standard. Pentru acțiunile care necesită deschiderea aplicației, utilizați delegatul extensiei sau userNotificationCenter. Elementele interactive trebuie să fie suficient de mari pentru a fi atinse confortabil în spațiul limitat — dimensiunea minimă a touch target este de 44x44 de puncte conform recomandărilor Apple.

Lucrul cu media și atașamente

Conținutul multimedia — o capacitate cheie a Notification Content Extension. Notificarea poate conține imagini, GIF, audio și video care sunt afișate în interfața personalizată. Atașamentele sunt livrate prin UNNotificationAttachment, care poate fi adăugat atât de server prin payload, cât și de Notification Service Extension după descărcare. Formatele suportate sunt JPEG, PNG, MPEG-4 și MP3.

Afișarea media în extensie

Pentru a afișa o imagine, este suficient să obțineți UNNotificationAttachment din conținutul notificării și să îl încărcați de la un URL local. Este important să rețineți că extensia are acces doar la fișierele locale — resursele la distanță trebuie descărcate în prealabil de Service Extension. Dimensiunea maximă a atașamentului — 50 MB pe iOS 15+, limita este mărită cu fiecare actualizare ulterioară. Pentru suportarea mai multor imagini, utilizați UNNotificationAttachment cu identificatori diferiți și afișați-le prin UIPageViewController.

Încărcarea și afișarea imaginilor

Pentru a afișa o imagine în interfața personalizată, extensia obține UNNotificationAttachment din conținutul notificării și îl încarcă de la un URL local. Atașamentul trebuie descărcat în prealabil de Notification Service Extension — Content Extension nu are acces la rețea. Dimensiunea maximă a atașamentului multimedia — 50 MB pe iOS 15+, în versiunile anterioare limita era de 10 MB. Extensia trebuie să gestioneze corect absența atașamentului și să afișeze o interfață de rezervă. Pentru încărcarea preliminară a imaginilor cu rezoluție scăzută, utilizați versiuni miniatură create de Service Extension înainte de atașare.

Redarea video în notificare

iOS suportă redarea video în Notification Content Extension prin AVPlayerLayer. Extensia poate afișa un player video cu butoane de control direct în notificare. Acest lucru este util în special pentru aplicațiile de supraveghere video, streaming sau previzualizare a conținutului. Redarea automată fără sunet este permisă cu condiția ca utilizatorul să se aștepte la conținut multimedia în această notificare. La implementarea playerului video, adăugați elemente de control: play/pause, bară de progres și buton de închidere. Asigurați-vă că videoclipul nu pornește automat cu sunet — acest lucru încalcă recomandările Apple privind experiența utilizatorului. Pentru un slideshow cu mai multe imagini, utilizați o tranziție animată între ele prin UIView.transition cu opțiunea de tranziție prin întoarcerea paginii.

Optimizarea performanței extensiei

Notification Content Extension funcționează într-un mediu limitat cu o limită de memorie de aproximativ 50 MB. Pentru a optimiza performanța, utilizați încărcarea lentă a imaginilor, evitați calculele grele pe thread-ul principal și aplicați Auto Layout cu constrângeri simple. Operațiile grele, cum ar fi procesarea imaginilor sau parsarea datelor, executați-le în fundal (DispatchQueue.global). La depășirea limitei de memorie, sistemul va închide extensia, iar utilizatorul va vedea notificarea standard. Se recomandă profilarea extensiei prin Instruments (Allocations și Time Profiler) înainte de publicare, precum și verificarea consumului de memorie pe dispozitive reale cu diferite versiuni iOS.

Întrebări frecvente

Se poate utiliza SwiftUI în Notification Content Extension?

Da, începând cu iOS 16, Notification Content Extension suportă SwiftUI prin UIHostingController. Cu toate acestea, UIKit rămâne o alegere mai stabilă pentru interfețe complexe din cauza suportului limitat al SwiftUI în extensii.

De ce extensia nu se activează pentru notificarea mea?

Verificați că categoryIdentifier din payload-ul notificării corespunde cu UNNotificationExtensionCategory din Info.plist al extensiei. De asemenea, asigurați-vă că extensia a fost adăugată la targetul principal al aplicației și este semnată corect.

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

Utilizați App Group — stocare comună (UserDefaults suite) sau container de fișiere. Aplicația principală și extensia trebuie să fie în același grup de dezvoltatori și să aibă capabilitatea App Groups activată.

Cum să actualizez conținutul extensiei fără o notificare nouă?

Utilizați metoda didReceive(_:with:) cu UNNotificationContentExtensionMediaPlayPauseButtonType pentru controlul media sau solicitați actualizarea prin delegat. Actualizarea completă a conținutului fără o notificare nouă nu este posibilă.

Cum să depanez Notification Content Extension?

Selectați targetul extensiei în Xcode și rulați pe simulator. Utilizați lldb și breakpoint-uri ca într-o aplicație obișnuită. Pentru testare, trimiteți o notificare push prin Firebase Console sau local prin Pusher.

Rezumat

  • Notification Content Extension — extensie iOS pentru afișarea personalizată a notificărilor push.
  • Extensia implementează UNNotificationContentExtension și oferă o interfață UIKit completă.
  • Se activează pentru notificări cu categoryIdentifier corespunzător.
  • Suportă orice componente UI: hărți, imagini, video, animații.
  • Funcționează în proces izolat cu acces prin App Group.
  • Limită de dimensiune — 50 MB pentru extensia decomprimată.
  • Pentru conținut multimedia, utilizați UNNotificationAttachment pregătit de Service Extension.

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