Notification Category (kategori notifikasi) adalah mekanisme iOS untuk mengelompokkan notifikasi push berdasarkan jenis dan melampirkan tindakan yang dapat dikonfigurasi. Kategori menentukan tombol mana yang ditampilkan saat 3D Touch atau tekan lama pada notifikasi, serta bagaimana sistem memproses notifikasi masuk dari jenis ini. Menurut Apple Developer Documentation, UNNotificationCategory didaftarkan di UNUserNotificationCenter dan dihubungkan dengan notifikasi melalui bidang category di payload APNS.
Poin Penting
Notification Category adalah fitur iOS (sejak versi 8.0) yang memungkinkan pengembang mengklasifikasikan notifikasi push dan menambahkan tindakan interaktif. Ketika pengguna menerima notifikasi dan menekannya dengan kuat (3D Touch) atau menekan lama, tombol yang ditentukan oleh kategori akan muncul.
Kategori didaftarkan melalui objek UNNotificationCategory, yang berisi pengidentifikasi, larik tindakan, dan parameter tampilan opsional. Sistem menggunakan pengidentifikasi kategori dari payload APNS untuk menemukan kategori yang terdaftar dan menampilkan tindakan yang sesuai.
Tidak seperti Android Notification Channel, iOS Category tidak mengelola kepentingan, suara, atau getaran. Satu-satunya tugasnya adalah menyediakan kemampuan interaktif untuk notifikasi: tombol balas, konfirmasi, batal, atau input teks.
Kategori tidak wajib untuk menampilkan notifikasi push di iOS. Notifikasi akan tetap muncul — dengan tombol jika kategori terdaftar, atau tanpa tombol. Kategori hanya diperlukan untuk menambahkan interaktivitas ke notifikasi.
Mekanisme kategori terdiri dari empat tahap: pendaftaran kategori di klien, pengiriman payload APNS dengan kategori, pengenalan kategori oleh sistem, dan pemrosesan tindakan pengguna.
Tindakan dalam kategori dapat terdiri dari dua jenis: foreground (membuka aplikasi) dan background (dijalankan di latar belakang). Untuk tindakan latar belakang, aplikasi mendapat waktu terbatas (sekitar 30 detik) untuk diproses di UNNotificationActionHandler.
UNNotificationCategory mendukung beberapa opsi melalui parameter options: customDismissAction — menerima event saat notifikasi digeser, allowInCarPlay — menampilkan tindakan di CarPlay, hiddenPreviewsBodyPlaceholder — teks khusus untuk pratinjau tersembunyi. Konfigurasi opsi yang tepat meningkatkan pengalaman pengguna di berbagai perangkat Apple.
iOS menyediakan dua jenis tindakan untuk kategori notifikasi. Setiap jenis memiliki tujuan dan cara interaksinya sendiri dengan pengguna.
| Jenis | Kelas | Deskripsi | Contoh |
|---|---|---|---|
| Tindakan sederhana | UNNotificationAction | Tombol dengan judul dan opsi (destructive, foreground, authenticationRequired) | “Hapus”, “Lihat” |
| Input teks | UNTextInputAction | Tombol yang membuka bidang input teks dengan petunjuk | “Balas”, “Komentar” |
UNTextInputAction — kemampuan unik iOS. Saat menekan tombol “Balas”, sistem menampilkan bidang teks tempat pengguna memasukkan jawaban. Teks yang dimasukkan diteruskan ke delegat bersama dengan pengidentifikasi tindakan. Ini memungkinkan balasan cepat tanpa membuka aplikasi.
Opsi tindakan: options.authenticationRequired — memerlukan membuka kunci perangkat, options.destructive — menyorot tombol dengan warna merah (untuk tindakan berbahaya), options.foreground — membuka aplikasi setelah ditekan.
Kategori didaftarkan saat aplikasi dimulai, biasanya dalam metode didFinishLaunchingWithOptions. Pendaftaran dilakukan melalui UNUserNotificationCenter, setelah meminta izin untuk notifikasi. Kategori dapat diperbarui setiap kali dimulai — versi lama digantikan dengan yang baru.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Balas",
options: [.foreground],
textInputButtonTitle: "Kirim",
textInputPlaceholder: "Masukkan pesan..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Hapus",
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
}
}
Setelah pendaftaran kategori, setiap notifikasi dengan category = “message” di payload APNS akan menampilkan tombol “Balas” dan “Hapus”. Pemrosesan ketukan terjadi di userNotificationCenter:didReceive response, di mana actionIdentifier menentukan tombol mana yang ditekan.
Ketika pengguna menekan tombol kategori, iOS memanggil delegat UNUserNotificationCenterDelegate dengan objek UNNotificationResponse. response.actionIdentifier berisi pengidentifikasi tombol yang ditekan, dan response.notification.request.content.userInfo berisi data khusus dari payload APNS. Untuk UNTextInputAction, tersedia juga response.userText dengan teks yang dimasukkan pengguna.
Pengembang yang akrab dengan Android Notification Channels sering keliru mengartikannya dengan iOS Notification Categories. Meskipun namanya mirip, mekanisme ini menyelesaikan tugas yang berbeda dan bekerja dengan cara yang berbeda.
Di kedua platform, kedua mekanisme dapat digabungkan: di Android, notifikasi dapat menjadi milik saluran dengan tindakan dari NotificationCompat, dan di iOS, kategori melengkapi saluran yang di iOS disebut thread-id dan berfungsi untuk mengelompokkan notifikasi di pusat notifikasi.
Agar notifikasi ditampilkan dengan tombol kategori, server harus menyertakan kunci category dalam payload APNS. Tanpa kunci ini, sistem tidak akan tahu kategori mana yang akan diterapkan pada notifikasi.
{
"aps": {
"alert": {
"title": "Pesan baru",
"body": "Anna: Halo! Apa kabar?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
Kunci category harus tepat cocok dengan pengidentifikasi yang didaftarkan melalui setNotificationCategories di klien. Huruf besar/kecil penting — “message” dan “Message” dianggap sebagai kategori berbeda. Jika kategori tidak ditemukan, notifikasi akan ditampilkan tanpa tombol, tanpa kesalahan di log.
Jika server mengirim notifikasi dengan category yang tidak terdaftar di klien, iOS mengabaikan kategori tersebut dan menampilkan notifikasi tanpa tombol. Kesalahan tidak dicatat, dan aplikasi tidak mengetahui ketidakcocokan. Disarankan untuk menyinkronkan daftar kategori antara server dan klien melalui file konfigurasi dan memeriksanya di setiap pembaruan aplikasi.
Saat mendesain kategori notifikasi iOS, patuhi prinsip satu kategori — satu skenario. Setiap kategori harus sesuai dengan jenis interaksi tertentu: balasan pesan, konfirmasi tindakan, penolakan permintaan. Jangan mencampur skenario berbeda dalam satu kategori — ini membingungkan pengguna dan mempersulit pemrosesan di delegat.
Gunakan UNTextInputAction untuk skenario di mana pengguna harus memasukkan teks tanpa membuka aplikasi: balasan di messenger, komentar, catatan cepat. Tindakan teks meningkatkan keterlibatan — pengguna melakukan tindakan bermakna dalam 2 ketukan, bukan 5+ di aplikasi yang terbuka.
Untuk tindakan berbahaya (hapus, blokir) gunakan opsi destructive. iOS akan menyorot tombol ini dengan warna merah, memperingatkan pengguna tentang ireversibilitas tindakan. Untuk tindakan yang memerlukan membuka kunci perangkat (melihat data pribadi), atur authenticationRequired — sistem akan meminta Face ID atau kata sandi sebelum menjalankan.
Uji kategori di berbagai perangkat: di iPhone dengan 3D Touch, di iPhone tanpa 3D Touch (tekan lama), di iPad, dan di Mac. Perilaku kategori mungkin sedikit berbeda di berbagai platform Apple. Perhatian khusus — CarPlay: tombol kategori ditampilkan di layar mobil, tetapi input teks tidak tersedia, sehingga UNTextInputAction secara otomatis disembunyikan di CarPlay. Di watchOS, kategori tidak didukung — semua notifikasi ditampilkan tanpa tombol tindakan.
Pertanyaan yang Sering Diajukan
Tidak ada batasan — iOS tidak menetapkan batas jumlah UNNotificationCategory. Namun, dalam praktiknya disarankan tidak lebih dari 10–15 kategori agar tidak mempersulit pemrosesan di delegat. Setiap kategori dapat berisi hingga 4 tindakan (tombol). Lebih dari 4 tindakan akan diabaikan oleh sistem.
Implementasikan delegat UNUserNotificationCenterDelegate dan metode didReceive response. Periksa response.actionIdentifier: UNNotificationDismissActionIdentifier — geser hapus, UNNotificationDefaultActionIdentifier — ketuk pada body, atau pengidentifikasi tombol khusus Anda. Untuk tombol teks, teks tersedia melalui response.userText.
Category — menentukan tindakan interaktif (tombol) untuk notifikasi. Thread-id — mengelompokkan notifikasi di Pusat Notifikasi berdasarkan topik. Kedua kunci ditentukan dalam payload APNS. Category dan thread-id tidak terkait: notifikasi dapat memiliki kategori tanpa thread-id dan sebaliknya.
Ya, UNNotificationCategory didukung di macOS 10.14+ (Mojave) di aplikasi yang menggunakan UserNotifications framework. Perilaku kategori di macOS mirip dengan iOS: saat menekan notifikasi, tombol ditampilkan, pemrosesan dilakukan melalui UNUserNotificationCenterDelegate.
Disarankan untuk mendaftarkan kategori setiap kali aplikasi dimulai melalui setNotificationCategories. Sistem mengganti set kategori lama dengan yang baru setiap kali dipanggil. Jika tidak diperbarui, kategori akan tetap ada di antara startup, tetapi saat kode berubah, kategori lama mungkin tidak cocok dengan yang baru.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga