Notification Content Extension, standart push bildirimi arayüzünü özel bir UIView ile değiştirmeye olanak tanıyan bir iOS uzantısıdır. Geliştirici, içerik görüntüleme üzerinde tam kontrole sahiptir: görseller, videolar, animasyonlar, özel yazı tipleri ve etkileşimli öğeler. Apple Developer, 2025'e göre, Notification Content Extension, bildirimin sınırlı alanında herhangi bir UIKit arayüzünü destekler.
Önemli Noktalar
Notification Content Extension, push bildirimlerinin standart görüntüleme şablonunu özel bir UIView ile değiştiren bir iOS uygulama uzantısıdır. İçeriğin başlık, alt başlık ve gövdeyle sınırlı olduğu normal bir bildirimin aksine, uzantı herhangi bir UIKit arayüzünü görüntüleyebilir: koordinatlı harita, grafik, resim galerisi veya giriş formu.
iOS belirtilen categoryIdentifier ile bir push bildirimi aldığında, sistem bu kategori için kayıtlı bir uzantı olup olmadığını kontrol eder. Varsa — sistem uzantıyı ayrı bir süreçte başlatır ve bildirim içeriğini ona iletir. Uzantı, standart arayüz yerine kendi arayüzünü gösterir. Kullanıcı, ana uygulamayı açmadan özel arayüzle etkileşime girer.
Notification Content Extension'ı Notification Service Extension ile karıştırmamak önemlidir. Service Extension, bildirim görüntülenmeden önce içeriği işler (ekleri indirme, şifre çözme). Content Extension, hazır içeriği aldıktan sonra arayüzü değiştirir. Her iki uzantı birlikte çalışabilir: Service Extension verileri hazırlar, Content Extension bunları görüntüler.
| Özellik | Content Extension | Service Extension |
|---|---|---|
| Amaç | Özel bildirim UI'ı | Görüntüleme öncesi içerik değişikliği |
| Çalışma süresi | Kullanıcı bildirimi gördüğü sürece | Arka planda 30 saniyeye kadar |
| Arayüz | Tam UIKit UIView | Arayüz yok |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension, sınırlı kaynaklarla izole bir süreçte çalışır. Uzantının, App Group dışında NSUserDefaults aracılığıyla ana uygulama deposuna erişimi yoktur. Uzantının boyutu açılmış halde 50 MB ile sınırlıdır. İçerik görüntüleme süresi de sınırlıdır — uzantı makul bir sürede güncellemeyi tamamlamazsa, sistem onu sonlandırır.
Xcode'da uzantı oluşturmak için Notification Content Extension türünde yeni bir target eklemek gerekir. Xcode, UIViewController'dan miras alan ve UNNotificationContentExtension uygulayan bir denetleyiciyle birlikte MainInterface.storyboard'u otomatik olarak oluşturur.
Xcode'da File → New → Target → Notification Content Extension'ı seçin. Uzantının adını, dilini (Swift veya Objective-C) belirtin ve projenin aynı geliştirici ekibine bağlı olduğundan emin olun. Target oluşturulduktan sonra üç dosya içeren bir klasör görünecektir: MainInterface.storyboard, Info.plist ve denetleyici dosyası.
Uzantının Info.plist'inde, UNNotificationExtensionCategory anahtarıyla NSExtensionAttributes dizisinin belirtilmesi zorunludur. Bu dizi, uzantının etkinleştirileceği bildirim kategorilerinin tanımlayıcılarını içerir. İsteğe bağlı UNNotificationExtensionInitialContentSizeRatio anahtarı, doğru konumlandırma için özel arayüzün başlangıç en-boy oranını belirler.
Target uzantısında temiz bir mimari korunması önerilir: denetleyiciler için ayrı klasör, özel View'ler için ayrı klasör. Uzantı ayrı bir ikili dosya olduğundan, ana uygulamanın koduna doğrudan erişilemez. Kod paylaşımı için ayrı bir framework oluşturun veya veriler için App Group kullanın.
UNNotificationContentExtension, Notification Content Extension'daki denetleyicinin uygulaması gereken protokoldür. Zorunlu tek yöntem, bildirim alındığında çağrılan didReceive(_:with:)'dir. Denetleyici, bildirimi ve verilerle güncellenmesi gereken hazır görünüm denetleyicisini alır.
Uzantı denetleyicisi UIViewController'dan miras almalı ve UNNotificationContentExtension'ı uygulamalıdır. Storyboard veya xib bu denetleyiciye bağlanır. Bildirim alındığında didReceive yöntemi içeriği iletir ve denetleyici görünümlerini günceller.
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)
}
}
Sistem, Info.plist'teki UNNotificationExtensionInitialContentSizeRatio anahtarına ve mevcut içeriğe göre özel arayüzün boyutunu belirler. Minimum başlangıç boyutu için bu anahtarın 0,1 olarak ayarlanması ve içerik yüklendikten sonra preferredContentSize aracılığıyla boyutun değiştirilmesi önerilir.
Notification Content Extension, arayüz oluşturmada tam özgürlük sağlar. UITableView, MKMapView, WKWebView, UIStackView gibi herhangi bir UIKit bileşeni kullanılabilir. Ancak, bildirimin sınırlı alanını dikkate almak ve performansı optimize etmek önemlidir.
Popüler senaryolardan biri, konum içeren bir harita görüntülemektir. Bunun için uzantının Storyboard'una MKMapView eklenir ve denetleyici bildirim içeriğinden koordinatları iletir. Uzantının target'ına MapKit eklemeyi unutmayın. Harita kullanırken uzantının bellek sınırını göz önünde bulundurun — karmaşık döşemelerin yüklenmesi mevcut kaynakları aşabilir.
Notification Content Extension, yeniden boyutlandırma, taşıma ve öğelerin şeffaflığı dahil olmak üzere UIView animasyonlarını destekler. Bildirimin genişletilmiş moduna girerken, içerik görünüm animasyonu başlatılabilir. Animasyonlar kısa olmalı (0,5 saniyeye kadar) ve kullanıcının bildirimle etkileşimini engellememelidir. Sonsuz animasyonlardan kaçının — pil tüketir ve performansı düşürür.
Uzantı tam bir UIViewController olduğundan, jestler ve dokunma işleyicileri ekleyebilirsiniz. UIKit jestleri (UITapGestureRecognizer, UIButton) standart şekilde çalışır. Uygulama açılmasını gerektiren eylemler için uzantı temsilcisini veya userNotificationCenter'ı kullanın. Etkileşimli öğeler, sınırlı alanda rahat dokunma için yeterince büyük olmalıdır — Apple tavsiyelerine göre minimum dokunma hedefi boyutu 44x44 noktadır.
Medya içeriği, Notification Content Extension'ın temel özelliğidir. Bildirim, özel arayüzde görüntülenen resimler, GIF'ler, ses ve video içerebilir. Ekler, sunucu tarafından yük aracılığıyla veya Notification Service Extension tarafından indirme sonrasında eklenebilen UNNotificationAttachment aracılığıyla iletilir. JPEG, PNG, MPEG-4 ve MP3 formatları desteklenir.
Bir resmi görüntülemek için, bildirim içeriğinden UNNotificationAttachment'ı almak ve yerel URL'den yüklemek yeterlidir. Uzantının yalnızca yerel dosyalara erişimi olduğunu unutmayın — uzak kaynaklar önceden Service Extension tarafından indirilmelidir. Maksimum boyut — iOS 15+'ta 50 MB, sonraki güncellemelerde sınır değişir. Birden fazla resmi desteklemek için farklı tanımlayıcılara sahip UNNotificationAttachment kullanın ve bunları UIPageViewController aracılığıyla görüntüleyin.
Özel arayüzde bir resmi görüntülemek için uzantı, bildirim içeriğinden UNNotificationAttachment'ı alır ve yerel URL'den yükler. Ek, önceden Notification Service Extension tarafından indirilmiş olmalıdır — Content Extension'ın ağ erişimi yoktur. Maksimum medya eki boyutu — iOS 15+'ta 50 MB, önceki sürümlerde sınır 10 MB idi. Uzantı, ekin yokluğunu doğru şekilde işlemeli ve yedek arayüz görüntülemelidir. Düşük çözünürlüklü resimleri önceden yüklemek için, Service Extension tarafından eklemeden önce oluşturulan küçük resim sürümlerini kullanın.
iOS, AVPlayerLayer aracılığıyla Notification Content Extension'da video oynatmayı destekler. Uzantı, bildirim içinde kontrollü bir video oynatıcı görüntüleyebilir. Bu, özellikle gözetim uygulamaları, akış veya içerik önizleme için kullanışlıdır. Kullanıcının bu bildirimde medya içeriği bekliyorsa, otomatik oynatma sessiz olarak izin verilir. Video oynatıcıyı uygularken kontrol öğeleri ekleyin: oynat/duraklat, ilerleme çubuğu ve kapatma düğmesi. Videonun otomatik olarak sesle başlamadığından emin olun — bu, Apple'ın kullanıcı deneyimi önerilerini ihlal eder. Birden fazla resimden oluşan slayt gösterisi için, sayfa çevirme geçiş seçeneğiyle UIView.transition aracılığıyla animasyonlu geçiş kullanın.
Notification Content Extension, yaklaşık 50 MB bellek sınırı olan kısıtlı bir ortamda çalışır. Performansı optimize etmek için resimlerin geç yüklenmesini kullanın, ana iş parçacığında ağır hesaplamalardan kaçının ve basit kısıtlamalarla Auto Layout uygulayın. Resim işleme veya veri ayrıştırma gibi ağır işlemleri arka plan kuyruklarında (DispatchQueue.global) yürütün. Bellek sınırı aşılırsa, sistem uzantıyı sonlandıracak ve kullanıcı standart bildirimi görecektir. Yayınlamadan önce uzantıyı Instruments (Allocations ve Time Profiler) aracılığıyla profillendirmeniz ve farklı iOS sürümlerine sahip gerçek cihazlarda bellek kullanımını kontrol etmeniz önerilir.
Sıkça Sorulan Sorular
Evet, iOS 16'dan itibaren Notification Content Extension, UIHostingController aracılığıyla SwiftUI'yı destekler. Ancak, uzantılarda SwiftUI desteğinin sınırlı olması nedeniyle karmaşık arayüzler için UIKit daha kararlı bir seçimdir.
Bildirim yükündeki categoryIdentifier'ın uzantının Info.plist'indeki UNNotificationExtensionCategory ile eşleştiğini kontrol edin. Ayrıca uzantının ana uygulama target'ına eklendiğinden ve doğru şekilde imzalandığından emin olun.
App Group — paylaşımlı depolama (UserDefaults suite) veya dosya kapsayıcısı kullanın. Ana uygulama ve uzantı aynı geliştirici grubunda olmalı ve App Groups özelliği etkinleştirilmiş olmalıdır.
Medya kontrolü için didReceive(_:with:) with UNNotificationContentExtensionMediaPlayPauseButtonType yöntemini kullanın veya temsilci aracılığıyla güncelleme isteyin. Yeni bildirim olmadan tam içerik güncellemesi mümkün değildir.
Xcode'da uzantının target'ını seçin ve simülatörde çalıştırın. Normal bir uygulamada olduğu gibi lldb ve kesme noktaları kullanın. Test etmek için Firebase Console aracılığıyla veya yerel olarak Pusher aracılığıyla push bildirimi gönderin.
Ö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