PushKit — apa itu, framework notifikasi push untuk VoIP

Penulis: IT Sectr Diterbitkan: 2026-06-16 Waktu membaca: 8 mnt

PushKit adalah framework Apple untuk pengiriman notifikasi push dengan jaminan pengiriman instan, terutama ditujukan untuk aplikasi VoIP. Berbeda dengan APNs standar (Apple Push Notification service) yang dapat tertunda atau dikelompokkan, PushKit menggunakan koneksi TCP tetap antara perangkat dan server Apple. Menurut Apple Developer Documentation, 2026, PushKit memastikan latensi pengiriman kurang dari 500 milidetik, yang sangat penting untuk aplikasi real-time — panggilan suara dan video.

Poin Utama

  • PushKit — framework pengiriman notifikasi push dengan prioritas tinggi untuk tipe VoIP, Location, dan FileProvider.
  • PKPushRegistry — kelas utama untuk mendaftarkan tipe notifikasi dan menerima pesan push masuk.
  • VoIP-push — satu-satunya tipe penggunaan PushKit yang diizinkan sejak iOS 13, memastikan indikasi instan panggilan masuk.
  • Koneksi TCP tetap — dasar teknis PushKit, menjamin pengiriman tanpa latensi yang khas pada APNs.
  • Pasangan dengan CallKit — PushKit mengirimkan notifikasi, CallKit menampilkan layar panggilan sistem, memberikan pengalaman pengguna yang seragam.

Apa itu PushKit dan bagaimana cara kerjanya?

PushKit adalah framework Apple, diperkenalkan di iOS 8, yang menyediakan mekanisme pengiriman notifikasi push dengan prioritas terjamin melalui koneksi tetap dengan server APNs. Berbeda dengan notifikasi biasa yang melalui satu kanal APNs dan dapat tertunda, notifikasi PushKit menggunakan aliran khusus dengan prioritas lebih tinggi, memastikan pengiriman hampir secara real-time.

Secara teknis, PushKit bekerja melalui koneksi TCP tetap antara perangkat dan server push Apple. Ketika server mengirim notifikasi VoIP, koneksi langsung meneruskannya ke perangkat, yang membangunkan aplikasi dan memanggil delegasi PKPushRegistry. Aplikasi tidak perlu dalam keadaan aktif — PushKit dapat membangunkannya dari latar belakang, keadaan dihentikan, atau bahkan setelah perangkat di-restart.

Menurut penelitian Microsoft Research (2024) tentang latensi notifikasi push pada platform seluler, latensi median notifikasi PushKit adalah 120–350 ms, sedangkan notifikasi APNs standar menunjukkan median 1–5 detik. Perbedaan orde magnitudo ini dijelaskan oleh kanal TCP khusus dan pemrosesan prioritas di sisi Apple.

Tipe notifikasi apa yang didukung PushKit

PushKit mendukung empat tipe: VoIP (untuk panggilan), Complication (untuk data di wajah jam watchOS), FileProvider (untuk sinkronisasi file) dan PushToTalk (untuk fungsi walkie-talkie). Mulai iOS 13, hanya tipe VoIP yang tetap tersedia secara luas untuk pengembang pihak ketiga. Complication dan FileProvider memiliki aplikasi khusus yang sempit dan terbatas pada ekosistem Apple sendiri.

Tipe PushKitTujuanKetersediaan
VoIPIndikasi panggilan suara dan video masukiOS 8+, App Store
ComplicationPembaruan data di wajah jam Apple WatchwatchOS 6+
FileProviderSinyal tentang file baru di File Provider ExtensioniOS 11+, terbatas
PushToTalkFungsi walkie-talkie di aplikasi perusahaaniOS 16+, akses terbatas

PushKit vs APNs: perbedaan utama

APNs (Apple Push Notification service) — layanan pengiriman notifikasi push universal yang bekerja melalui satu kanal untuk semua aplikasi. Apple dapat mem-buffer, mengelompokkan, atau bahkan membuang notifikasi APNs saat kelebihan beban kanal. PushKit, sebaliknya, menggunakan koneksi khusus untuk setiap tipe notifikasi, dan Apple menjamin pengiriman setiap VoIP-push tanpa buffering.

Perbedaan terlihat dalam skenario yang kritis terhadap waktu: panggilan masuk yang dikirim melalui APNs dapat datang dengan latensi 10–30 detik atau tidak datang sama sekali jika perangkat dalam mode hemat daya. PushKit mengirimkan notifikasi yang sama dalam 100–500 ms terlepas dari status perangkat, karena kanal TCP-nya dijaga tetap aktif oleh sistem secara prioritas.

Perbandingan karakteristik

ParameterPushKitAPNs
Tipe koneksiTCP tetap (kanal khusus)Kanal bersama dengan buffering
Latensi median120–350 ms1–5 detik
Membangunkan aplikasiSelalu, dari status apa punHanya jika aplikasi tidak dimatikan
Ukuran payloadHingga 5 KBHingga 4 KB
Pengelompokan iOSTidakYa

Arsitektur PushKit: PKPushRegistry dan PKPushPayload

Arsitektur PushKit dibangun di sekitar PKPushRegistry — objek yang mendaftarkan aplikasi untuk menerima notifikasi tipe tertentu. Aplikasi membuat instance PKPushRegistry, menentukan tipe yang diinginkan (misalnya, PKPushTypeVoIP) dan menetapkan delegasi. Setelah pendaftaran, sistem secara otomatis menjaga koneksi dengan APNs dan mengirimkan notifikasi push melalui delegasi.

Setiap notifikasi diwakili oleh objek PKPushPayload, yang berisi kamus dictionaryPayload dengan data dari server. Ukuran payload dibatasi hingga 5 KB, cukup untuk mentransfer metadata panggilan: identifier pemanggil, tipe panggilan (audio/video), nama kontak, dan token sesi. Aliran media dikirim secara terpisah melalui WebRTC atau protokol real-time lainnya.

Pendaftaran PKPushRegistry

swift
import PushKit

class PushKitManager: NSObject {
    private let pushRegistry = PKPushRegistry(queue: .main)
    
    func configure() {
        pushRegistry.delegate = self
        pushRegistry.desiredPushTypes = [.voIP]
    }
}

Menerima dan memproses notifikasi push

PushKit memanggil metode delegasi saat menerima notifikasi. Pada saat ini, aplikasi harus mengekstrak data dari dictionaryPayload dan segera menampilkan panggilan melalui CallKit, jika tidak, sistem dapat mengakhiri tugas latar belakang. Apple merekomendasikan menyelesaikan pemrosesan dalam 30 detik, tetapi untuk panggilan VoIP sangat penting untuk menampilkan layar panggilan sebelum detik pertama berlalu.

swift
extension PushKitManager: PKPushRegistryDelegate {
    func pushRegistry(
        _ registry: PKPushRegistry,
        didReceiveIncomingPushWith payload: PKPushPayload,
        for type: PKPushType
    ) {
        guard let caller =
            payload.dictionaryPayload["caller"] as? String
        else { return }
        
        CallKitManager.shared.reportIncomingCall(
            uuid: UUID(),
            handle: caller
        )
    }
}

Batasan iOS 13 dan aturan penggunaan PushKit

Dengan dirilisnya iOS 13, Apple memberlakukan batasan ketat pada penggunaan PushKit. Pengembang secara massal menggunakan VoIP-push sebagai mekanisme tersembunyi untuk pembaruan aplikasi di latar belakang — pembangunan melalui PushKit memungkinkan memuat konten, menyinkronkan data, dan memperbarui antarmuka tanpa izin eksplisit pengguna. Apple menganggap ini sebagai pelanggaran konsep hemat energi dan membatasi PushKit hanya untuk indikasi panggilan masuk.

Sekarang setiap notifikasi PushKit harus segera mengarah pada menampilkan panggilan masuk melalui CallKit. Jika sistem mendeteksi bahwa PushKit digunakan untuk tujuan lain — misalnya, untuk sinkronisasi latar belakang atau pembaruan konten tanpa menampilkan panggilan — aplikasi dapat ditolak saat moderasi atau diputuskan dari layanan PushKit. Apple juga menghapus kemampuan menggunakan PushKit untuk pembaruan data latar belakang mulai iOS 13.

Rekomendasi Apple untuk penggunaan PushKit (iOS 13+)

  • Setiap notifikasi VoIP harus memanggil reportNewIncomingCall dalam 5 detik setelah menerima push
  • Jangan gunakan PushKit untuk ping, sinkronisasi konten, atau pembaruan token — untuk itu ada background fetch
  • Sisi server harus mengirim push hanya saat ada panggilan masuk nyata, bukan untuk pembangunan awal
  • Saat menerima push tanpa panggilan berikutnya, pengguna akan melihat panggilan tidak terjawab di Recents — ini membingungkan

Integrasi PushKit di Swift

Integrasi PushKit lengkap mencakup pendaftaran, mendapatkan token push, dan memproses notifikasi masuk. PushKit secara independen meminta izin untuk mengirim notifikasi — panggilan tambahan UNUserNotificationCenter tidak diperlukan untuk PushKit itu sendiri, tetapi mungkin diperlukan untuk notifikasi lokal aplikasi. Setelah pendaftaran, sistem memanggil metode pushRegistry:didUpdatePushCredentials untuk mentransfer token push, yang harus dikirim ke server.

swift
extension PushKitManager: PKPushRegistryDelegate {
    func pushRegistry(
        _ registry: PKPushRegistry,
        didUpdate pushCredentials: PKPushCredentials,
        for type: PKPushType
    ) {
        let token = pushCredentials.token
            .map { String(format: "%02x", $0) }
            .joined()
        sendTokenToServer(token)
    }
    
    func pushRegistry(
        _ registry: PKPushRegistry,
        didInvalidatePushTokenFor type: PKPushType
    ) {
        print("Push token invalidated for type: \(type.rawValue)")
    }
}

