Notification Content Extension — co to jest, jak stworzyć niestandardowy interfejs dla iOS

Autor: IT Sectr Opublikowano: 2026-03-21 Czas czytania: 8 min

Notification Content Extension — to rozszerzenie iOS, które pozwala zastąpić standardowy interfejs push powiadomienia niestandardowym UIView. Deweloper otrzymuje pełną kontrolę nad wyświetlaniem treści: obrazy, wideo, animacje, niestandardowe czcionki i interaktywne elementy. Według Apple Developer, 2025, Notification Content Extension obsługuje dowolny interfejs UIKit w ograniczonej przestrzeni powiadomienia.

Najważniejsze

  • Notification Content Extension — rozszerzenie iOS dla niestandardowego UI push powiadomień.
  • Rozszerzenie implementuje protokół UNNotificationContentExtension z obowiązkową metodą didReceive.
  • Niestandardowy interfejs tworzy się w Storyboard i może zawierać dowolne komponenty UIKit.
  • Maksymalny rozmiar rozszerzenia — 50 MB i nie powinien przekraczać 12 MB w formacie skompresowanym.
  • Rozszerzenie aktywuje się dla powiadomień z określonym categoryIdentifier.

Co to jest Notification Content Extension

Notification Content Extension — to app extension w iOS, które nadpisuje standardowy szablon wyświetlania push powiadomienia niestandardowym UIView. W przeciwieństwie do zwykłego powiadomienia, gdzie treść jest ograniczona do tytułu, podtytułu i treści, rozszerzenie pozwala wyświetlić dowolny interfejs UIKit: mapę ze współrzędnymi, wykres, galerię obrazów lub formularz wprowadzania.

Jak to działa

Gdy iOS otrzymuje push powiadomienie z określonym categoryIdentifier, system sprawdza, czy rozszerzenie jest zarejestrowane dla tej kategorii. Jeśli tak — system uruchamia rozszerzenie w oddzielnym procesie i przekazuje mu treść powiadomienia. Rozszerzenie wyświetla swój interfejs zamiast standardowego. Użytkownik wchodzi w interakcję z niestandardowym interfejsem bez otwierania głównej aplikacji.

Różnica od Notification Service Extension

Ważne jest, aby nie mylić Notification Content Extension z Notification Service Extension. Service Extension przetwarza treść przed wyświetleniem powiadomienia (pobieranie załączników, deszyfrowanie). Content Extension zastępuje interfejs po otrzymaniu gotowej treści. Oba rozszerzenia mogą działać w tandemie: Service Extension przygotowuje dane, Content Extension je wyświetla.

CechaContent ExtensionService Extension
PrzeznaczenieNiestandardowy UI powiadomieniaModyfikacja treści przed wyświetleniem
Czas wykonaniaDopóki użytkownik widzi powiadomienieDo 30 sekund w tle
InterfejsPełny UIKit UIViewBrak interfejsu
APIUNNotificationContentExtensionUNNotificationServiceExtension

Ograniczenia rozszerzenia

Notification Content Extension działa w izolowanym procesie z ograniczonymi zasobami. Rozszerzenie nie ma dostępu do głównego magazynu aplikacji przez NSUserDefaults, z wyjątkiem App Group. Rozmiar rozszerzenia jest ograniczony do 50 MB w formacie rozpakowanym. Czas na wyświetlenie treści jest również ograniczony — jeśli rozszerzenie nie zakończy aktualizacji w rozsądnym czasie, system je zamyka.

Tworzenie Notification Content Extension w Xcode

Aby utworzyć rozszerzenie w Xcode, należy dodać nowy target typu Notification Content Extension. Xcode automatycznie utworzy MainInterface.storyboard z kontrolerem dziedziczącym po UIViewController i implementującym UNNotificationContentExtension.

Dodawanie target-rozszerzenia

W Xcode wybierz File → New → Target → Notification Content Extension. Podaj nazwę rozszerzenia, język (Swift lub Objective-C) i upewnij się, że projekt jest podłączony do tego samego zespołu deweloperskiego. Po utworzeniu targetu pojawi się folder z trzema plikami: MainInterface.storyboard, Info.plist i plik kontrolera.

Konfiguracja Info.plist

W Info.plist rozszerzenia obowiązkowo podaje się tablicę NSExtensionAttributes z kluczem UNNotificationExtensionCategory. Ta tablica zawiera identyfikatory kategorii powiadomień, dla których rozszerzenie będzie aktywowane. Opcjonalny klucz UNNotificationExtensionInitialContentSizeRatio określa początkowy współczynnik proporcji niestandardowego interfejsu dla prawidłowego pozycjonowania.

Architektura folderów rozszerzenia

Zaleca się utrzymanie czystej architektury w target-rozszerzeniu: osobny folder dla kontrolerów, osobny dla niestandardowych widoków. Ponieważ rozszerzenie jest oddzielnym binarnym plikiem, kod głównej aplikacji nie jest bezpośrednio dostępny. Do współdzielenia kodu utwórz osobny framework lub użyj App Group dla danych.

Implementacja protokołu UNNotificationContentExtension

UNNotificationContentExtension — protokół, który musi zaimplementować kontroler w Notification Content Extension. Jedyną obowiązkową metodą jest didReceive(_:with:), wywoływana przy otrzymaniu powiadomienia. Kontroler otrzymuje powiadomienie i gotowy view controller, który należy zaktualizować danymi.

Podstawowa implementacja kontrolera

Kontroler rozszerzenia musi dziedziczyć po UIViewController i implementować UNNotificationContentExtension. Storyboard lub xib jest powiązany z tym kontrolerem. Po otrzymaniu powiadomienia metoda didReceive przekazuje treść, a kontroler aktualizuje swoje widoki.

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

Zarządzanie rozmiarem interfejsu

System określa rozmiar niestandardowego interfejsu na podstawie klucza UNNotificationExtensionInitialContentSizeRatio w Info.plist oraz aktualnej treści. Zaleca się ustawienie tego klucza na wartość 0.1 dla minimalnego początkowego rozmiaru, a następnie zmianę rozmiaru przez preferredContentSize po załadowaniu treści.

Dostosowywanie interfejsu i interaktywność

Notification Content Extension daje pełną swobodę w tworzeniu interfejsu. Można używać dowolnych komponentów UIKit: UITableView, MKMapView, WKWebView, UIStackView. Należy jednak uwzględnić ograniczoną przestrzeń powiadomienia i zoptymalizować wydajność.

Dodawanie mapy do powiadomienia

Jednym z popularnych scenariuszy jest wyświetlenie mapy z lokalizacją. W tym celu w Storyboard rozszerzenia dodaje się MKMapView, a kontroler przekazuje współrzędne z treści powiadomienia. Ważne jest, aby nie zapomnieć dodać MapKit do targetu rozszerzenia. Podczas korzystania z mapy należy uwzględnić limit pamięci rozszerzenia — ładowanie złożonych kafelków może przekroczyć dostępne zasoby.

Animacje i przejścia

Notification Content Extension obsługuje animacje UIView, w tym zmianę rozmiarów, przesuwanie i przezroczystość elementów. Przy wejściu w rozszerzony tryb powiadomienia można uruchomić animację pojawiania się treści. Animacje powinny być krótkie (do 0.5 sekundy) i nie przeszkadzać użytkownikowi w interakcji z powiadomieniem. Unikaj nieskończonych animacji — zużywają baterię i obniżają wydajność.

Obsługa dotknięć w niestandardowym interfejsie

Ponieważ rozszerzenie jest pełnoprawnym UIViewController, można dodawać gesty i obsługę dotknięć. UIKit gestures (UITapGestureRecognizer, UIButton) działają standardowo. Do akcji wymagających otwarcia aplikacji użyj delegata rozszerzenia lub userNotificationCenter. Elementy interaktywne powinny być wystarczająco duże, aby wygodnie je nacisnąć w ograniczonej przestrzeni — minimalny rozmiar touch target to 44x44 punkty zgodnie z zaleceniami Apple.

Praca z mediami i załącznikami

Treści multimedialne — kluczowa możliwość Notification Content Extension. Powiadomienie może zawierać obrazy, GIF, audio i wideo, które są wyświetlane w niestandardowym interfejsie. Załączniki są dostarczane przez UNNotificationAttachment, który może być dodany zarówno przez serwer przez payload, jak i przez Notification Service Extension po pobraniu. Obsługiwane formaty to JPEG, PNG, MPEG-4 i MP3.

Wyświetlanie multimediów w rozszerzeniu

Do wyświetlenia obrazu wystarczy pobrać UNNotificationAttachment z treści powiadomienia i załadować go z lokalnego URL. Należy pamiętać, że rozszerzenie ma dostęp tylko do lokalnych plików — zdalne zasoby muszą być wcześniej pobrane przez Service Extension. Maksymalny rozmiar załącznika — 50 MB na iOS 15+, ograniczenie jest zwiększane z każdą kolejną aktualizacją. Do obsługi wielu obrazów użyj UNNotificationAttachment z różnymi identyfikatorami i wyświetlaj je przez UIPageViewController.

Ładowanie i wyświetlanie obrazów

