PushKit — τι είναι, το framework push ειδοποιήσεων για VoIP

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-16 Χρόνος ανάγνωσης: 8 λεπ

PushKit je framework od Apple pro doručení push oznámení s garantovaným okamžitým doručením, určený především pro VoIP aplikace. Na rozdíl od standardních APNs (Apple Push Notification service), které se mohou zpožďovat nebo seskupovat, PushKit používá trvalé TCP spojení mezi zařízením a servery Apple. Podle Apple Developer Documentation, 2026 poskytuje PushKit zpoždění doručení kratší než 500 milisekund, což je kritické pro aplikace v reálném čase — hlasové a video hovory.

Hlavní body

  • PushKit — framework pro doručení push oznámení s vysokou prioritou pro typy VoIP, Location a FileProvider.
  • PKPushRegistry — hlavní třída pro registraci typů oznámení a příjem příchozích push zpráv.
  • VoIP-push — jediný povolený typ použití PushKit od iOS 13, zajišťující okamžitou indikaci příchozích hovorů.
  • Trvalé TCP spojení — technický základ PushKit, garantující doručení bez zpoždění typických pro APNs.
  • Pár s CallKit — PushKit doručí oznámení, CallKit zobrazí systémovou obrazovku hovoru, čímž poskytuje jednotný uživatelský zážitek.

Co je PushKit a jak funguje?

PushKit je framework Apple, představený v iOS 8, který poskytuje mechanismus doručení push oznámení s garantovanou prioritou prostřednictvím trvalého spojení se servery APNs. Na rozdíl od běžných oznámení, která procházejí jediným kanálem APNs a mohou se zpožďovat, PushKit oznámení používají vyhrazený proud s vyšší prioritou, což zajišťuje doručení prakticky v reálném čase.

Technicky PushKit funguje prostřednictvím trvalého TCP spojení mezi zařízením a push servery Apple. Když server odešle VoIP oznámení, spojení jej okamžitě předá zařízení, které probudí aplikaci a zavolá delegáta PKPushRegistry. Aplikace nemusí být v aktivním stavu — PushKit ji může probudit z pozadí, ukončeného stavu nebo dokonce po restartu zařízení.

Podle výzkumu Microsoft Research (2024) o zpožděních push oznámení na mobilních platformách je mediánní zpoždění PushKit oznámení 120–350 ms, zatímco standardní APNs oznámení vykazují medián 1–5 sekund. Rozdíl v řádu velikosti je způsoben právě vyhrazeným TCP kanálem a prioritním zpracováním na straně Apple.

Jaké typy oznámení PushKit podporuje

PushKit podporuje čtyři typy: VoIP (pro hovory), Complication (pro data na cifernících watchOS), FileProvider (pro synchronizaci souborů) a PushToTalk (pro funkci vysílačky). Od iOS 13 zůstává pouze typ VoIP široce dostupný pro externí vývojáře. Complication a FileProvider mají úzce specializované použití a jsou omezeny na vlastní ekosystémy Apple.

Typ PushKitÚčelDostupnost
VoIPIndikace příchozích hlasových a video hovorůiOS 8+, App Store
ComplicationAktualizace dat na cifernících Apple WatchwatchOS 6+
FileProviderSignál o nových souborech v File Provider ExtensioniOS 11+, omezeno
PushToTalkFunkce vysílačky v podnikových aplikacíchiOS 16+, omezený přístup

PushKit vs APNs: klíčové rozdíly

APNs (Apple Push Notification service) — univerzální služba doručení push oznámení, která funguje prostřednictvím jednoho kanálu pro všechny aplikace. Apple může při přetížení kanálu APNs oznámení vyrovnávat do vyrovnávací paměti, seskupovat nebo dokonce zahazovat. PushKit naproti tomu používá vyhrazené spojení pro každý typ oznámení a Apple garantuje doručení každého VoIP-push bez vyrovnávání.

Rozdíl se projevuje v časově kritických scénářích: příchozí hovor doručený prostřednictvím APNs může přijít se zpožděním 10–30 sekund nebo vůbec nepřijít, pokud je zařízení v režimu úspory energie. PushKit doručí stejné oznámení za 100–500 ms bez ohledu na stav zařízení, protože jeho TCP kanál je systémem udržován aktivní prioritním způsobem.

