Notification Content Extension — özü, özel UI ve iOS'ta kurulum

Yazar: IT Sectr Yayınlanma: 2026-06-15 Okuma süresi: 9 dk

Notification Content Extension — push bildiriminin standart şablonunu tamamen özel bir kullanıcı arayüzüyle değiştiren bir iOS uzantı türüdür. Geliştirici, bildirimin içinde resimler, ses oynatıcı, eylem düğmeleri, ilerleme çubukları ve özel animasyon görüntüleme yeteneğine sahip olur ve standart banner’ı tam teşekküllü bir mini uygulamaya genişletir. WWDC 2025 verilerine göre, uzantı UNNotificationContentExtension kullanır ve bir bildirimde 4 medya ekinin yanı sıra UNNotificationAction aracılığıyla etkileşimli eylemlerin işlenmesini destekler.

Ana Konular

  • Notification Content Extension, standart sistem şablonu yerine push bildirimleri için özel arayüz oluşturur
  • Mimari, didReceive(_:with:) ve didReceive(_:withCompletionHandler:) yöntemleriyle UNNotificationContentExtension protokolüne dayanır
  • Uzantı, uygulamayı açmadan bildirimin içinde medya eklerini — resim, ses ve video — görüntüleyebilir
  • Etkileşimli bildirimler, geri bildirim ve metin girişi ile özel eylemleri destekler
  • Arayüz boyutu sınırlıdır — özel bildirimin maksimum yüksekliği iPhone’da 320 punto ve iPad’de 352 puntodur

Notification Content Extension Nedir

Notification Content Extension — iOS’ta push bildirimi görüntülemesini geçersiz kılan bir uygulama uzantısıdır. Başlık, mesaj gövdesi ve düğmeler içeren standart banner yerine, Interface Builder’da tamamen geliştirilmiş veya UIKit ya da SwiftUI aracılığıyla programlı olarak oluşturulmuş bir arayüz gösterilebilir.

Görüntülemeden önce içeriği değiştiren Notification Service Extension’ın aksine, Content Extension yalnızca görsel sunumdan sorumludur. Uzantı, tüm değişikliklerden sonra hazır bildirimi alır ve nasıl görüntüleneceğine karar verir. Bu, iki bildirim uzantısı türü arasındaki temel farktır.

Uzantı, kullanıcı genişletme hareketi yaptığında — bildirimi aşağı kaydırdığında veya üzerine tıkladığında (cihaz modeline bağlı olarak) — etkinleştirilir. iOS, uzantı sürecini başlatır, belirtilen nib veya storyboard’dan denetleyici oluşturur ve bildirimi UNNotificationContentExtension aracılığıyla iletir.

Özel Bildirim Arayüzü Oluşturma

Geliştirme, Xcode’da Notification Content Extension şablonuyla yeni bir target eklenmesiyle başlar. Xcode, MainInterface.storyboard dosyası ve UNNotificationContentExtension protokolünü uygulayan UIViewController’dan miras alan bir sınıf oluşturur.

Arayüz Boyutu ve Sınırlamaları

Özel alanın maksimum yüksekliği iPhone’da (büyük ekranlı modeller için) 320 punto ve iPad’de 352 puntodur. Bu sınırları aşan içerik kesilir. Farklı boyutlara uyum sağlamak için kaydırılabilir içerik için Auto Layout ve UIScrollView kullanılması önerilir. Genişlik her zaman bildirimin genişliğine eşittir ve cihaz döndürüldüğünde otomatik olarak değişir.

Apple Human Interface Guidelines uyarıyor: bildirim arayüzü kısa ve öz olmalı ve yalnızca bir ana öğe içermelidir — resim, oynatıcı, harita veya hızlı giriş formu. Birden çok etkileşimli öğe kullanıcıyı aşırı yükler ve etkileşimi karmaşıklaştırır.

Ana Uygulamayla Bağlantı

App Group — uzantı ve ana uygulama arasında veri alışverişi için tek mekanizmadır. App Group’un paylaşılan dizini aracılığıyla önbelleğe alınmış resimler, token’lar ve ayarlar aktarılabilir. Süreçlerin izolasyonu nedeniyle ana uygulamanın API’sine doğrudan çağrılar veya UserDefaults’ına erişim mevcut değildir.

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

UNNotificationContentExtension Protokolü

UNNotificationContentExtension — özel bildirimin yaşam döngüsünü tanımlayan ana protokoldür. Protokol, içerik alma, eylemleri işleme ve arayüzü yönetme için yöntemler sağlar.

didReceive:with: Yöntemi

didReceive(_:with:) bildirim alındığında çağrılır. Uzantı, medya oynatıcısını yönetmek için UNNotification nesnesi ve UNNotificationContentExtensionMediaPlayPauseButtonType alır. Bu yöntemde arayüzü ayarlamak gerekir — resim yüklemek, oynatıcıyı başlatmak veya veri görüntülemek. Sistem, gerçek zamanlı olarak bildirim her güncellendiğinde bu yöntemi çağırır.

Uzantının yürütme için sınırlı süresi olduğunu unutmamak önemlidir — tam görüntüleme döngüsü için yaklaşık 30 saniye. Arayüz bu süre içinde hazırlanmazsa, iOS bir sistem bildirimi gösterecektir. Ağır kaynaklar için — ağdan resim yükleme, video kod çözme — App Group aracılığıyla ön önbellekleme ile eşzamansız işlemler kullanılması önerilir.

Medya Oynatıcı Yönetimi

Protokol, play/pause düğmeleri için isteğe bağlı yöntemler içerir: mediaPlay, mediaPause ve mediaPlayPauseButtonType. Bildirim ses veya video içeriği içeriyorsa, uzantı sistem kontrol öğesiyle yerleşik bir oynatıcı gösterebilir. Uygun düğme türü döndürüldüğünde iOS, uzantının sağ üst köşesine otomatik olarak oynat düğmesi ekler.

Medya Ekleri ve İşlenmesi

UNNotificationAttachment — bildirime eklenmiş medya verilerini içeren nesnedir. Resimler, ses dosyaları ve videolar, sunucuda veya Notification Service Extension’da UNNotificationAttachment aracılığıyla bildirim oluşturma aşamasında eklenir.

Desteklenen Biçimler

Resimler için: JPEG, PNG, GIF, HEIF. Ses için: MP3, AAC, ALAC, WAV. Video için: MPEG-4, H.264, HEVC. Her ekin maksimum boyutu — 50 MB, bildirim başına en fazla 4 ek. Sistem, bildirim görüntülenmeden önce ekleri arka planda otomatik olarak indirir ve security-scoped kaynaklar aracılığıyla uzantıya yerel URL’lere erişim sağlar.

Apple’a göre, uzantı medyayı kendisi indirmemelidir — sistem tarafından indirme tamamlandıktan sonra UNNotificationAttachment zaten yerel URL içerir. Ancak, ek zamanında yüklenmezse (örneğin, zayıf bağlantı nedeniyle), uzantı bir yer tutucu veya alternatif metin görüntüleyebilir.

Security-scoped Kaynaklarla Çalışma

Her UNNotificationAttachment, uzantının startAccessingSecurityScopedResource() aracılığıyla erişmesi ve stopAccessingSecurityScopedResource() aracılığıyla serbest bırakması gereken bir security-scoped URL sağlar. Bu yöntemler çift olarak çağrılmalıdır — aksi takdirde kaynak serbest bırakılmaz ve erişim hakları sızdırılır.

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)

Etkileşimli Bildirimler ve Eylemler

Notification Content Extension, özel etkileşimli eylemleri — bildirim içeriğinin altında görüntülenen düğmeler — destekler. Eylemler, UNNotificationCategory aracılığıyla bildirim kategorisi oluşturulurken kaydedilir ve yıkıcı, metin veya arka plan olabilir.

Eylem Türleri

UNNotificationAction — başlık ve isteğe bağlı yıkıcı bayrak içeren basit eylem. UNTextInputNotificationAction — metin giriş alanı olan eylem, örneğin mesaja hızlı yanıt vermek için. Her iki tür de UNNotificationActionOptions.authenticationRequired seçeneğini destekler — yürütmeden önce cihazın kilidinin açılması zorunluluğu.

Uzantı, seçilen eylemi didReceive(_:withCompletionHandler:) yöntemi aracılığıyla alır; burada eylem tanımlayıcısı ve isteğe bağlı metin içeren UNNotificationResponse nesnesi iletilir. Uzantı, yanıtı kendisi işleyebilir veya paylaşılan App Group kapsayıcısı aracılığıyla ana uygulamaya iletebilir.

swift
let category = UNNotificationCategory(
    identifier: "message",
    actions: [
        UNTextInputNotificationAction(
            identifier: "reply",
            title: "Reply",
            options: .authenticationRequired
        ),
        UNNotificationAction(
            identifier: "mark_read",
            title: "Mark Read",
            options: .foreground
        )
    ],
    intentIdentifiers: []
)

Sıkça Sorulan Sorular

Notification Content Extension ve Service Extension arasındaki fark nedir?

Content Extension bildirimin görsel görüntülenmesinden sorumluyken, Service Extension görüntülemeden önce içeriği değiştirmekten sorumludur. Content Extension, Service Extension’dan sonra çalışır ve bildirimin yükünü değiştiremez.

Hangi programlama dilleri destekleniyor?

Swift ve Objective-C (UIKit için). iOS 16’dan itibaren SwiftUI de NotificationContentView aracılığıyla boyut ve yapılandırma değiştiricileriyle bildirim arayüzü oluşturmak için desteklenmektedir.

Notification Content Extension’da SwiftUI kullanılabilir mi?

Evet, iOS 16’dan itibaren uzantı, UIHostingController aracılığıyla SwiftUI kullanabilir. Ancak UIKit’in tüm yetkinlikleri — boyut, kısıtlamalar, security-scoped kaynaklar — korunur ve SwiftUI içeriğine uygulanır.

Bir bildirime kaç medya eki eklenebilir?

Bildirim başına en fazla 4 ek. Her ekin boyutu 50 MB’a kadar. Desteklenen biçimler: resim (JPEG, PNG, HEIF), ses (MP3, AAC) ve video (MPEG-4, H.264).

Uzantıdan ana uygulamaya veri nasıl aktarılır?

App Group aracılığıyla — diskteki paylaşılan dizin. app group sonekli UserDefaults da çalışır. Uzantı süreçlerinin izolasyonu nedeniyle ana uygulama API’sine doğrudan çağrılar mevcut değildir.

Özet

  • Notification Content Extension, standart bildirim arayüzünü herhangi bir görsel öğeye sahip özel arayüzle değiştirir
  • Mimari, arayüz güncellemesi için didReceive yöntemleriyle UNNotificationContentExtension protokolünü kullanır
  • UNNotificationAttachment, otomatik arka plan indirme ve security-scoped erişim ile medya ekleri sağlar
  • Etkileşimli eylemler, UNNotificationAction aracılığıyla metin girişi ve yıkıcı işlemleri destekler
  • Arayüzün maksimum yüksekliği iPhone’da 320 punto, içerik uyarlaması için UIScrollView önerilir
  • Ana uygulamayla veri alışverişi — yalnızca App Group ve diskteki paylaşılan dizin aracılığıyla

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun