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 — 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.
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.
Ö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.
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.
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 — ö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:) 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.
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.
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.
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.
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.
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)
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.
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.
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
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.
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.
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.
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).
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
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.
Ayrıca okuyun