PushKit — co to je, framework VoIP oznámení pro iOS

Autor: IT Sectr Publikováno: 2026-03-22 Doba čtení: 8 min

PushKit je iOS framework pro doručování VoIP oznámení s nízkou latencí, který obchází standardní APNs. Podle Apple Developer Documentation (2025) PushKit zaručuje doručení hovorů do 5 sekund i na pozadí. VoIP oznámení jsou zpracovávána přímo, bez nutnosti zobrazovat uživateli banner, což činí tento framework základním nástrojem pro messengery a videokonferenční aplikace na iOS.

Hlavní body

  • PushKit — iOS framework pro doručování VoIP oznámení s prioritou a nízkou latencí.
  • Oznámení jsou zpracovávána bez zobrazení banneru — aplikace se probudí na pozadí pro zpracování hovoru.
  • Registrace se provádí pomocí PKPushRegistry s typem pushType .voIP.
  • Rozdíl od APNs — PushKit nepoužívá standardní kanál oznámení a má vyšší prioritu.
  • Omezení — PushKit je určen pouze pro VoIP a nelze jej použít pro běžná push oznámení.

Co je PushKit

PushKit je framework od Apple, představený v iOS 8, který zajišťuje doručování push oznámení s nízkou latencí pro VoIP aplikace. Na rozdíl od standardního APNs (Apple Push Notification service) umožňuje PushKit aplikaci probudit se na pozadí při příchozím hovoru, aniž by uživateli zobrazoval oznámení. To je klíčové pro hlasové a video aplikace — uživatel obdrží hovor okamžitě, i když je aplikace zavřená. Podle Apple WWDC 2024 zpracovává PushKit denně více než 2 miliardy VoIP oznámení po celém světě.

Jak PushKit funguje

Mechanismus fungování je založen na přímém spojení mezi zařízením a push serverem Apple, které obchází standardní kanál oznámení. Když server aplikace odešle VoIP oznámení, prochází přes vyhrazený PushKit server a je doručeno na zařízení s maximální prioritou. Systém probudí aplikaci na pozadí a zavolá metodu delegáta pushRegistry:didReceiveIncomingPushWithPayload:forType:. Aplikace obdrží payload, zpracuje hovor a zavolá completion handler pro potvrzení. Celý cyklus od odeslání po zpracování trvá nejvýše 5 sekund, což je potvrzeno specifikací Apple.

Rozdíly mezi PushKit a APNs

Hlavní rozdíl mezi PushKit a APNs spočívá v mechanismu doručování a zpracování. APNs používá standardní kanál oznámení se zobrazením banneru, zvuku nebo odznaku, zatímco PushKit doručuje data přímo do aplikace bez vizuálního oznámení. Níže je srovnávací tabulka klíčových vlastností.

VlastnostPushKitAPNs
Priorita doručeníVysoká (okamžité doručení)Střední (možné zpoždění)
Probuzení aplikaceAno, na pozadíPouze při kliknutí na oznámení
Zobrazení banneruNeAno (volitelné)
PoužitíVoIP, hovory, videokonferenceJakékoliv typy oznámení
PayloadPouze JSON, bez médiíJSON + přílohy

PushKit také nepodporuje bohaté mediální přílohy a nelze jej použít pro běžná marketingová oznámení. Apple přísně kontroluje použití PushKit — aplikace musí mít explicitní VoIP funkcionalitu, jinak bude zamítnuta při review. APNs zůstává univerzálním řešením pro všechny ostatní scénáře.

Registrace a příjem VoIP oznámení

Pro použití PushKit se musí aplikace zaregistrovat pomocí PKPushRegistry s typem pushType .voIP. Registrace probíhá jednou při prvním spuštění, poté systém vygeneruje jedinečný push token a předá jej prostřednictvím delegáta. Tento token je odeslán na server aplikace pro následné odesílání VoIP oznámení. Níže je příklad registrace PushKit a získání tokenu ve Swiftu.

Nastavení PushKit registrace

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

Po zavolání desiredPushTypes s PKPushType.voIP systém automaticky požádá o povolení přijímat VoIP oznámení. V metodě pushRegistry:didUpdatePushCredentials:forType: aplikace obdrží device token jako Data, který je převeden na hex-řetězec a odeslán na server. Token je jedinečný pro každé zařízení a mění se při přeinstalaci aplikace — server musí zpracovávat aktualizaci tokenu.

Příjem příchozího oznámení

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

V metodě didReceiveIncomingPushWith aplikace obdrží payload s daty hovoru. Po extrahování informací o volajícím je vytvořen CXCallUpdate z frameworku CallKit pro zobrazení obrazovky příchozího hovoru. Je důležité zavolat completion handler po dokončení zpracování — jinak může systém kvůli vypršení času násilně ukončit proces aplikace. Maximální doba zpracování je 30 sekund, po které iOS považuje oznámení za nezpracované.

Zpracování příchozích hovorů s CallKit

PushKit je úzce integrován s CallKit — frameworkem pro zobrazení systémového rozhraní hovorů na iOS. Když aplikace obdrží VoIP oznámení přes PushKit, musí vytvořit CXProvider a CXCallController pro správu hovoru. CallKit automaticky zobrazí obrazovku příchozího hovoru na uzamčené obrazovce, i když je aplikace minimalizovaná. Níže je příklad konfigurace poskytovatele 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 definuje vzhled a chování obrazovky hovoru — název aplikace, podporu videa, počet současných hovorů. Integrace PushKit s CallKit je povinná pro VoIP aplikace: bez ní systém nezobrazí obrazovku příchozího hovoru a uživatel hovor zmešká. Apple vyžaduje použití CallKit pro všechny aplikace používající PushKit.

Funkce a omezení

Použití PushKit ukládá řadu přísných omezení stanovených Apple. Framework lze použít pouze pro VoIP funkcionalitu — jakýkoli pokus o odeslání marketingových oznámení přes PushKit povede k zablokování aplikace. Velikost payloadu nesmí překročit 4 KB a může obsahovat pouze JSON data bez příloh. Počínaje iOS 13 zavedla Apple omezení frekvence odesílání VoIP oznámení — nejvýše jedno oznámení za minutu na zařízení. Server musí toto omezení dodržovat, jinak budou oznámení systémem odmítnuta. PushKit také nefunguje na iOS simulátoru — testování je možné pouze na fyzickém zařízení.

Struktura PushKit payloadu

Payload VoIP oznámení je JSON slovník s vlastními daty o hovoru. Na rozdíl od APNs PushKit nepodporuje standardní pole alert, badge a sound — všechna data definuje vývojář. Typická struktura zahrnuje identifikátor volajícího (caller), typ hovoru (voice nebo video), identifikátor místnosti nebo relace a časové razítko. Velikost každého pole by měla být minimální pro úsporu místa v limitu 4 KB. Apple doporučuje zahrnout do payloadu pouze data nezbytná pro zobrazení obrazovky příchozího hovoru na uzamčené obrazovce a zbývající informace (avatar, historii konverzace) načítat po přijetí hovoru uživatelem samostatným síťovým požadavkem. Příklad minimálního payloadu: { „caller”: „Anna”, „caller_id”: „+79161234567”, „type”: „audio”, „room”: „uuid-room-1234”, „ts”: 1718534400 }. Všechny klíče v payloadu by měly být krátké, jednoznačné a zdokumentované na straně serveru pro kompatibilitu mezi verzemi aplikace.

Zpracování chyb a opakované pokusy

Při práci s PushKit je třeba předvídat zpracování chyb doručení a ztráty připojení. Pokud je zařízení offline nebo odpojené od sítě, VoIP oznámení nebude doručeno — PushKit nepodporuje ukládání a opětovné odesílání, na rozdíl od APNs, které ukládá oznámení až na 24 hodin pro opakovaný pokus. Server musí sám sledovat nedoručená oznámení a opakovat pokus po obnovení připojení. K tomu se používá mechanismus push kit feedback service — vrací seznam nedoručených oznámení s uvedením příčiny chyby. Doporučuje se nastavit monitorování úspěšnosti doručení VoIP oznámení pomocí serverové analytiky a upozornit vývojáře, když procento úspěšných doručení klesne pod 95 %. Systém PushKit zaručuje doručení pouze při aktivním internetovém připojení na zařízení — při jeho absenci je oznámení nenávratně ztraceno, což je kritické vzít v úvahu při navrhování spolehlivého systému VoIP hovorů se zaručeným doručením.

Často kladené otázky

Co je PushKit?

PushKit je Apple framework pro doručování VoIP oznámení s nízkou latencí, který umožňuje aplikaci probudit se na pozadí při příchozím hovoru bez zobrazení banneru. Používá se v messengerech a video aplikacích.

Čím se PushKit liší od APNs?

PushKit má vyšší prioritu doručení a probouzí aplikaci na pozadí, aniž by uživateli zobrazoval oznámení. APNs doručuje oznámení s bannerem a nemůže probudit aplikaci pro zpracování hovoru bez interakce uživatele.

Je použití CallKit s PushKit povinné?

Ano, Apple vyžaduje integraci PushKit s CallKit pro zobrazení systémové obrazovky příchozího hovoru. Bez CallKit aplikace nezobrazí příchozí hovor na uzamčené obrazovce, což činí VoIP funkcionalitu nepoužitelnou.

Jak získat PushKit token?

Token získáte po vytvoření PKPushRegistry s typem .voIP a implementaci delegáta pushRegistry:didUpdatePushCredentials:forType:. Token je předán jako Data a musí být převeden na hex-řetězec pro odeslání na server.

Jaká jsou omezení velikosti payloadu v PushKit?

Maximální velikost payloadu pro PushKit je 4 KB. Data musí být ve formátu JSON. Mediální přílohy nejsou podporovány. Od iOS 13 platí omezení nejvýše jednoho VoIP oznámení za minutu na zařízení.

Shrnutí

  • PushKit — iOS framework pro doručování VoIP oznámení s nízkou latencí, obcházející APNs.
  • Priorita doručení PushKit je vyšší než APNs — oznámení dorazí do 5 sekund.
  • Aplikace se probouzí na pozadí při příjmu oznámení, bez banneru uživateli.
  • Registrace se provádí pomocí PKPushRegistry s PKPushType.voIP a delegátem PKPushRegistryDelegate.
  • CallKit je povinný pro zobrazení systémové obrazovky příchozího hovoru na iOS.
  • Payload omezen na 4 KB, pouze JSON, nejvýše jedno oznámení za minutu od iOS 13.
  • Doporučení — používejte PushKit pouze pro VoIP funkcionalitu, pro ostatní oznámení aplikujte APNs.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také