PushKit adalah framework iOS untuk mengirimkan notifikasi VoIP dengan latensi rendah, melewati APNs standar. Menurut Apple Developer Documentation (2025), PushKit menjamin pengiriman panggilan dalam 5 detik bahkan di latar belakang. Notifikasi VoIP diproses langsung, tanpa perlu menampilkan banner kepada pengguna, menjadikan framework ini alat utama untuk aplikasi perpesanan dan video di iOS.
Poin Penting
PushKit adalah framework dari Apple, diperkenalkan di iOS 8, yang menyediakan pengiriman notifikasi push dengan latensi rendah untuk aplikasi VoIP. Tidak seperti APNs standar (Apple Push Notification service), PushKit memungkinkan aplikasi terbangun di latar belakang saat menerima panggilan masuk, tanpa menampilkan notifikasi kepada pengguna. Ini sangat penting untuk aplikasi suara dan video — pengguna menerima panggilan secara instan, bahkan jika aplikasi ditutup. Menurut Apple WWDC 2024, PushKit memproses lebih dari 2 miliar notifikasi VoIP setiap hari di seluruh dunia.
Mekanisme kerja didasarkan pada koneksi langsung antara perangkat dan server push Apple, melewati saluran notifikasi standar. Ketika server aplikasi mengirim notifikasi VoIP, notifikasi tersebut melewati server PushKit khusus dan dikirim ke perangkat dengan prioritas maksimum. Sistem membangunkan aplikasi di latar belakang dan memanggil metode delegasi pushRegistry:didReceiveIncomingPushWithPayload:forType:. Aplikasi menerima payload, memproses panggilan, dan memanggil completion handler untuk konfirmasi. Seluruh siklus dari pengiriman hingga pemrosesan memakan waktu tidak lebih dari 5 detik, sebagaimana dikonfirmasi oleh spesifikasi Apple.
Perbedaan utama antara PushKit dan APNs terletak pada mekanisme pengiriman dan pemrosesan. APNs menggunakan saluran notifikasi standar dengan menampilkan banner, suara, atau lencana, sedangkan PushKit mengirimkan data langsung ke aplikasi tanpa notifikasi visual. Di bawah ini adalah tabel perbandingan fitur utama.
| Fitur | PushKit | APNs |
|---|---|---|
| Prioritas pengiriman | Tinggi (pengiriman segera) | Sedang (mungkin tertunda) |
| Membangunkan aplikasi | Ya, di latar belakang | Hanya saat klik notifikasi |
| Menampilkan banner | Tidak | Ya (opsional) |
| Penggunaan | VoIP, panggilan, video | Semua jenis notifikasi |
| Payload | Hanya JSON, tanpa media | JSON + lampiran |
PushKit juga tidak mendukung lampiran media yang kaya dan tidak dapat digunakan untuk notifikasi pemasaran biasa. Apple secara ketat mengontrol penggunaan PushKit — aplikasi harus memiliki fungsionalitas VoIP yang jelas, jika tidak akan ditolak saat peninjauan. APNs tetap menjadi solusi universal untuk semua skenario lainnya.
Untuk menggunakan PushKit, aplikasi harus mendaftar melalui PKPushRegistry dengan tipe pushType .voIP. Pendaftaran dilakukan satu kali saat pertama kali dijalankan, setelah itu sistem menghasilkan token push unik dan mengirimkannya melalui delegasi. Token ini dikirim ke server aplikasi untuk pengiriman notifikasi VoIP selanjutnya. Di bawah ini adalah contoh pendaftaran PushKit dan mendapatkan token di Swift.
import PushKit
let registry = PKPushRegistry(queue: DispatchQueue.main)
registry.delegate = self
registry.desiredPushTypes = [.voIP]
// MARK: - PKPushRegistryDelegate
func pushRegistry(
_ registry: PKPushRegistry,
didUpdate pushCredentials: PKPushCredentials,
for type: PKPushType
) {
let deviceToken = pushCredentials.token
.map { String.format("%02x", $0) }
.joined()
sendVoIPTokenToServer(deviceToken)
}
Setelah memanggil desiredPushTypes dengan PKPushType.voIP, sistem secara otomatis meminta izin untuk menerima notifikasi VoIP. Dalam metode pushRegistry:didUpdatePushCredentials:forType: aplikasi menerima token perangkat sebagai Data, yang diubah menjadi string hex dan dikirim ke server. Token unik untuk setiap perangkat dan berubah saat instalasi ulang aplikasi — server harus menangani pembaruan token.
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping VoidBlock
) {
guard let caller = payload.dictionaryPayload["caller"] as? String else {
completion()
return
}
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .generic, value: caller)
provider.reportNewIncomingCall(
with: UUID(),
update: update,
completion: { error in
if let error = error {
print("Call error: \(error)")
}
completion()
}
)
}
Dalam metode didReceiveIncomingPushWith, aplikasi menerima payload dengan data panggilan. Setelah mengekstrak informasi penelepon, CXCallUpdate dari framework CallKit dibuat untuk menampilkan layar panggilan masuk. Penting untuk memanggil completion handler setelah selesai memproses — jika tidak, sistem dapat mengakhiri proses aplikasi secara paksa karena waktu habis. Waktu pemrosesan maksimum adalah 30 detik, setelah itu iOS menganggap notifikasi belum diproses.
PushKit terintegrasi erat dengan CallKit — framework untuk menampilkan antarmuka sistem panggilan di iOS. Ketika aplikasi menerima notifikasi VoIP melalui PushKit, aplikasi harus membuat CXProvider dan CXCallController untuk mengelola panggilan. CallKit secara otomatis menampilkan layar panggilan masuk di layar kunci, bahkan jika aplikasi diminimalkan. Di bawah ini adalah contoh konfigurasi penyedia CallKit.
let config = CXProviderConfiguration(localizedName: "MyApp")
config.supportsVideo = true
config.maximumCallGroups = 1
config.maximumCallsPerCallGroup = 1
config.supportedHandleTypes = [.phoneNumber, .generic]
let provider = CXProvider(configuration: config)
provider.setDelegate(self, queue: nil)
CXProviderConfiguration menentukan tampilan dan perilaku layar panggilan — nama aplikasi, dukungan video, jumlah panggilan simultan. Integrasi PushKit dengan CallKit wajib untuk aplikasi VoIP: tanpanya, sistem tidak akan menampilkan layar panggilan masuk, dan pengguna akan melewatkan panggilan. Apple mewajibkan penggunaan CallKit untuk semua aplikasi yang menggunakan PushKit.
Penggunaan PushKit memberlakukan sejumlah batasan ketat yang ditetapkan oleh Apple. Framework hanya dapat digunakan untuk fungsionalitas VoIP — upaya mengirim notifikasi pemasaran melalui PushKit akan mengakibatkan pemblokiran aplikasi. Ukuran payload tidak boleh melebihi 4 KB dan hanya boleh berisi data JSON tanpa lampiran. Mulai iOS 13, Apple memberlakukan batasan frekuensi pengiriman notifikasi VoIP — tidak lebih dari satu notifikasi per menit per perangkat. Server harus mematuhi batasan ini, jika tidak notifikasi akan ditolak oleh sistem. PushKit juga tidak berfungsi di simulator iOS — pengujian hanya dapat dilakukan pada perangkat fisik.
Payload notifikasi VoIP adalah kamus JSON dengan data panggilan kustom. Tidak seperti APNs, PushKit tidak mendukung bidang standar alert, badge, dan sound — semua data ditentukan oleh pengembang. Struktur tipikal mencakup identitas penelepon (caller), jenis panggilan (voice atau video), ID ruangan atau sesi, dan stempel waktu. Ukuran setiap bidang harus minimal untuk menghemat ruang dalam batas 4 KB. Apple merekomendasikan untuk hanya menyertakan data yang diperlukan untuk menampilkan layar panggilan masuk di layar kunci, dan informasi lainnya (avatar, riwayat percakapan) dimuat setelah pengguna menjawab melalui permintaan jaringan terpisah. Contoh payload minimal: { “caller”: “Anna”, “caller_id”: “+79161234567”, “type”: “audio”, “room”: “uuid-room-1234”, “ts”: 1718534400 }. Semua kunci dalam payload harus pendek, tidak ambigu, dan didokumentasikan di sisi server untuk kompatibilitas antar versi aplikasi.
Saat bekerja dengan PushKit, perlu diantisipasi penanganan kesalahan pengiriman dan kehilangan koneksi. Jika perangkat dalam mode offline atau terputus dari jaringan, notifikasi VoIP tidak akan terkirim — PushKit tidak mendukung penyimpanan dan pengiriman ulang, tidak seperti APNs yang menyimpan notifikasi hingga 24 jam untuk percobaan ulang. Server harus melacak sendiri notifikasi yang tidak terkirim dan mencoba ulang setelah koneksi pulih. Untuk ini, mekanisme push kit feedback service digunakan — ia mengembalikan daftar notifikasi yang tidak terkirim dengan menunjukkan penyebab kesalahan. Disarankan untuk mengatur pemantauan keberhasilan pengiriman notifikasi VoIP melalui analitik server dan memberi tahu pengembang ketika persentase pengiriman berhasil turun di bawah 95%. Sistem PushKit menjamin pengiriman hanya saat ada koneksi internet aktif di perangkat — jika tidak ada koneksi, notifikasi akan hilang secara permanen, yang sangat penting untuk dipertimbangkan saat merancang sistem panggilan VoIP yang andal dengan pengiriman terjamin.
Pertanyaan yang Sering Diajukan
PushKit adalah framework Apple untuk mengirimkan notifikasi VoIP dengan latensi rendah, yang memungkinkan aplikasi terbangun di latar belakang saat panggilan masuk tanpa menampilkan banner. Digunakan di aplikasi perpesanan dan video.
PushKit memiliki prioritas pengiriman yang lebih tinggi dan membangunkan aplikasi di latar belakang tanpa menampilkan notifikasi kepada pengguna. APNs mengirimkan notifikasi dengan banner dan tidak dapat membangunkan aplikasi untuk memproses panggilan tanpa interaksi pengguna.
Ya, Apple mewajibkan integrasi PushKit dengan CallKit untuk menampilkan layar sistem panggilan masuk. Tanpa CallKit, aplikasi tidak dapat menampilkan panggilan masuk di layar kunci, membuat fungsionalitas VoIP tidak berguna.
Token diperoleh setelah membuat PKPushRegistry dengan tipe .voIP dan mengimplementasikan delegasi pushRegistry:didUpdatePushCredentials:forType:. Token dikirimkan sebagai Data dan harus diubah menjadi string hex untuk dikirim ke server.
Ukuran maksimum payload untuk PushKit adalah 4 KB. Data harus dalam format JSON. Lampiran media tidak didukung. Mulai iOS 13, berlaku batasan tidak lebih dari satu notifikasi VoIP per menit per perangkat.
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