Porovnání charakteristik

ParametrPushKitAPNs
Typ spojeníTrvalé TCP (vyhrazený kanál)Společný kanál s vyrovnávací pamětí
Mediánní zpoždění120–350 ms1–5 sekund
Probuzení aplikaceVždy, z jakéhokoli stavuPouze pokud aplikace není ukončena
Velikost payloaduAž 5 KBAž 4 KB
Seskupování iOSNeAno

Architektura PushKit: PKPushRegistry a PKPushPayload

Architektura PushKit je postavena kolem PKPushRegistry — objektu, který registruje aplikaci pro příjem oznámení určitého typu. Aplikace vytvoří instanci PKPushRegistry, určí požadovaný typ (např. PKPushTypeVoIP) a přiřadí delegáta. Po registraci systém automaticky udržuje spojení s APNs a doručuje push oznámení prostřednictvím delegáta.

Každé oznámení je reprezentováno objektem PKPushPayload, který obsahuje slovník dictionaryPayload s daty ze serveru. Velikost payloadu je omezena na 5 KB, což je dostatečné pro přenos metadat hovoru: identifikátor volajícího, typ hovoru (audio/video), jméno kontaktu a token relace. Mediální proud je přenášen samostatně prostřednictvím WebRTC nebo jiného protokolu reálného času.

Registrace PKPushRegistry

swift
import PushKit

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

Příjem a zpracování push oznámení

PushKit zavolá delegátskou metodu při přijetí oznámení. V tuto chvíli musí aplikace extrahovat data z dictionaryPayload a okamžitě zobrazit hovor prostřednictvím CallKit, jinak systém může ukončit úlohu na pozadí. Apple doporučuje dokončit zpracování do 30 sekund, ale pro VoIP hovory je kritické zobrazit obrazovku hovoru před uplynutím první sekundy.

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

Omezení iOS 13 a pravidla používání PushKit

S vydáním iOS 13 zavedla Apple přísná omezení na používání PushKit. Vývojáři masivně používali VoIP-push jako skrytý mechanismus pro aktualizaci aplikací na pozadí — probuzení prostřednictvím PushKit umožňovalo načítání obsahu, synchronizaci dat a aktualizaci rozhraní bez výslovného souhlasu uživatele. Apple to považovalo za porušení konceptu úspory energie a omezilo PushKit pouze na indikaci příchozích hovorů.

Nyní každé PushKit oznámení musí okamžitě vést k zobrazení příchozího hovoru prostřednictvím CallKit. Pokud systém zjistí, že PushKit je používán k jiným účelům — například pro synchronizaci na pozadí nebo aktualizaci obsahu bez zobrazení hovoru — aplikace může být při moderování odmítnuta nebo odpojena od služby PushKit. Apple také odstranila možnost používat PushKit pro aktualizaci dat na pozadí od iOS 13.

Doporučení Apple pro používání PushKit (iOS 13+)

  • Každé VoIP oznámení musí zavolat reportNewIncomingCall do 5 sekund po obdržení push
  • Nepoužívejte PushKit pro pingy, synchronizaci obsahu nebo aktualizaci tokenů — k tomu slouží background fetch
  • Serverová strana by měla odesílat push pouze při skutečném příchozím hovoru, ne pro předběžné probuzení
  • Při obdržení push bez následného hovoru uživatel uvidí zmeškaný hovor v Recents — to je dezorientující

Integrace PushKit ve Swift

Plná integrace PushKit zahrnuje registraci, získání push tokenu a zpracování příchozích oznámení. PushKit nezávisle žádá o povolení k odesílání oznámení — další volání UNUserNotificationCenter není pro samotný PushKit nutné, ale může být potřebné pro lokální oznámení aplikace. Po registraci systém zavolá metodu pushRegistry:didUpdatePushCredentials pro předání push tokenu, který musí být odeslán na 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)")
    }
}

Odeslání push oznámení ze serveru

Serverová strana odešle PushKit oznámení prostřednictvím APNs s push-type = voip a hlavičkou apns-push-type: voip. Na rozdíl od běžných APNs, VoIP-push používá vlastní certifikát a nevyžaduje konfiguraci topic. Payload by měl obsahovat minimální data pro identifikaci hovoru.

json
// Παράδειγμα payload VoIP push
{
    "aps": {
        "alert": {}
    },
    "caller": "+15551234567",
    "callerName": "Alice Johnson",
    "sessionId": "abc-123-def",
    "hasVideo": false
}

Diagnostika a ladění PushKit oznámení

Ladění PushKit je obtížnější než standardních APNs, protože PushKit nefunguje na iOS simulátoru. Pro diagnostiku je potřebné fyzické iPhone nebo iPad. Prvním příznakem správné funkce je volání pushRegistry:didUpdatePushCredentials při spuštění a objevení push tokenu specifického formátu (64 hex znaků pro VoIP). Pokud delegát není volán, zkontrolujte entitlements své aplikace.

Dalším častým problémem je, že PushKit nedoručuje oznámení po aktualizaci aplikace. K tomu dochází, pokud se změnil push token, ale server nadále používá starý. Řešením je odeslání nového tokenu na server při spuštění aplikace a odstranění neplatných tokenů při volání pushRegistry:didInvalidatePushTokenForType. Apple také doporučuje implementovat záložní mechanismus prostřednictvím běžných APNs.

Typické problémy a jejich řešení

ProblémPříčinaŘešení
didUpdatePushCredentials není volánoChybící entitlements nebo špatný typZkontrolujte Capabilities → Push Notifications + VoIP v Xcode
Push přichází se zpožděnímZařízení v režimu Low Power Mode nebo slabý signálPushKit nemůže obejít hardwarová omezení
Oznámení nepřicházejí po restartuZměna push tokenu po přeinstalování aplikaceVyžádejte nový token a aktualizujte jej na serveru
App Store odmítnuto kvůli PushKitPushKit není používán pro hovoryUjistěte se, že každý push vede k reportNewIncomingCall

Často kladené otázky

Lze používat PushKit bez CallKit?

Technicky ano, ale postrádá to smysl. Od iOS 13 je jediným povoleným použitím PushKit indikace příchozích hovorů, která vyžaduje CallKit pro zobrazení. Používání PushKit bez CallKit povede k odmítnutí aplikace v App Store.

Jaká je maximální velikost PushKit payloadu?

Maximální velikost payloadu pro PushKit je 5 KB (5120 bajtů). To je o 1 KB více než běžná APNs oznámení, což umožňuje přenést více metadat o hovoru.

Co se stane, když smažu aplikaci s PushKit?

Apple automaticky zneplatní push token při smazání aplikace. Server obdrží oznámení o zneplatnění a musí zastavit odesílání push na tento token. Pokus o odeslání push na neplatný token způsobí chybu APNs 410.

Funguje PushKit na macOS?

PushKit je k dispozici na macOS 10.14+ pro Mac aplikace vytvořené s Mac Catalyst nebo AppKit. Funkcionalita je zcela analogická verzi pro iOS, včetně podpory VoIP oznámení.

Jak zkontrolovat, zda je PushKit spojení aktivní?

Použijte vlastní analýzu: sledujte čas mezi odesláním push ze serveru a voláním didReceiveIncomingPushWithPayload na klientovi. Průměrný čas pod 500 ms indikuje správnou funkci PushKit.

Shrnutí

  • PushKit — framework Apple pro doručení push oznámení s vysokou prioritou, využívající trvalé TCP spojení a zajišťující zpoždění pod 500 ms.
  • PKPushRegistry registruje aplikaci pro příjem oznámení určitého typu — VoIP, Complication, FileProvider nebo PushToTalk.
  • Od iOS 13 je jediným povoleným použitím PushKit indikace příchozích hovorů prostřednictvím CallKit; aktualizace dat na pozadí prostřednictvím PushKit je zakázána.
  • Rozdíl od APNs — vyhrazený TCP kanál bez vyrovnávací paměti a garantované probuzení aplikace z jakéhokoli stavu.
  • Payload omezen na 5 KB; každý VoIP-push musí zavolat reportNewIncomingCall do 5 sekund.
  • Diagnostika PushKit vyžaduje fyzické zařízení — simulátor není podporován; token musí být aktualizován při každém spuštění.
  • PushKit + CallKit — standardní kombinace pro VoIP aplikace: PushKit doručí oznámení, CallKit zobrazí systémovou obrazovku hovoru.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης