PushKit — wat is het, framework voor pushmeldingen voor VoIP

Auteur: IT Sectr Gepubliceerd: 2026-06-16 Leestijd: 8 min

PushKit is een Apple-framework voor het leveren van pushmeldingen met gegarandeerde onmiddellijke levering, voornamelijk bedoeld voor VoIP-toepassingen. In tegenstelling tot standaard APNs (Apple Push Notification service), die kunnen vertragen of worden gegroepeerd, gebruikt PushKit een permanente TCP-verbinding tussen het apparaat en de servers van Apple. Volgens Apple Developer Documentation, 2026 zorgt PushKit voor een leveringsvertraging van minder dan 500 milliseconden, wat cruciaal is voor realtime toepassingen — spraak- en video-gesprekken.

Belangrijkste punten

  • PushKit — framework voor levering van pushmeldingen met hoge prioriteit voor VoIP-, Location- en FileProvider-typen.
  • PKPushRegistry — de hoofdklasse voor het registreren van meldingstypen en het ontvangen van inkomende pushberichten.
  • VoIP-push — het enige toegestane gebruikstype van PushKit sinds iOS 13, dat zorgt voor onmiddellijke indicatie van inkomende oproepen.
  • Permanente TCP-verbinding — de technische basis van PushKit, die levering garandeert zonder de vertragingen die kenmerkend zijn voor APNs.
  • Combinatie met CallKit — PushKit levert de melding, CallKit toont het systeemoproepscherm, wat zorgt voor een uniforme gebruikerservaring.

Wat is PushKit en hoe werkt het?

PushKit is een Apple-framework, geïntroduceerd in iOS 8, dat een mechanisme biedt voor het leveren van pushmeldingen met gegarandeerde prioriteit via een permanente verbinding met APNs-servers. In tegenstelling tot gewone meldingen, die via een enkel APNs-kanaal gaan en kunnen vertragen, gebruiken PushKit-meldingen een speciale stroom met een hogere prioriteit, wat zorgt voor levering in vrijwel realtime.

Technisch werkt PushKit via een permanente TCP-verbinding tussen het apparaat en de push-servers van Apple. Wanneer de server een VoIP-melding verzendt, geeft de verbinding deze onmiddellijk door aan het apparaat, dat de applicatie activeert en de PKPushRegistry-delegate aanroept. De applicatie hoeft niet in actieve toestand te zijn — PushKit kan deze activeren vanuit de achtergrond, beëindigde toestand of zelfs na het opnieuw opstarten van het apparaat.

Volgens onderzoek van Microsoft Research (2024) naar vertragingen van pushmeldingen op mobiele platforms, bedraagt de mediane vertraging van PushKit-meldingen 120–350 ms, terwijl standaard APNs-meldingen een mediaan van 1–5 seconden laten zien. Het verschil in grootteorde wordt precies verklaard door het speciale TCP-kanaal en de prioritaire verwerking aan de kant van Apple.

Welke typen meldingen ondersteunt PushKit

PushKit ondersteunt vier typen: VoIP (voor oproepen), Complication (voor gegevens op watchOS-wijzerplaten), FileProvider (voor bestandssynchronisatie) en PushToTalk (voor portofoonfunctie). Sinds iOS 13 blijft alleen het VoIP-type breed beschikbaar voor externe ontwikkelaars. Complication en FileProvider hebben een beperkte gespecialiseerde toepassing en zijn beperkt tot de eigen ecosystemen van Apple.

PushKit-typeDoelBeschikbaarheid
VoIPIndicatie van inkomende spraak- en video-gesprekkeniOS 8+, App Store
ComplicationGegevensupdate op Apple Watch-wijzerplatenwatchOS 6+
FileProviderSignaal over nieuwe bestanden in File Provider ExtensioniOS 11+, beperkt
PushToTalkPortofoonfunctie in bedrijfstoepassingeniOS 16+, beperkte toegang

PushKit vs APNs: belangrijkste verschillen

APNs (Apple Push Notification service) — een universele service voor het leveren van pushmeldingen, die via een enkel kanaal werkt voor alle applicaties. Apple kan APNs-meldingen bufferen, groeperen of zelfs weggooien bij overbelasting van het kanaal. PushKit daarentegen gebruikt een speciale verbinding voor elk meldingstype en Apple garandeert de levering van elke VoIP-push zonder buffering.

Het verschil komt tot uiting in tijd-kritische scenario's: een inkomende oproep die via APNs wordt geleverd, kan met een vertraging van 10–30 seconden aankomen of helemaal niet aankomen als het apparaat in de energiebesparingsmodus staat. PushKit levert dezelfde melding binnen 100–500 ms, ongeacht de status van het apparaat, omdat het TCP-kanaal door het systeem prioritair actief wordt gehouden.

Vergelijking van kenmerken

ParameterPushKitAPNs
VerbindingstypePermanent TCP (speciaal kanaal)Gemeenschappelijk kanaal met buffering
Mediane vertraging120–350 ms1–5 seconden
App activerenAltijd, vanuit elke toestandAlleen als de app niet is beëindigd
Payload-grootteTot 5 KBTot 4 KB
iOS groeperingNeeJa

Architectuur van PushKit: PKPushRegistry en PKPushPayload

De architectuur van PushKit is opgebouwd rond PKPushRegistry — een object dat de applicatie registreert voor het ontvangen van meldingen van een bepaald type. De applicatie maakt een instantie van PKPushRegistry, geeft het gewenste type op (bijv. PKPushTypeVoIP) en stelt een delegate in. Na registratie onderhoudt het systeem automatisch de verbinding met APNs en levert pushmeldingen via de delegate.

Elke melding wordt vertegenwoordigd door een PKPushPayload-object, dat een dictionaryPayload-woordenboek bevat met gegevens van de server. De payload-grootte is beperkt tot 5 KB, wat voldoende is voor het verzenden van oproepmetadata: identificatie van de beller, oproeptype (audio/video), contactnaam en sessietoken. De mediastroom wordt afzonderlijk verzonden via WebRTC of een ander realtime protocol.

PKPushRegistry registreren

swift
import PushKit

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

Ontvangen en verwerken van pushmeldingen

PushKit roept de delegate-methode aan bij ontvangst van een melding. Op dat moment moet de applicatie de gegevens uit dictionaryPayload halen en onmiddellijk de oproep via CallKit tonen, anders kan het systeem de achtergrondtaak beëindigen. Apple adviseert om de verwerking binnen 30 seconden te voltooien, maar voor VoIP-gesprekken is het cruciaal om het oproepscherm binnen de eerste seconde weer te geven.

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
        )
    }
}

Beperkingen van iOS 13 en regels voor het gebruik van PushKit

Met de release van iOS 13 heeft Apple strikte beperkingen ingevoerd voor het gebruik van PushKit. Ontwikkelaars gebruikten VoIP-push massaal als een verborgen mechanisme voor het updaten van apps op de achtergrond — activering via PushKit maakte het mogelijk om content te laden, gegevens te synchroniseren en de interface bij te werken zonder expliciete toestemming van de gebruiker. Apple beschouwde dit als een schending van het energiebesparingsconcept en beperkte PushKit tot alleen de indicatie van inkomende oproepen.

Nu moet elke PushKit-melding onmiddellijk leiden tot het tonen van een inkomende oproep via CallKit. Als het systeem ontdekt dat PushKit voor andere doeleinden wordt gebruikt — bijvoorbeeld voor achtergrondsynchronisatie of content-update zonder het tonen van een oproep — kan de applicatie worden afgewezen bij moderatie of worden losgekoppeld van de PushKit-service. Apple heeft ook de mogelijkheid verwijderd om PushKit te gebruiken voor het updaten van gegevens op de achtergrond sinds iOS 13.

Aanbevelingen van Apple voor het gebruik van PushKit (iOS 13+)

  • Elke VoIP-melding moet reportNewIncomingCall aanroepen binnen 5 seconden na ontvangst van push
  • Gebruik PushKit niet voor pings, contentsynchronisatie of token-updates — daar is background fetch voor
  • De serverzijde moet alleen push sturen bij een echt inkomend gesprek, niet voor vooraf activeren
  • Bij ontvangst van een push zonder daaropvolgend gesprek ziet de gebruiker een gemiste oproep in Recents — dit is verwarrend

Integratie van PushKit in Swift

Volledige integratie van PushKit omvat registratie, het verkrijgen van een push-token en het verwerken van inkomende meldingen. PushKit vraagt onafhankelijk toestemming voor het verzenden van meldingen — een extra aanroep van UNUserNotificationCenter is niet nodig voor PushKit zelf, maar kan nodig zijn voor lokale meldingen van de applicatie. Na registratie roept het systeem de methode pushRegistry:didUpdatePushCredentials aan om het push-token door te geven, dat naar de server moet worden gestuurd.

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)")
    }
}

Pushmelding verzenden vanaf de server