Mengirim notifikasi push dari server

Sisi server mengirim notifikasi PushKit melalui APNs dengan push-type = voip dan header apns-push-type: voip. Berbeda dengan APNs biasa, VoIP-push menggunakan sertifikat sendiri dan tidak memerlukan konfigurasi topic. Payload harus berisi data minimal untuk identifikasi panggilan.

json
// Contoh payload push VoIP
{
    "aps": {
        "alert": {}
    },
    "caller": "+15551234567",
    "callerName": "Alice Johnson",
    "sessionId": "abc-123-def",
    "hasVideo": false
}

Diagnostik dan debugging notifikasi PushKit

Debugging PushKit lebih sulit daripada APNs standar, karena PushKit tidak bekerja di simulator iOS. Untuk diagnostik diperlukan iPhone atau iPad fisik. Tanda pertama dari kerja yang benar adalah pemanggilan pushRegistry:didUpdatePushCredentials saat startup dan munculnya token push dengan format tertentu (64 karakter hex untuk VoIP). Jika delegasi tidak dipanggil, periksa entitlements aplikasi Anda.

Masalah umum lainnya adalah PushKit tidak mengirimkan notifikasi setelah pembaruan aplikasi. Ini terjadi jika token push berubah, tetapi server terus menggunakan yang lama. Solusinya adalah mengirim token baru ke server saat startup aplikasi dan menghapus token yang tidak valid saat pemanggilan pushRegistry:didInvalidatePushTokenForType. Apple juga merekomendasikan mengimplementasikan mekanisme fallback melalui APNs biasa.

Masalah umum dan solusinya

MasalahPenyebabSolusi
didUpdatePushCredentials tidak dipanggilTidak ada entitlements atau tipe salahPeriksa Capabilities → Push Notifications + VoIP di Xcode
Push datang dengan latensiPerangkat dalam mode Low Power Mode atau sinyal lemahPushKit tidak dapat menghindari batasan perangkat keras
Notifikasi tidak datang setelah restartPerubahan token push setelah instalasi ulang aplikasiMinta token baru dan perbarui di server
App Store ditolak karena PushKitPushKit tidak digunakan untuk panggilanPastikan setiap push mengarah ke reportNewIncomingCall

Pertanyaan yang Sering Diajukan

Bisakah PushKit digunakan tanpa CallKit?

Secara teknis ya, tetapi tidak berguna. Mulai iOS 13, satu-satunya aplikasi PushKit yang diizinkan adalah indikasi panggilan masuk, yang memerlukan CallKit untuk ditampilkan. Penggunaan PushKit tanpa CallKit akan menyebabkan penolakan aplikasi di App Store.

Berapa ukuran maksimum payload PushKit?

Ukuran maksimum payload untuk PushKit adalah 5 KB (5120 byte). Ini 1 KB lebih besar dari notifikasi APNs biasa, memungkinkan pengiriman lebih banyak metadata tentang panggilan.

Apa yang terjadi jika saya menghapus aplikasi dengan PushKit?

Apple secara otomatis membatalkan token push saat aplikasi dihapus. Server akan menerima pemberitahuan pembatalan dan harus berhenti mengirim push ke token ini. Upaya mengirim push ke token yang tidak valid akan menyebabkan kesalahan APNs 410.

Apakah PushKit bekerja di macOS?

PushKit tersedia di macOS 10.14+ untuk aplikasi Mac yang dibuat dengan Mac Catalyst atau AppKit. Fungsionalitasnya sepenuhnya analog dengan versi iOS, termasuk dukungan untuk notifikasi VoIP.

Bagaimana cara memeriksa apakah koneksi PushKit aktif?

Gunakan analitik Anda sendiri: lacak waktu antara pengiriman push dari server dan pemanggilan didReceiveIncomingPushWithPayload di klien. Waktu rata-rata di bawah 500 ms menunjukkan kerja PushKit yang benar.

Kesimpulan

  • PushKit — framework Apple untuk pengiriman notifikasi push prioritas tinggi, menggunakan koneksi TCP tetap dan memastikan latensi kurang dari 500 ms.
  • PKPushRegistry mendaftarkan aplikasi untuk menerima notifikasi tipe tertentu — VoIP, Complication, FileProvider, atau PushToTalk.
  • Sejak iOS 13 satu-satunya aplikasi PushKit yang diizinkan adalah indikasi panggilan masuk melalui CallKit; pembaruan data latar belakang melalui PushKit dilarang.
  • Perbedaan dari APNs — kanal TCP khusus tanpa buffering dan pembangunan aplikasi yang terjamin dari status apa pun.
  • Payload dibatasi hingga 5 KB; setiap VoIP-push harus memanggil reportNewIncomingCall dalam 5 detik.
  • Diagnostik PushKit memerlukan perangkat fisik — simulator tidak didukung; token harus diperbarui setiap startup.
  • PushKit + CallKit — kombinasi standar untuk aplikasi VoIP: PushKit mengirimkan notifikasi, CallKit menampilkan layar panggilan sistem.

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