PushKit — was es ist, iOS-VoIP-Benachrichtigungs-Framework

Autor: IT Sectr Veröffentlicht: 2026-03-22 Lesezeit: 8 Min.

PushKit ist ein iOS-Framework für die Zustellung von VoIP-Benachrichtigungen mit niedriger Latenz, das den Standard-APNs umgeht. Laut Apple Developer Documentation (2025) garantiert PushKit die Zustellung von Anrufen innerhalb von 5 Sekunden, selbst im Hintergrund. VoIP-Benachrichtigungen werden direkt verarbeitet, ohne dass dem Benutzer ein Banner angezeigt werden muss, was das Framework zum primären Tool für Messenger und Video-Communication-Apps auf iOS macht.

Wichtige Punkte

  • PushKit ist ein iOS-Framework zur Zustellung von VoIP-Benachrichtigungen mit Priorität und niedriger Latenz.
  • Benachrichtigungen werden ohne Anzeige eines Banners verarbeitet — die App wacht im Hintergrund auf, um einen Anruf zu bearbeiten.
  • Registrierung erfolgt über PKPushRegistry mit dem Typ pushType .voIP.
  • Unterschied zu APNs — PushKit verwendet nicht den standardmäßigen Benachrichtigungskanal und hat eine höhere Priorität.
  • Einschränkungen — PushKit ist nur für VoIP ausgelegt und kann nicht für normale Push-Benachrichtigungen verwendet werden.

Was ist PushKit

PushKit ist ein Framework von Apple, das in iOS 8 eingeführt wurde und Push-Benachrichtigungen mit niedriger Latenz für VoIP-Anwendungen bereitstellt. Im Gegensatz zum standardmäßigen APNs (Apple Push Notification service) ermöglicht PushKit der App, im Hintergrund aufzuwachen, wenn ein eingehender Anruf eingeht, ohne dem Benutzer eine Benachrichtigung anzuzeigen. Dies ist entscheidend für Sprach- und Videoanruf-Apps — der Benutzer erhält den Anruf sofort, selbst wenn die App geschlossen ist. Laut Apple WWDC 2024 verarbeitet PushKit weltweit täglich über 2 Milliarden VoIP-Benachrichtigungen.

Wie PushKit funktioniert

Der Mechanismus basiert auf einer direkten Verbindung zwischen dem Gerät und dem Apple-Push-Server, die den standardmäßigen Benachrichtigungskanal umgeht. Wenn der App-Server eine VoIP-Benachrichtigung sendet, durchläuft sie einen dedizierten PushKit-Server und wird mit höchster Priorität an das Gerät zugestellt. Das System weckt die App im Hintergrund auf und ruft die Delegatenmethode pushRegistry:didReceiveIncomingPushWithPayload:forType: auf. Die App empfängt die Nutzlast, verarbeitet den Anruf und ruft zur Bestätigung den Completion-Handler auf. Der gesamte Zyklus vom Senden bis zur Verarbeitung dauert laut Apple-Spezifikation nicht länger als 5 Sekunden.

PushKit vs APNs

Der Hauptunterschied zwischen PushKit und APNs liegt im Zustellungsmechanismus und der Verarbeitung. APNs verwendet den standardmäßigen Benachrichtigungskanal mit Anzeige eines Banners, Tons oder Badges, während PushKit Daten direkt an die App ohne visuelle Benachrichtigung zustellt. Nachfolgend finden Sie eine Vergleichstabelle der wichtigsten Merkmale.

MerkmalPushKitAPNs
ZustellungsprioritätHoch (sofortige Zustellung)Mittel (mögliche Verzögerung)
App-AufwachenJa, im HintergrundNur beim Antippen der Benachrichtigung
BanneranzeigeNeinJa (optional)
VerwendungVoIP, Anrufe, VideoanrufeAlle Arten von Benachrichtigungen
NutzlastNur JSON, keine MedienJSON + Anhänge

PushKit unterstützt auch keine umfangreichen Medienanhänge und kann nicht für gewöhnliche Marketing-Benachrichtigungen verwendet werden. Apple kontrolliert die Nutzung von PushKit streng — die App muss über explizite VoIP-Funktionalität verfügen, andernfalls wird sie bei der Überprüfung abgelehnt. APNs bleibt die universelle Lösung für alle anderen Szenarien.

Registrierung und Empfang von VoIP-Benachrichtigungen

Um PushKit zu verwenden, muss sich die App über PKPushRegistry mit dem Typ pushType .voIP registrieren. Die Registrierung erfolgt einmalig beim ersten Start, wonach das System einen eindeutigen Push-Token generiert und ihn über den Delegaten übermittelt. Dieser Token wird an den App-Server gesendet, um anschließend VoIP-Benachrichtigungen zu versenden. Nachfolgend finden Sie ein Beispiel für die PushKit-Registrierung und den Token-Erhalt in Swift.

Einrichtung der PushKit-Registrierung

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

Nach dem Aufruf von desiredPushTypes mit PKPushType.voIP fordert das System automatisch die Berechtigung zum Empfang von VoIP-Benachrichtigungen an. In der Methode pushRegistry:didUpdatePushCredentials:forType: empfängt die App den Geräte-Token als Data, der in einen Hex-String umgewandelt und an den Server gesendet wird. Der Token ist für jedes Gerät eindeutig und ändert sich bei einer Neuinstallation der App — der Server muss Token-Updates verarbeiten.

Empfang einer eingehenden Benachrichtigung

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

In der Methode didReceiveIncomingPushWith empfängt die App die Nutzlast mit den Anrufdaten. Nach dem Extrahieren der Anruferinformationen wird ein CXCallUpdate aus dem CallKit-Framework erstellt, um den eingehenden Anrufbildschirm anzuzeigen. Es ist wichtig, den Completion-Handler nach der Verarbeitung aufzurufen — andernfalls kann das System den App-Prozess aufgrund eines Timeouts zwangsweise beenden. Die maximale Verarbeitungszeit beträgt 30 Sekunden, danach betrachtet iOS die Benachrichtigung als unverarbeitet.

Behandlung eingehender Anrufe mit CallKit

PushKit ist eng mit CallKit integriert — einem Framework zur Anzeige der Systemanrufoberfläche auf iOS. Wenn die App eine VoIP-Benachrichtigung über PushKit erhält, muss sie einen CXProvider und CXCallController erstellen, um den Anruf zu verwalten. CallKit zeigt automatisch den eingehenden Anrufbildschirm auf dem Sperrbildschirm an, selbst wenn die App minimiert ist. Nachfolgend finden Sie ein Beispiel für die Einrichtung eines CallKit-Anbieters.

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 definiert das Erscheinungsbild und Verhalten des Anrufbildschirms — den App-Namen, Video-Support, Anzahl gleichzeitiger Anrufe. Die Integration von PushKit mit CallKit ist für VoIP-Apps obligatorisch: Ohne sie zeigt das System den eingehenden Anrufbildschirm nicht an, und der Benutzer verpasst den Anruf. Apple verlangt die Verwendung von CallKit für alle Apps, die PushKit verwenden.

Funktionen und Einschränkungen

Die Verwendung von PushKit bringt eine Reihe von strengen Einschränkungen mit sich, die von Apple festgelegt wurden. Das Framework darf nur für VoIP-Funktionalität verwendet werden — jeder Versuch, Marketing-Benachrichtigungen über PushKit zu senden, führt zur Sperrung der App. Die Nutzlastgröße darf 4 KB nicht überschreiten und darf nur JSON-Daten ohne Anhänge enthalten. Ab iOS 13 hat Apple eine Beschränkung der Häufigkeit des Sendens von VoIP-Benachrichtigungen eingeführt — nicht mehr als eine Benachrichtigung pro Minute pro Gerät. Der Server muss diese Beschränkung einhalten, andernfalls werden die Benachrichtigungen vom System zurückgewiesen. PushKit funktioniert auch nicht auf dem iOS-Simulator — Tests sind nur auf einem physischen Gerät möglich.

PushKit-Nutzlaststruktur

Eine VoIP-Benachrichtigungs-Nutzlast ist ein JSON-Wörterbuch mit benutzerdefinierten Anrufdaten. Im Gegensatz zu APNs unterstützt PushKit die Standardfelder alert, badge und sound nicht — alle Daten werden vom Entwickler definiert. Eine typische Struktur enthält die Anruferkennung (caller), den Anruftyp (voice oder video), eine Raum- oder Sitzungskennung und einen Zeitstempel. Die Größe jedes Feldes sollte minimal sein, um innerhalb des 4-KB-Limits Platz zu sparen. Apple empfiehlt, in die Nutzlast nur die Daten aufzunehmen, die zur Anzeige des eingehenden Anrufbildschirms auf dem Sperrbildschirm erforderlich sind, und die restlichen Informationen (Avatar, Nachrichtenverlauf) nach der Annahme durch den Benutzer über eine separate Netzwerkanfrage zu laden. Beispiel einer minimalen Nutzlast: { "caller": "Anna", "caller_id": "+79161234567", "type": "audio", "room": "uuid-room-1234", "ts": 1718534400 }. Alle Schlüssel in der Nutzlast müssen kurz, eindeutig und auf der Serverseite für die Kompatibilität zwischen App-Versionen dokumentiert sein.