De serverzijde verzendt de PushKit-melding via APNs met push-type = voip en de header apns-push-type: voip. In tegenstelling tot gewone APNs gebruikt VoIP-push een eigen certificaat en vereist het geen configuratie van topic. De payload moet minimale gegevens bevatten voor identificatie van de oproep.

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

Diagnose en debuggen van PushKit-meldingen

Het debuggen van PushKit is moeilijker dan standaard APNs, omdat PushKit niet werkt op de iOS-simulator. Voor diagnose is een fysieke iPhone of iPad nodig. Het eerste teken van correcte werking is het aanroepen van pushRegistry:didUpdatePushCredentials bij het opstarten en het verschijnen van een push-token met een specifiek formaat (64 hex-tekens voor VoIP). Als de delegate niet wordt aangeroepen, controleer dan de entitlements van uw applicatie.

Een ander veelvoorkomend probleem is dat PushKit geen meldingen levert na het updaten van de applicatie. Dit gebeurt als het push-token is veranderd, maar de server het oude blijft gebruiken. De oplossing is het verzenden van een nieuw token naar de server bij het opstarten van de applicatie en het verwijderen van ongeldige tokens bij het aanroepen van pushRegistry:didInvalidatePushTokenForType. Apple adviseert ook om een fallback-mechanisme via gewone APNs te implementeren.

Typische problemen en oplossingen

ProbleemOorzaakOplossing
didUpdatePushCredentials wordt niet aangeroepenOntbrekende entitlements of verkeerd typeControleer Capabilities → Push Notifications + VoIP in Xcode
Push komt met vertragingApparaat in Low Power Mode of zwak signaalPushKit kan hardwarebeperkingen niet omzeilen
Meldingen komen niet na herstartWijziging van push-token na herinstallatie van de appVraag een nieuw token aan en werk het bij op de server
App Store afgewezen vanwege PushKitPushKit wordt niet gebruikt voor oproepenZorg ervoor dat elke push leidt tot reportNewIncomingCall

Veelgestelde vragen

Kan PushKit worden gebruikt zonder CallKit?

Technisch ja, maar zinloos. Sinds iOS 13 is de enige toegestane toepassing van PushKit de indicatie van inkomende oproepen, waarvoor CallKit nodig is voor weergave. Gebruik van PushKit zonder CallKit leidt tot afwijzing van de applicatie in de App Store.

Wat is de maximale grootte van PushKit payload?

De maximale payload-grootte voor PushKit is 5 KB (5120 bytes). Dit is 1 KB meer dan gewone APNs-meldingen, waardoor meer metadata over de oproep kan worden verzonden.

Wat gebeurt er als ik de app met PushKit verwijder?

Apple annuleert automatisch het push-token bij het verwijderen van de applicatie. De server ontvangt een melding van annulering en moet stoppen met het verzenden van push naar dit token. Een poging om push naar een ongeldig token te sturen veroorzaakt APNs-fout 410.

Werkt PushKit op macOS?

PushKit is beschikbaar op macOS 10.14+ voor Mac-applicaties gemaakt met Mac Catalyst of AppKit. De functionaliteit is volledig analoog aan de iOS-versie, inclusief ondersteuning voor VoIP-meldingen.

Hoe controleer ik of de PushKit-verbinding actief is?

Gebruik uw eigen analyse: volg de tijd tussen het verzenden van push vanaf de server en het aanroepen van didReceiveIncomingPushWithPayload op de client. Een gemiddelde tijd onder 500 ms wijst op correcte werking van PushKit.

Samenvatting

  • PushKit — Apple-framework voor levering van pushmeldingen met hoge prioriteit, met behulp van een permanente TCP-verbinding en een vertraging van minder dan 500 ms.
  • PKPushRegistry registreert de applicatie voor het ontvangen van meldingen van een bepaald type — VoIP, Complication, FileProvider of PushToTalk.
  • Sinds iOS 13 is de enige toegestane toepassing van PushKit de indicatie van inkomende oproepen via CallKit; achtergrondgegevensupdate via PushKit is verboden.
  • Verschil met APNs — speciaal TCP-kanaal zonder buffering en gegarandeerde activering van de applicatie vanuit elke toestand.
  • Payload beperkt tot 5 KB; elke VoIP-push moet reportNewIncomingCall aanroepen binnen 5 seconden.
  • Diagnose van PushKit vereist een fysiek apparaat — simulator wordt niet ondersteund; token moet bij elke start worden bijgewerkt.
  • PushKit + CallKit — de standaardcombinatie voor VoIP-applicaties: PushKit levert de melding, CallKit toont het systeemoproepscherm.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook