Notification Category (bildirim kategorisi), push bildirimlerini türe göre gruplamak ve bunlara özel eylemler eklemek için bir iOS mekanizmasıdır. Kategori, bir bildirimde 3D Touch veya uzun basma kullanıldığında hangi düğmelerin görüntüleneceğini ve sistemin bu türdeki gelen bildirimleri nasıl işlediğini belirler. Apple Geliştirici Dokümantasyonu'na göre, UNNotificationCategory, UNUserNotificationCenter'a kaydedilir ve APNS yükündeki category alanı aracılığıyla bir bildirime bağlanır.
Önemli Noktalar
Notification Category, iOS 8.0'dan itibaren kullanılabilen bir özelliktir ve geliştiricilerin push bildirimlerini sınıflandırmasına ve bunlara etkileşimli eylemler eklemesine olanak tanır. Bir kullanıcı bir bildirim aldığında ve kuvvetlice bastığında (3D Touch) veya uzun bastığında, kategori tarafından tanımlanan düğmeler görünür. Bu, bildirimleri etkileşimli hale getirir ve kullanıcıların uygulamayı açmadan işlem yapmasına olanak tanır.
Bir kategori, bir tanımlayıcı, bir dizi eylem ve isteğe bağlı görüntüleme parametreleri içeren bir UNNotificationCategory nesnesi aracılığıyla kaydedilir. Sistem, APNS yükünden kategori tanımlayıcısını kullanarak kayıtlı kategoriyi bulur ve ilgili düğmeleri görüntüler.
Android Notification Channel'ın aksine, iOS Category önemi, sesi veya titreşimi yönetmez. Tek amacı, bildirimler için etkileşimli yetenekler sağlamaktır: yanıt, onay, iptal veya metin girişi düğmeleri.
iOS'ta push bildirimleri görüntülemek için kategoriler zorunlu değildir. Bildirim yine de görünecektir — bir kategori kayıtlıysa düğmelerle, değilse düğmeler olmadan. Kategoriler yalnızca bildirimlere etkileşim eklemek için gereklidir.
Kategori mekanizması dört aşamadan oluşur: istemcide kategoriyi kaydetme, kategoriyle APNS yükü gönderme, sistemin kategoriyi tanıması ve kullanıcı eylemini işleme.
Bir kategorideki eylemler iki türde olabilir: foreground (uygulamayı açar) ve background (arka planda yürütülür). Arka plan eylemleri için uygulama, UNNotificationActionHandler'da işlemek üzere sınırlı süreye (yaklaşık 30 saniye) sahiptir.
UNNotificationCategory, options parametresi aracılığıyla birkaç seçeneği destekler: customDismissAction — bildirim kaydırıldığında olay alma, allowInCarPlay — CarPlay'de eylemleri gösterme, hiddenPreviewsBodyPlaceholder — gizli önizlemeler için özel yer tutucu metni.
iOS, bildirim kategorileri için iki tür eylem sağlar. Her türün kendi amacı ve kullanıcıyla etkileşim şekli vardır.
| Tür | Sınıf | Açıklama | Örnek |
|---|---|---|---|
| Basit Eylem | UNNotificationAction | Başlık ve seçenekler (destructive, foreground, authenticationRequired) içeren düğme | “Sil”, “Görüntüle” |
| Metin Girişi | UNTextInputAction | Yer tutucu ile metin giriş alanı açan düğme | “Yanıtla”, “Yorum Yap” |
UNTextInputAction, iOS'a özgü bir özelliktir. Kullanıcı “Yanıtla” düğmesine dokunduğunda, sistem kullanıcının yanıtını yazdığı bir metin alanı gösterir. Girilen metin, eylem tanımlayıcısıyla birlikte temsilciye iletilir. Bu, uygulamayı açmadan hızlı yanıtlar uygulamaya olanak tanır.
Eylem seçenekleri: options.authenticationRequired — cihaz kilidinin açılmasını gerektirir, options.destructive — düğmeyi kırmızı renkte vurgular (tehlikeli eylemler için), options.foreground — dokunmadan sonra uygulamayı açar.
Kategoriler uygulama başlatılırken kaydedilir, genellikle didFinishLaunchingWithOptions yönteminde. Kayıt, bildirim izni istendikten sonra UNUserNotificationCenter aracılığıyla yapılır. Kategoriler her başlatmada güncellenebilir — eski sürümler yenileriyle değiştirilir.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Yanıtla",
options: [.foreground],
textInputButtonTitle: "Gönder",
textInputPlaceholder: "Mesaj girin..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Sil",
options: [.destructive]
)
let messageCategory = UNNotificationCategory(
identifier: "message",
actions: [replyAction, deleteAction],
intentIdentifiers: [],
options: [.customDismissAction]
)
UNUserNotificationCenter.current()
.setNotificationCategories([messageCategory])
}
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UNUserNotificationCenter.current().delegate = self
registerNotificationCategories()
return true
}
}
Kategori kaydedildikten sonra, APNS yükünde category = “message” bulunan her bildirim “Yanıtla” ve “Sil” düğmelerini gösterecektir. Dokunma işleme, userNotificationCenter:didReceive response içinde gerçekleşir ve actionIdentifier hangi düğmeye basıldığını belirler.
Kullanıcı bir kategori düğmesine dokunduğunda, iOS bir UNNotificationResponse nesnesiyle UNUserNotificationCenterDelegate'i çağırır. response.actionIdentifier, dokunulan düğmenin tanımlayıcısını içerir ve response.notification.request.content.userInfo, yükten özel verileri içerir.
Android Bildirim Kanallarına aşina olan geliştiriciler, bunları sıklıkla iOS Bildirim Kategorileriyle karıştırır. Benzer isme rağmen, bu mekanizmalar farklı görevleri çözer ve farklı şekilde çalışır.
Her iki platform da her iki mekanizmayı birleştirebilir: Android'de bir bildirim, NotificationCompat'tan eylemler içeren bir kanala ait olabilirken, iOS'te bir kategori, iOS'ta thread-id olarak adlandırılan ve bildirim merkezinde bildirimleri gruplamak için kullanılan kanalları tamamlar.
Bir bildirimin kategori düğmeleriyle görüntülenmesi için, sunucunun APNS yüküne category anahtarını eklemesi gerekir. Bu anahtar olmadan, sistem bildirime hangi kategoriyi uygulayacağını bilemez.
{
"aps": {
"alert": {
"title": "Yeni mesaj",
"body": "Anna: Merhaba! Nasılsın?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
category anahtarı, istemcide setNotificationCategories aracılığıyla kaydedilen tanımlayıcıyla tam olarak eşleşmelidir. Büyük/küçük harf önemlidir — “message” ve “Message” farklı kategoriler olarak kabul edilir. Kategori bulunamazsa, bildirim düğmeler olmadan görünür ve günlüklerde hata olmaz.
Sunucu, istemcide kayıtlı olmayan bir kategoriyle bildirim gönderirse, iOS kategoriyi yok sayar ve bildirimi düğmeler olmadan gösterir. Hata günlüğe kaydedilmez ve uygulama uyuşmazlıktan haberdar olmaz. Sunucu ve istemci arasında kategori listesinin senkronize edilmesi önerilir.
iOS'ta bildirim kategorileri tasarlarken, bir kategori — bir senaryo ilkesini izleyin. Her kategori belirli bir etkileşim türüne karşılık gelmelidir: bir mesaja yanıt verme, bir eylemi onaylama, bir talebi reddetme. Aynı kategoride farklı senaryoları karıştırmayın.
Kullanıcının uygulamayı açmadan metin girmesi gereken senaryolar için (mesajlaşma yanıtları, yorumlar, hızlı notlar) UNTextInputAction kullanın. Metin eylemleri katılımı artırır — kullanıcı, uygulama içinde 5+ yerine 2 dokunuşla anlamlı bir eylem gerçekleştirir.
Tehlikeli eylemler (silme, engelleme) için destructive seçeneğini kullanın. iOS bu düğmeleri kırmızı renkle vurgulayarak kullanıcıyı eylemin geri döndürülemezliği konusunda uyarır. Cihaz kilidi açmayı gerektiren eylemler için (kişisel verileri görüntüleme) authenticationRequired belirtin.
Kategorileri farklı cihazlarda test edin: 3D Touch'lı iPhone'da, 3D Touch'sız iPhone'da (uzun basma), iPad'de ve Mac'te. Kategori davranışı Apple platformları arasında biraz farklılık gösterebilir. CarPlay'e özellikle dikkat edin: kategori düğmeleri araba ekranında görünür ve sürücü güvenliği için minimum metinle tasarlanmalıdır.
Sıkça Sorulan Sorular
Hiçbir sınır yoktur — iOS, UNNotificationCategory sayısına bir sınır koymaz. Ancak pratikte, temsilci işlemeyi karmaşıklaştırmamak için 10–15'ten fazla kategori kullanılmaması önerilir. Her kategori en fazla 4 eylem (düğme) içerebilir. 4'ten fazla eylem sistem tarafından yok sayılır.
UNUserNotificationCenterDelegate protokolünü ve didReceive yöntemini uygulayın. response.actionIdentifier'ı kontrol edin: UNNotificationDismissActionIdentifier — kapatmak için kaydırma, UNNotificationDefaultActionIdentifier — gövdeye dokunma veya özel düğme tanımlayıcınız. Metin giriş düğmeleri için metin, response.userText aracılığıyla kullanılabilir.
Category — bildirim için etkileşimli eylemleri (düğmeleri) tanımlar. Thread-id — Bildirim Merkezindeki bildirimleri konuya göre gruplar. Her iki anahtar da APNS yükünde belirtilir. Category ve thread-id ilişkili değildir: bir bildirimin kategorisi olabilir ancak thread-id'si olmayabilir ve bunun tersi de geçerlidir.
Evet, UNNotificationCategory, macOS 10.14+ (Mojave) üzerinde UserNotifications framework'ünü kullanan uygulamalarda desteklenir. macOS'ta kategorilerin davranışı iOS'a benzer: bir bildirime tıklandığında düğmeler gösterilir ve işleme UNUserNotificationCenterDelegate aracılığıyla yapılır.
setNotificationCategories aracılığıyla her uygulama başlatmasında kategorilerin kaydedilmesi önerilir. Sistem, her çağrıda eski kategori kümesini yenisiyle değiştirir. Güncellemezseniz, kategoriler başlatmalar arasında kalıcı olur, ancak kod değiştiğinde eski kategoriler beklenmeyen davranışlara neden olabilir.
Ö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