Rich Notification, kullanıcı deneyimini iyileştirmek için medya ekleri, etkileşimli düğmeler ve özel arayüzler içeren gelişmiş bir iOS push bildirimi biçimidir. Standart metin bildirimlerinin aksine, Rich Notification, banner veya kilit ekranında doğrudan resim, video ve ses gösterebilir. Apple Developer Documentation, 2026'ya göre, UNNotificationAttachment tek bir bildirimde 10 dosyaya kadar destekler ve tüm cihazlarda optimum görüntüleme için bunları otomatik olarak ölçeklendirir.
Önemli Noktalar
Rich Notification, yalnızca metin değil aynı zamanda medya ekleri, etkileşimli öğeler ve özelleştirilmiş bir arayüz içeren bir iOS push bildirimidir. “Rich” terimi, bildirime resim, video, ses, eylem düğmeleri ve metin girişi ekleme yeteneğini yansıtarak basit bir uyarıyı tam teşekküllü etkileşimli bir öğeye dönüştürür.
Apple, Rich Notification desteğini iOS 10'da UserNotifications çerçevesiyle birlikte tanıttı. Bundan önce, push bildirimleri yalnızca metin, ses ve rozet içerebiliyordu. iOS 10, içeriği değiştirme ve özel arayüzler oluşturma olanağı sunan UNNotificationServiceExtension ve UNNotificationContentExtension'i tanıttı. Sonraki sürümler, Content Extension'da SwiftUI desteği, animasyonlu GIF'ler ve gelişmiş medya ölçeklendirme ekledi.
Rich Notification, kullanıcı katılımını önemli ölçüde artırır. Apple araştırmaları, resim içeren bildirimlerin yalnızca metin içerenlere kıyasla %30–40 daha fazla etkileşim aldığını göstermektedir. Bir ürün resmi, video önizlemesi veya hızlı yanıt düğmesi, kullanıcının uygulamayı açmadan doğrudan bildirimden karar vermesini sağlar. Bu, hedef eyleme giden yolu kısaltır ve kullanıcı deneyimini iyileştirir.
UNNotificationAttachment üç medya kategorisini destekler: resimler, video ve ses. Her türün kendi biçim, boyut ve süre sınırlamaları vardır. Sistem, performans optimizasyonu için resimleri bildirim boyutuna uyacak şekilde otomatik olarak ölçeklendirir ve video süresini 30 saniye ile sınırlar.
| Medya Türü | Desteklenen Biçimler | Maksimum Boyut |
|---|---|---|
| Resimler | JPEG, PNG, GIF, TIFF | Dosya başına 10 MB |
| Video | MPEG, MP4, MOV | 10 MB, 30 saniyeye kadar |
| Ses | MP3, AAC, WAV, CAF | 10 MB |
Resimler, kompakt ve genişletilmiş bildirim görünümlerinde görüntülenmek üzere sistem tarafından otomatik olarak kırpılır ve ölçeklendirilir. Animasyonlu GIF'ler iOS 12'den itibaren desteklenir ve bildirim görüntülenirken otomatik olarak oynatılır. Önerilen resim boyutu 1024x1024 pikseldir ve büyük ekranlı iPad dahil tüm cihazlarda keskin görüntüleme sağlar.
Rich Notification'daki video varsayılan olarak sessiz oynatılır — kullanıcı oynatıcı düğmesiyle sesi etkinleştirebilir. Maksimum video süresi 30 saniyedir ve sonrasında oynatma durur. Ses ekleri, sesli mesajlar veya ses önizlemeleri için kullanılabilir ve genişletilmiş görünümde bildirime dokunulduğunda oynatılır.
Etkileşimli eylemler, kullanıcının uygulamayı açmadan doğrudan bildirimden işlem yapmasına olanak tanır. Eylemler, uygulama başlatıldığında UNNotificationCategory ve UNNotificationAction aracılığıyla kaydedilir. Her eylem arka planda (uygulamayı açmadan) veya ön planda (işlemi tamamlamak için uygulamayı açar) olabilir.
UNNotificationAction, bir başlık ve requiresAuthentication (Face ID/Touch ID gerektirir) veya destructive (kırmızı renkle vurgulanır) gibi isteğe bağlı değiştiriciler içeren bir düğmeyi temsil eder. UNTextInputNotificationAction, bir metin giriş alanı ekleyerek bu yeteneği genişletir — mesajlara veya yorumlara hızlı yanıtlar için idealdir. Eylemler, bildirime uzun basıldığında veya aşağı kaydırıldığında görüntülenir.
Bildirim kategorileri, içerik türünü mevcut eylem kümesiyle ilişkilendirir. Kayıt işlemi, uygulama başlatıldığında AppDelegate'te UNUserNotificationCenter.current().setNotificationCategories aracılığıyla gerçekleştirilir. Kategori, sunucuda JSON yükünün category alanında belirtilir ve sistem, bildirime otomatik olarak ilgili eylem kümesini uygular.
Kullanıcı bir düğmeye dokunduğunda veya metin gönderdiğinde, sistem didReceive response yöntemiyle UNUserNotificationCenterDelegate'i çağırır. UNNotificationResponse, eylem tanımlayıcısını ve girilen metni (UNTextInputNotificationAction için) içerir. Bu bilgilere dayanarak uygulama ilgili iş mantığını yürütür: mesaj gönderir, eylemi onaylar veya belirli bir ekranı açar.
Rich Notification oluşturma döngüsünün tamamını inceleyelim: AppDelegate'te kategorileri kaydetmekten Service Extension'da işlemeye ve görüntülemeye kadar. AppDelegate, düğmelerle kategoriyi kaydeder, sunucu bir resim URL'siyle bildirim gönderir, Service Extension medyayı indirir ve Content Extension, düğmelerle özel bir arayüz görüntüler.
// AppDelegate — kategorilerin ve eylemlerin kaydı
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Yanıtla",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "Beğen",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
“social_post” kategorisi ve özel bir alanda resim URL'si içeren bir push bildirimi alındıktan sonra Service Extension etkinleştirilir. Uzantı resmi indirir, benzersiz bir tanımlayıcıyla UNNotificationAttachment oluşturur ve içeriğe ekler. İndirilen dosyanın boyutunu kontrol etmek önemlidir — 10 MB'ı aşarsa ek oluşturulmaz ve sistem medya olmadan bildirimi gösterir.
class NotificationService: UNNotificationServiceExtension {
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void
) {
let content = (request.content.mutableCopy()
as! UNMutableNotificationContent)
guard let urlString = content.userInfo["media-url"]
as? String,
let url = URL(string: urlString)
else { contentHandler(request.content); return }
URLSession.shared.downloadTask(with: url) {
location, _, _ in
guard let location = location else {
contentHandler(content); return }
let attachment = try! UNNotificationAttachment(
identifier: "media", url: location,
options: [UNNotificationAttachmentOptionsTypeHintKey:
"jpg"])
content.attachments = [attachment]
contentHandler(content)
}.resume()
}
}
Sunucu olmadan Rich Notification'ı test etmek için iOS simülatörünü kullanın ve xcrun simctl push ile terminal üzerinden push gönderin. Yükte, Service Extension'ı etkinleştirmek için mutable-content: 1 ve eylemleri görüntülemek için kategoriyi belirttiğinizden emin olun. Komut, seçilen simülatöre doğrudan bir JSON dosyasından push göndererek sunucu altyapısı kurmadan hızlı yineleme yapılmasını sağlar.
UNNotificationContentExtension, standart bildirim arayüzünü tamamen özel bir UIKit veya SwiftUI görünümüyle değiştirmenize olanak tanır. Uzantı, kullanıcı bildirimi genişlettiğinde (force touch veya aşağı kaydırma) etkinleşir ve düğmeler, kaydırıcılar, animasyonlar ve diğer UI bileşenlerini içerebilir. Arayüz boyutu, Auto Layout kullanarak içeriğe uyum sağlar.
Content Extension, UIViewController'dan miras alan bir görünüm denetleyicisiyle storyboard tabanlıdır. SwiftUI View, iOS 16'dan itibaren UIHostingController aracılığıyla entegre edilir ve modern arayüz oluşturma yaklaşımlarına olanak tanır. iOS 14–15 ile geriye dönük uyumluluk için xib dosyalarıyla UIKit kullanılması önerilir. Arayüz, UNNotificationContent aracılığıyla Service Extension'dan değiştirilmiş içeriği alır.
Content Extension, didReceive response yöntemiyle UNNotificationContentExtension protokolünü uygular. UNNotificationResponse, basılan düğme veya girilen metin hakkında bilgi içerir. Uzantı, bildirimi kapatmadan arayüzü güncelleyebilir veya kapatmak için tamamlama işleyicisini çağırabilir. Bu, bildirimde doğrudan görsel geri bildirim içeren bir “beğen” gibi hızlı etkileşim senaryoları oluşturmayı sağlar.
Apple, Content Extension'ı kısa ve işlevsel tutmayı, aşırı öğelerden kaçınmayı önerir. Genişletilmiş bildirimin maksimum yüksekliği yaklaşık 400 puntodur ve sonrasında içerik kaydırılır. Diğer bildirimlerle tutarlılık için sistem yazı tiplerini ve boşlukları kullanın. Arayüzün hem iPhone hem de iPad'de doğru görüntülendiğinden emin olmak için farklı ekran boyutlarında test edin.
Sıkça Sorulan Sorular
Tek bir medya ekinin maksimum boyutu 10 MB'tır. Sınır aşılırsa UNNotificationAttachment oluşturulmaz ve bildirim medya olmadan görüntülenir. Service Extension'da hızlı yükleme için resimlerin 1–3 MB'a optimize edilmesi önerilir.
Rich Notification, iOS 10 ve üzeri tüm cihazlarda desteklenir, iPhone 5s ve daha yenileri dahil. Özel UI ile Content Extension, iOS 12'den itibaren kullanılabilir. Content Extension'da SwiftUI — iOS 16'dan itibaren. Eski sürümlerde bildirim standart biçimde görüntülenir.
Evet, animasyonlu GIF'ler iOS 12'den itibaren desteklenir. GIF, normal bir resim olarak UNNotificationAttachment aracılığıyla yüklenir ve bildirim görüntülenirken otomatik olarak oynatılır. GIF boyutu, diğer biçimlerle aynı şekilde 10 MB ile sınırlıdır.
Bir kategori kaydedilirken bildirim başına maksimum 4 eylem. Daha fazla belirtilirse, sistem ilk 4'ü görüntüler ve gerisini yok sayar. Optimum kullanıcı deneyimi için 2–3 düğme kullanılması önerilir — çok fazla seçenek arayüzü aşırı yükler.
Evet, sunucu, özel bir alanda medya dosyası URL'si ve mutable-content: 1 bayrağı içeren bir JSON yüküyle APNS (Apple Push Notification servisi) aracılığıyla push göndermelidir. Sunucu ayrıca Content Extension ve eylemleri etkinleştirmek için kategoriyi belirtir.
Ö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