PushKit — mi ez, pushértesítések keretrendszere VoIP-hez

Szerző: IT Sectr Megjelenés: 2026-06-16 Olvasási idő: 8 perc

A PushKit egy Apple keretrendszer a pushértesítések garantált azonnali kézbesítésére, elsősorban VoIP alkalmazások számára. Ellentétben a szabvány APNs-szel (Apple Push Notification service), amely késhet vagy csoportosítható, a PushKit állandó TCP-kapcsolatot használ az eszköz és az Apple szerverei között. Az Apple Developer Documentation, 2026 szerint a PushKit kevesebb mint 500 ezredmásodperc kézbesítési késleltetést biztosít, ami kritikus a valós idejű alkalmazások — hang- és videóhívások számára.

Főbb pontok

  • PushKit — keretrendszer pushértesítések kézbesítésére magas prioritással VoIP, Location és FileProvider típusokhoz.
  • PKPushRegistry — a fő osztály értesítéstípusok regisztrálására és bejövő push üzenetek fogadására.
  • VoIP-push — a PushKit egyetlen engedélyezett használati típusa iOS 13 óta, amely azonnali bejövő hívásjelzést biztosít.
  • Állandó TCP-kapcsolat — a PushKit technikai alapja, amely garantálja a kézbesítést az APNs-re jellemző késések nélkül.
  • Párosítás a CallKitkel — a PushKit kézbesíti az értesítést, a CallKit megjeleníti a rendszerhívás képernyőt, egységes felhasználói élményt biztosítva.

Mi az a PushKit és hogyan működik?

PushKit egy Apple keretrendszer, amelyet iOS 8-ban vezettek be, és amely mechanizmust biztosít a pushértesítések garantált prioritású kézbesítéséhez állandó kapcsolaton keresztül az APNs szerverekkel. Ellentétben a szokásos értesítésekkel, amelyek egyetlen APNs csatornán haladnak át és késhetnek, a PushKit értesítések dedikált folyamot használnak magasabb prioritással, biztosítva a kézbesítést lényegében valós időben.

Technikailag a PushKit állandó TCP-kapcsolaton keresztül működik az eszköz és az Apple push szerverei között. Amikor a szerver VoIP értesítést küld, a kapcsolat azonnal továbbítja azt az eszközre, amely felébreszti az alkalmazást és meghívja a PKPushRegistry delegáltat. Az alkalmazásnak nem kell aktív állapotban lennie — a PushKit felébresztheti azt a háttérből, befejezett állapotból, vagy akár az eszköz újraindítása után is.

A Microsoft Research (2024) mobilos platformokon végzett pushértesítési késleltetésekkel kapcsolatos kutatása szerint a PushKit értesítések medián késleltetése 120–350 ms, míg a szabvány APNs értesítések mediánja 1–5 másodperc. A nagyságrendbeli különbséget pontosan a dedikált TCP csatorna és az Apple oldali prioritásos feldolgozás magyarázza.

Milyen típusú értesítéseket támogat a PushKit

A PushKit négy típust támogat: VoIP (hívásokhoz), Complication (watchOS óralapok adataihoz), FileProvider (fájl szinkronizáláshoz) és PushToTalk (walkie-talkie funkcióhoz). iOS 13 óta csak a VoIP típus maradt széles körben elérhető harmadik fél fejlesztők számára. A Complication és FileProvider szűk specializált alkalmazással rendelkezik, és az Apple saját ökoszisztémáira korlátozódik.

PushKit típusRendeltetésElérhetőség
VoIPBejövő hang- és videóhívások jelzéseiOS 8+, App Store
ComplicationAdatok frissítése az Apple Watch óralapokonwatchOS 6+
FileProviderJelzés új fájlokról a File Provider ExtensionbeniOS 11+, korlátozott
PushToTalkWalkie-talkie funkció vállalati alkalmazásokbaniOS 16+, korlátozott hozzáférés

PushKit vs APNs: fő különbségek

APNs (Apple Push Notification service) — univerzális pushértesítési szolgáltatás, amely egyetlen csatornán keresztül működik minden alkalmazás számára. Az Apple pufferelheti, csoportosíthatja vagy akár el is dobhatja az APNs értesítéseket a csatorna túlterhelésekor. A PushKit ezzel szemben dedikált kapcsolatot használ minden értesítéstípushoz, és az Apple pufferelés nélkül garantálja minden VoIP-push kézbesítését.

A különbség az időkritikus forgatókönyvekben mutatkozik meg: egy APNs-en keresztül kézbesített bejövő hívás 10–30 másodperces késéssel érkezhet, vagy egyáltalán nem érkezik meg, ha az eszköz energiatakarékos módban van. PushKit ugyanazt az értesítést 100–500 ms alatt kézbesíti, függetlenül az eszköz állapotától, mert TCP csatornáját a rendszer prioritásosan tartja aktívan.

Jellemzők összehasonlítása

ParaméterPushKitAPNs
Kapcsolat típusaÁllandó TCP (dedikált csatorna)Közös csatorna puffereléssel
Medián késleltetés120–350 ms1–5 másodperc
Alkalmazás ébresztéseMindig, bármilyen állapotbólCsak ha az alkalmazás nincs leállítva
Payload méretAkár 5 KBAkár 4 KB
iOS csoportosításNemIgen

A PushKit felépítése: PKPushRegistry és PKPushPayload

A PushKit felépítése a PKPushRegistry köré épül — egy objektum, amely regisztrálja az alkalmazást egy adott típusú értesítések fogadására. Az alkalmazás létrehoz egy PKPushRegistry példányt, megadja a kívánt típust (pl. PKPushTypeVoIP) és delegáltat rendel hozzá. A regisztráció után a rendszer automatikusan fenntartja a kapcsolatot az APNs-szel, és a delegálton keresztül kézbesíti a push értesítéseket.

Minden értesítést egy PKPushPayload objektum képvisel, amely dictionaryPayload szótárat tartalmaz a szerver adataival. A payload mérete 5 KB-ra korlátozódik, ami elegendő a hívás metaadatainak továbbításához: a hívó azonosítója, hívás típusa (hang/videó), kapcsolat neve és munkamenet token. A media stream külön kerül továbbításra WebRTC-n vagy más valós idejű protokollon keresztül.

PKPushRegistry regisztrálása

swift
import PushKit

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

Push értesítés fogadása és feldolgozása

PushKit meghívja a delegált metódusát értesítés érkezésekor. Ekkor az alkalmazásnak ki kell nyernie az adatokat a dictionaryPayload-ból, és azonnal meg kell jelenítenie a hívást CallKit-en keresztül, különben a rendszer befejezheti a háttérfeladatot. Az Apple a feldolgozás 30 másodpercen belüli befejezését javasolja, de VoIP hívások esetén kritikus a hívás képernyő megjelenítése az első másodperc lejárta előtt.

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

Az iOS 13 korlátozásai és a PushKit használatának szabályai

Az iOS 13 megjelenésével az Apple szigorú korlátozásokat vezetett be a PushKit használatára. A fejlesztők tömegesen használták a VoIP-push-t rejtett mechanizmusként az alkalmazások háttérben történő frissítésére — a PushKit-en keresztüli ébresztés lehetővé tette tartalom betöltését, adatok szinkronizálását és a felület frissítését a felhasználó kifejezett engedélye nélkül. Az Apple ezt az energiatakarékossági koncepció megsértésének tekintette, és a PushKit-et csak a bejövő hívások jelzésére korlátozta.

Most minden PushKit értesítésnek azonnal egy bejövő hívás CallKit-en keresztüli megjelenítéséhez kell vezetnie. Ha a rendszer észleli, hogy a PushKit-et más célokra használják — például háttérszinkronizálásra vagy tartalomfrissítésre hívás megjelenítése nélkül — az alkalmazást elutasíthatják a moderáció során, vagy leválaszthatják a PushKit szolgáltatásról. Apple azt is eltávolította, hogy a PushKit adatok háttérben történő frissítésére használható legyen iOS 13 óta.

Az Apple ajánlásai a PushKit használatához (iOS 13+)

  • Minden VoIP értesítésnek meg kell hívnia a reportNewIncomingCall-t a push kézhez vétele után 5 másodpercen belül
  • Ne használja a PushKit-et pingekre, tartalom szinkronizálásra vagy token frissítésre — ehhez létezik a background fetch
  • A szerveroldal csak tényleges bejövő hívás esetén küldjön push-t, ne előzetes ébresztéshez
  • Push fogadásakor következő hívás nélkül, a felhasználó egy nem fogadott hívást lát a Recentsben — ez dezorientáló

PushKit integrálása Swiftben

A PushKit teljes integrációja magában foglalja a regisztrációt, a push token megszerzését és a bejövő értesítések feldolgozását. PushKit függetlenül kér engedélyt az értesítések küldéséhez — további UNUserNotificationCenter hívás nem szükséges magához a PushKit-hez, de szükséges lehet az alkalmazás helyi értesítéseihez. A regisztráció után a rendszer meghívja a pushRegistry:didUpdatePushCredentials metódust a push token átadásához, amelyet el kell küldeni a szerverre.

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

Push értesítés küldése a szerverről

A szerveroldal a PushKit értesítést APNs-en keresztül küldi push-type = voip és apns-push-type: voip fejléccel. Ellentétben a szokásos APNs-szel, a VoIP-push saját tanúsítványt használ, és nem igényel topic konfigurációt. A payload-nak minimális adatokat kell tartalmaznia a hívás azonosításához.

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

PushKit értesítések diagnosztizálása és hibakeresése

A PushKit hibakeresése nehezebb, mint a szabvány APNs-é, mert a PushKit nem működik az iOS szimulátoron. A diagnosztikához fizikai iPhone vagy iPad szükséges. A helyes működés első jele a pushRegistry:didUpdatePushCredentials meghívása indításkor és egy meghatározott formátumú push token (64 hex karakter VoIP esetén) megjelenése. Ha a delegált nem hívódik meg, ellenőrizze az alkalmazás entitlements-jeit.

Egy másik gyakori probléma, hogy PushKit nem kézbesíti az értesítéseket az alkalmazás frissítése után. Ez akkor történik, ha a push token megváltozott, de a szerver továbbra is a régit használja. A megoldás az új token elküldése a szerverre az alkalmazás indításakor és az érvénytelen tokenek eltávolítása a pushRegistry:didInvalidatePushTokenForType hívásakor. Az Apple azt is javasolja, hogy valósítsunk meg fallback mechanizmust szokásos APNs-en keresztül.

Tipikus problémák és megoldásaik

ProblémaOkMegoldás
A didUpdatePushCredentials nem hívódikHiányzó entitlements vagy rossz típusEllenőrizze a Capabilities → Push Notifications + VoIP-t Xcode-ban
A push késéssel érkezikEszköz Low Power Mode-ban vagy gyenge jelA PushKit nem kerülheti meg a hardver korlátokat
Értesítések nem érkeznek újraindítás utánPush token változása az alkalmazás újratelepítése utánKérjen új tokent és frissítse a szerveren
App Store elutasította PushKit miattA PushKit-et nem hívásokra használjákGyőződjön meg, hogy minden push reportNewIncomingCall-hez vezet

Gyakran Ismételt Kérdések

Használható a PushKit CallKit nélkül?

Technikailag igen, de értelmetlen. iOS 13 óta a PushKit egyetlen engedélyezett alkalmazása a bejövő hívások jelzése, amihez a CallKit szükséges a megjelenítéshez. A PushKit CallKit nélküli használata az alkalmazás elutasításához vezet az App Store-ban.

Mekkora a PushKit payload maximális mérete?

A PushKit payload maximális mérete 5 KB (5120 bájt). Ez 1 KB-bal több, mint a szokásos APNs értesítéseké, ami lehetővé teszi több metaadat továbbítását a hívásról.

Mi történik, ha törlöm a PushKit-es alkalmazást?

Az Apple automatikusan érvényteleníti a push tokent az alkalmazás törlésekor. A szerver értesítést kap az érvénytelenítésről, és le kell állítania a push küldését erre a tokenre. Az érvénytelen tokenre történő push küldési kísérlet APNs 410 hibát okoz.

Működik a PushKit macOS-en?

A PushKit macOS 10.14+ rendszeren érhető el Mac Catalyst vagy AppKit használatával készült Mac alkalmazások számára. A funkcionalitás teljesen analóg az iOS verzióval, beleértve a VoIP értesítések támogatását.

Hogyan ellenőrizhetem, hogy a PushKit kapcsolat aktív?

Használja saját analitikáját: kövesse a push szerverről történő elküldése és a didReceiveIncomingPushWithPayload ügyfélen történő meghívása közötti időt. Az 500 ms alatti átlagos idő a PushKit helyes működését jelzi.

Összefoglalás

  • PushKit — Apple keretrendszer magas prioritású pushértesítések kézbesítésére, állandó TCP kapcsolatot használva és 500 ms alatti késleltetést biztosítva.
  • PKPushRegistry regisztrálja az alkalmazást egy adott típusú értesítés — VoIP, Complication, FileProvider vagy PushToTalk fogadására.
  • iOS 13 óta a PushKit egyetlen engedélyezett alkalmazása a bejövő hívások jelzése CallKit-en keresztül; adatok háttérben történő frissítése PushKit-en keresztül tiltott.
  • Különbség az APNs-től — dedikált TCP csatorna pufferelés nélkül és garantált alkalmazás ébresztés bármilyen állapotból.
  • Payload 5 KB-ra korlátozva; minden VoIP-push-nak 5 másodpercen belül meg kell hívnia a reportNewIncomingCall-t.
  • Diagnosztika PushKit fizikai eszközt igényel — a szimulátor nem támogatott; a token minden indításkor frissítendő.
  • PushKit + CallKit — a szabvány kombináció VoIP alkalmazásokhoz: a PushKit kézbesíti az értesítést, a CallKit megjeleníti a rendszerhívás képernyőt.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is