PushKit — apa itu, framework notifikasi VoIP iOS

Penulis: IT Sectr Diterbitkan: 2026-03-22 Waktu membaca: 8 mnt

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 — framework iOS untuk mengirimkan notifikasi VoIP dengan prioritas dan latensi rendah.
  • Notifikasi diproses tanpa menampilkan banner — aplikasi terbangun di latar belakang untuk memproses panggilan.
  • Pendaftaran dilakukan melalui PKPushRegistry dengan tipe pushType .voIP.
  • Perbedaan dari APNs — PushKit tidak menggunakan saluran notifikasi standar dan memiliki prioritas lebih tinggi.
  • Batasan — PushKit hanya ditujukan untuk VoIP dan tidak dapat digunakan untuk notifikasi push biasa.

Apa itu PushKit

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.

Cara kerja PushKit

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 antara PushKit dan APNs

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.

FiturPushKitAPNs
Prioritas pengirimanTinggi (pengiriman segera)Sedang (mungkin tertunda)
Membangunkan aplikasiYa, di latar belakangHanya saat klik notifikasi
Menampilkan bannerTidakYa (opsional)
PenggunaanVoIP, panggilan, videoSemua jenis notifikasi
PayloadHanya JSON, tanpa mediaJSON + 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.

Pendaftaran dan penerimaan notifikasi VoIP

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.

Konfigurasi pendaftaran PushKit

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.

Menerima notifikasi masuk

swift
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.

Menangani panggilan masuk dengan CallKit

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.

swift
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.

Fitur dan batasan

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.

Struktur payload PushKit

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.

Penanganan kesalahan dan percobaan ulang

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

Apa itu PushKit?

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.

Apa perbedaan PushKit dengan APNs?

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.

Apakah wajib menggunakan CallKit dengan PushKit?

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.

Bagaimana cara mendapatkan token PushKit?

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.

Apa batasan ukuran payload di PushKit?

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

  • PushKit — framework iOS untuk mengirimkan notifikasi VoIP dengan latensi rendah, melewati APNs.
  • Prioritas pengiriman PushKit lebih tinggi dari APNs — notifikasi tiba dalam 5 detik.
  • Aplikasi terbangun di latar belakang saat menerima notifikasi, tanpa banner kepada pengguna.
  • Pendaftaran dilakukan melalui PKPushRegistry dengan PKPushType.voIP dan delegasi PKPushRegistryDelegate.
  • CallKit wajib untuk menampilkan layar sistem panggilan masuk di iOS.
  • Payload dibatasi 4 KB, hanya JSON, maksimal satu notifikasi per menit sejak iOS 13.
  • Rekomendasi — gunakan PushKit hanya untuk fungsionalitas VoIP, untuk notifikasi lain gunakan APNs.

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.

Diskusikan proyek

Baca juga