Notification Content Extension — adalah ekstensi iOS yang memungkinkan Anda mengganti antarmuka standar notifikasi push dengan UIView kustom. Pengembang mendapatkan kendali penuh atas tampilan konten: gambar, video, animasi, font kustom, dan elemen interaktif. Menurut Apple Developer, 2025, Notification Content Extension mendukung antarmuka UIKit apa pun dalam ruang notifikasi yang terbatas.
Poin-poin utama
Notification Content Extension — adalah ekstensi aplikasi di iOS yang mengganti template tampilan standar notifikasi push dengan UIView kustom. Berbeda dengan notifikasi biasa, di mana konten terbatas pada judul, subjudul, dan isi, ekstensi memungkinkan menampilkan antarmuka UIKit apa pun: peta dengan koordinat, grafik, galeri gambar, atau formulir input.
Ketika iOS menerima notifikasi push dengan categoryIdentifier yang ditentukan, sistem memeriksa apakah ekstensi terdaftar untuk kategori ini. Jika ya — sistem menjalankan ekstensi dalam proses terpisah dan memberikan konten notifikasi. Ekstensi menampilkan antarmuka sendiri alih-alih standar. Pengguna berinteraksi dengan antarmuka kustom tanpa membuka aplikasi utama.
Penting untuk tidak membingungkan Notification Content Extension dengan Notification Service Extension. Service Extension memproses konten sebelum notifikasi ditampilkan (mengunduh lampiran, dekripsi). Content Extension mengganti antarmuka setelah menerima konten siap. Kedua ekstensi dapat bekerja bersama: Service Extension menyiapkan data, Content Extension menampilkannya.
| Karakteristik | Content Extension | Service Extension |
|---|---|---|
| Tujuan | UI kustom notifikasi | Modifikasi konten sebelum tampil |
| Waktu eksekusi | Selama pengguna melihat notifikasi | Hingga 30 detik di latar belakang |
| Antarmuka | UIKit UIView penuh | Tidak ada antarmuka |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension bekerja dalam proses terisolasi dengan sumber daya terbatas. Ekstensi tidak memiliki akses ke penyimpanan utama aplikasi melalui NSUserDefaults, kecuali App Group. Ukuran ekstensi dibatasi hingga 50 MB dalam bentuk tidak terkompresi. Waktu untuk menampilkan konten juga terbatas — jika ekstensi tidak menyelesaikan pembaruan dalam waktu yang wajar, sistem akan menutupnya.
Untuk membuat ekstensi di Xcode, Anda perlu menambahkan target baru bertipe Notification Content Extension. Xcode akan secara otomatis membuat MainInterface.storyboard dengan controller yang mewarisi UIViewController dan mengimplementasikan UNNotificationContentExtension.
Di Xcode pilih File → New → Target → Notification Content Extension. Tentukan nama ekstensi, bahasa (Swift atau Objective-C) dan pastikan proyek terhubung ke tim pengembang yang sama. Setelah target dibuat, folder dengan tiga file akan muncul: MainInterface.storyboard, Info.plist dan file controller.
Di Info.plist ekstensi, array NSExtensionAttributes dengan kunci UNNotificationExtensionCategory harus ditentukan. Array ini berisi identifier kategori notifikasi yang akan mengaktifkan ekstensi. Kunci opsional UNNotificationExtensionInitialContentSizeRatio menentukan rasio aspek awal antarmuka kustom untuk penempatan yang benar.
Disarankan untuk menjaga arsitektur yang bersih di target-ekstensi: folder terpisah untuk controller, folder terpisah untuk tampilan kustom. Karena ekstensi adalah file biner terpisah, kode aplikasi utama tidak dapat diakses langsung. Untuk berbagi kode, buat framework terpisah atau gunakan App Group untuk data.
UNNotificationContentExtension — protokol yang harus diimplementasikan oleh controller di Notification Content Extension. Satu-satunya metode wajib adalah didReceive(_:with:), yang dipanggil saat menerima notifikasi. Controller menerima notifikasi dan view controller siap yang perlu diperbarui dengan data.
Controller ekstensi harus mewarisi UIViewController dan mengimplementasikan UNNotificationContentExtension. Storyboard atau xib terhubung dengan controller ini. Saat menerima notifikasi, metode didReceive memberikan konten, dan controller memperbarui tampilannya.
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 menentukan ukuran antarmuka kustom berdasarkan kunci UNNotificationExtensionInitialContentSizeRatio di Info.plist dan konten saat ini. Disarankan untuk mengatur kunci ini ke nilai 0.1 untuk ukuran awal minimum, lalu mengubah ukuran melalui preferredContentSize setelah konten dimuat.
Notification Content Extension memberikan kebebasan penuh dalam membuat antarmuka. Anda dapat menggunakan komponen UIKit apa pun: UITableView, MKMapView, WKWebView, UIStackView. Namun, penting untuk mempertimbangkan ruang notifikasi yang terbatas dan mengoptimalkan kinerja.
Salah satu skenario populer adalah menampilkan peta dengan lokasi. Untuk ini, di Storyboard ekstensi ditambahkan MKMapView, dan controller memberikan koordinat dari konten notifikasi. Penting untuk tidak lupa menambahkan MapKit ke target ekstensi. Saat menggunakan peta, pertimbangkan batas memori ekstensi — memuat ubin yang kompleks dapat melebihi sumber daya yang tersedia.
Notification Content Extension mendukung animasi UIView, termasuk mengubah ukuran, memindahkan, dan transparansi elemen. Saat memasuki mode notifikasi yang diperluas, Anda dapat memulai animasi kemunculan konten. Animasi harus pendek (hingga 0.5 detik) dan tidak mengganggu pengguna dalam berinteraksi dengan notifikasi. Hindari animasi tanpa akhir — mereka menghabiskan baterai dan mengurangi kinerja.
Karena ekstensi adalah UIViewController penuh, Anda dapat menambahkan gesture dan penanganan sentuhan. Gesture UIKit (UITapGestureRecognizer, UIButton) bekerja secara standar. Untuk tindakan yang memerlukan pembukaan aplikasi, gunakan delegate ekstensi atau userNotificationCenter. Elemen interaktif harus cukup besar untuk disentuh dengan nyaman di ruang terbatas — ukuran minimum touch target adalah 44x44 poin sesuai rekomendasi Apple.
Konten multimedia — kemampuan kunci dari Notification Content Extension. Notifikasi dapat berisi gambar, GIF, audio, dan video yang ditampilkan di antarmuka kustom. Lampiran dikirimkan melalui UNNotificationAttachment, yang dapat ditambahkan baik oleh server melalui payload maupun oleh Notification Service Extension setelah diunduh. Format yang didukung adalah JPEG, PNG, MPEG-4, dan MP3.
Untuk menampilkan gambar, cukup dapatkan UNNotificationAttachment dari konten notifikasi dan muat dari URL lokal. Penting untuk diingat bahwa ekstensi hanya memiliki akses ke file lokal — sumber daya jarak jauh harus diunduh sebelumnya oleh Service Extension. Ukuran maksimum lampiran — 50 MB di iOS 15+, batas ini ditingkatkan dengan setiap pembaruan berikutnya. Untuk mendukung beberapa gambar, gunakan UNNotificationAttachment dengan identifier berbeda dan tampilkan melalui UIPageViewController.
Untuk menampilkan gambar di antarmuka kustom, ekstensi mendapatkan UNNotificationAttachment dari konten notifikasi dan memuatnya dari URL lokal. Lampiran harus diunduh sebelumnya oleh Notification Service Extension — Content Extension tidak memiliki akses ke jaringan. Ukuran maksimum lampiran media — 50 MB di iOS 15+, di versi sebelumnya batasnya adalah 10 MB. Ekstensi harus menangani ketiadaan lampiran dengan benar dan menampilkan antarmuka fallback. Untuk pra-muat gambar resolusi rendah, gunakan versi thumbnail yang dibuat oleh Service Extension sebelum dilampirkan.
iOS mendukung pemutaran video di Notification Content Extension melalui AVPlayerLayer. Ekstensi dapat menampilkan pemutar video dengan tombol kontrol langsung di notifikasi. Ini sangat berguna untuk aplikasi pengawasan video, streaming, atau pratinjau konten. Pemutaran otomatis tanpa suara diizinkan asalkan pengguna mengharapkan konten multimedia dalam notifikasi ini. Saat mengimplementasikan pemutar video, tambahkan elemen kontrol: play/pause, bilah kemajuan, dan tombol tutup. Pastikan video tidak mulai otomatis dengan suara — ini melanggar rekomendasi Apple tentang pengalaman pengguna. Untuk slideshow dari beberapa gambar, gunakan transisi animasi antara mereka melalui UIView.transition dengan opsi transisi membalik halaman.
Notification Content Extension bekerja di lingkungan terbatas dengan batas memori sekitar 50 MB. Untuk mengoptimalkan kinerja, gunakan pemuatan lambat gambar, hindari perhitungan berat di thread utama, dan terapkan Auto Layout dengan batasan sederhana. Operasi berat seperti pemrosesan gambar atau parsing data dilakukan di latar belakang (DispatchQueue.global). Jika batas memori terlampaui, sistem akan menutup ekstensi dan pengguna akan melihat notifikasi standar. Disarankan untuk memprofilkan ekstensi melalui Instruments (Allocations dan Time Profiler) sebelum publikasi, serta memeriksa konsumsi memori pada perangkat nyata dengan berbagai versi iOS.
Pertanyaan yang sering diajukan
Ya, sejak iOS 16 Notification Content Extension mendukung SwiftUI melalui UIHostingController. Namun, UIKit tetap menjadi pilihan yang lebih stabil untuk antarmuka kompleks karena dukungan SwiftUI yang terbatas di ekstensi.
Periksa apakah categoryIdentifier di payload notifikasi cocok dengan UNNotificationExtensionCategory di Info.plist ekstensi. Juga pastikan ekstensi ditambahkan ke target aplikasi utama dan ditandatangani dengan benar.
Gunakan App Group — penyimpanan bersama (UserDefaults suite) atau wadah file. Aplikasi utama dan ekstensi harus berada dalam grup pengembang yang sama dan memiliki kemampuan App Groups diaktifkan.
Gunakan metode didReceive(_:with:) dengan UNNotificationContentExtensionMediaPlayPauseButtonType untuk kontrol media atau minta pembaruan melalui delegate. Pembaruan konten penuh tanpa notifikasi baru tidak dimungkinkan.
Pilih target ekstensi di Xcode dan jalankan di simulator. Gunakan lldb dan breakpoints seperti di aplikasi biasa. Untuk pengujian, kirim notifikasi push melalui Firebase Console atau secara lokal melalui Pusher.
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