Do wyświetlenia obrazu w niestandardowym interfejsie rozszerzenie pobiera UNNotificationAttachment z treści powiadomienia i ładuje go z lokalnego URL. Załącznik musi być wcześniej pobrany przez Notification Service Extension — Content Extension nie ma dostępu do sieci. Maksymalny rozmiar załącznika multimedialnego — 50 MB na iOS 15+, we wcześniejszych wersjach ograniczenie wynosiło 10 MB. Rozszerzenie powinno poprawnie obsługiwać brak załącznika i wyświetlać fallback-interfejs. Do wstępnego ładowania obrazów o niskiej rozdzielczości użyj wersji miniatur, utworzonych przez Service Extension przed dołączeniem.

Odtwarzanie wideo w powiadomieniu

iOS obsługuje odtwarzanie wideo w Notification Content Extension przez AVPlayerLayer. Rozszerzenie może wyświetlić odtwarzacz wideo z przyciskami sterowania bezpośrednio w powiadomieniu. Jest to szczególnie przydatne w aplikacjach monitoringu, streamingu lub podglądu treści. Autoodtwarzanie bez dźwięku jest dozwolone pod warunkiem, że użytkownik oczekuje treści multimedialnej w tym powiadomieniu. Przy implementacji odtwarzacza wideo dodaj elementy sterowania: play/pause, pasek postępu i przycisk zamykania. Upewnij się, że wideo nie uruchamia się automatycznie z dźwiękiem — to narusza zalecenia Apple dotyczące doświadczenia użytkownika. Dla pokazu slajdów z kilku obrazów użyj animowanego przejścia między nimi przez UIView.transition z opcją przejścia przewracania strony.

Optymalizacja wydajności rozszerzenia

Notification Content Extension działa w ograniczonym środowisku z limitem pamięci około 50 MB. Aby zoptymalizować wydajność, używaj leniwego ładowania obrazów, unikaj ciężkich obliczeń na głównym wątku i stosuj Auto Layout z prostymi constraintami. Ciężkie operacje, takie jak przetwarzanie obrazów lub parsowanie danych, wykonuj w tle (DispatchQueue.global). Po przekroczeniu limitu pamięci system zamknie rozszerzenie, a użytkownik zobaczy standardowe powiadomienie. Zaleca się profilowanie rozszerzenia przez Instruments (Allocations i Time Profiler) przed publikacją oraz sprawdzanie zużycia pamięci na rzeczywistych urządzeniach z różnymi wersjami iOS.

Często zadawane pytania

Czy można użyć SwiftUI w Notification Content Extension?

Tak, od iOS 16 Notification Content Extension obsługuje SwiftUI przez UIHostingController. Jednak UIKit pozostaje bardziej stabilnym wyborem dla złożonych interfejsów ze względu na ograniczoną obsługę SwiftUI w rozszerzeniach.

Dlaczego rozszerzenie nie aktywuje się dla mojego powiadomienia?

Sprawdź, czy categoryIdentifier w payload powiadomienia zgadza się z UNNotificationExtensionCategory w Info.plist rozszerzenia. Upewnij się również, że rozszerzenie zostało dodane do głównego targetu aplikacji i jest prawidłowo podpisane.

Jak przekazać dane z głównej aplikacji do rozszerzenia?

Użyj App Group — wspólnego magazynu (UserDefaults suite) lub kontenera plików. Główna aplikacja i rozszerzenie muszą być w tej samej grupie deweloperskiej i mieć włączony capability App Groups.

Jak zaktualizować zawartość rozszerzenia bez nowego powiadomienia?

Użyj metody didReceive(_:with:) z UNNotificationContentExtensionMediaPlayPauseButtonType do sterowania mediami lub poproś o aktualizację przez delegata. Pełna aktualizacja treści bez nowego powiadomienia jest niemożliwa.

Jak debugować Notification Content Extension?

Wybierz target rozszerzenia w Xcode i uruchom na symulatorze. Użyj lldb i breakpointów jak w zwykłej aplikacji. Do testowania wyślij push powiadomienie przez Firebase Console lub lokalnie przez Pusher.

Podsumowanie

  • Notification Content Extension — rozszerzenie iOS do niestandardowego wyświetlania push powiadomień.
  • Rozszerzenie implementuje UNNotificationContentExtension i zapewnia pełny interfejs UIKit.
  • Aktywuje się dla powiadomień z pasującym categoryIdentifier.
  • Obsługuje dowolne komponenty UI: mapy, obrazy, wideo, animacje.
  • Działa w izolowanym procesie z dostępem przez App Group.
  • Ograniczenie rozmiaru — 50 MB rozpakowanego rozszerzenia.
  • Do treści multimedialnych używaj UNNotificationAttachment przygotowanego przez Service Extension.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również