Fehlerbehandlung und Wiederholungsversuche

Bei der Arbeit mit PushKit müssen Zustellungsfehler und Verbindungsabbrüche behandelt werden. Wenn das Gerät offline oder vom Netzwerk getrennt ist, wird die VoIP-Benachrichtigung nicht zugestellt — PushKit unterstützt im Gegensatz zu APNs, das Benachrichtigungen bis zu 24 Stunden für Wiederholungsversuche speichert, keine Speicherung und erneute Zustellung. Der Server muss nicht zugestellte Benachrichtigungen eigenständig verfolgen und bei Wiederherstellung der Verbindung erneut versuchen. Dazu wird der Push-Kit-Feedback-Service-Mechanismus verwendet — er gibt eine Liste nicht zugestellter Benachrichtigungen mit dem Grund des Fehlschlags zurück. Es wird empfohlen, die Überwachung des Erfolgs der VoIP-Benachrichtigungszustellung über Server-Analysen einzurichten und den Entwickler zu benachrichtigen, wenn die Erfolgsrate unter 95% fällt. Das PushKit-System garantiert die Zustellung nur, wenn das Gerät über eine aktive Internetverbindung verfügt — bei fehlender Verbindung geht die Benachrichtigung dauerhaft verloren, was bei der Entwicklung eines zuverlässigen VoIP-Anrufsystems mit garantierter Zustellung unbedingt zu berücksichtigen ist.

Häufig gestellte Fragen

Was ist PushKit?

PushKit ist ein Apple-Framework zur Zustellung von VoIP-Benachrichtigungen mit niedriger Latenz, das der App ermöglicht, bei einem eingehenden Anruf im Hintergrund aufzuwachen, ohne ein Banner anzuzeigen. Es wird in Messengern und Videoanruf-Apps verwendet.

Wie unterscheidet sich PushKit von APNs?

PushKit hat eine höhere Zustellungspriorität und weckt die App im Hintergrund auf, ohne dem Benutzer eine Benachrichtigung anzuzeigen. APNs stellt Benachrichtigungen mit einem Banner zu und kann die App ohne Benutzerinteraktion nicht zum Bearbeiten eines Anrufs aufwecken.

Ist CallKit für PushKit erforderlich?

Ja, Apple verlangt die Integration von PushKit mit CallKit zur Anzeige des systemeigenen eingehenden Anrufbildschirms. Ohne CallKit kann die App den eingehenden Anruf auf dem Sperrbildschirm nicht anzeigen, was die VoIP-Funktionalität nutzlos macht.

Wie erhalte ich einen PushKit-Token?

Der Token wird nach dem Erstellen von PKPushRegistry mit dem Typ .voIP und der Implementierung der Delegatenmethode pushRegistry:didUpdatePushCredentials:forType: erhalten. Der Token wird als Data übergeben und muss für den Versand an den Server in einen Hex-String umgewandelt werden.

Welche Beschränkungen gibt es für die Nutzlastgröße in PushKit?

Die maximale Nutzlast-Größe für PushKit beträgt 4 KB. Die Daten müssen im JSON-Format vorliegen. Medienanhänge werden nicht unterstützt. Seit iOS 13 gibt es eine Beschränkung von nicht mehr als einer VoIP-Benachrichtigung pro Minute pro Gerät.

Zusammenfassung

  • PushKit ist ein iOS-Framework zur Zustellung von VoIP-Benachrichtigungen mit niedriger Latenz, das APNs umgeht.
  • Zustellungspriorität von PushKit ist höher als bei APNs — die Benachrichtigung kommt innerhalb von 5 Sekunden an.
  • Die App wacht im Hintergrund auf, wenn eine Benachrichtigung eingeht, ohne dem Benutzer ein Banner anzuzeigen.
  • Registrierung erfolgt über PKPushRegistry mit PKPushType.voIP und dem PKPushRegistryDelegate-Protokoll.
  • CallKit ist erforderlich, um den systemeigenen eingehenden Anrufbildschirm auf iOS anzuzeigen.
  • Nutzlast auf 4 KB begrenzt, nur JSON, maximal eine Benachrichtigung pro Minute seit iOS 13.
  • Empfehlung — verwenden Sie PushKit nur für VoIP-Funktionalität, für andere Benachrichtigungen verwenden Sie APNs.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch