PushKit — mi ez, iOS VoIP értesítési keretrendszer

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

A PushKit egy iOS keretrendszer a VoIP értesítések alacsony késleltetésű kézbesítésére, megkerülve a szabványos APNs-t. A Apple Developer Documentation (2025) szerint a PushKit garantálja a hívások kézbesítését 5 másodpercen belül, még háttérben is. A VoIP értesítések közvetlenül feldolgozásra kerülnek, anélkül, hogy egy banner jelenne meg a felhasználónak, ami a keretrendszert az üzenetküldők és videóalkalmazások alapvető eszközévé teszi iOS-en.

Főbb pontok

  • PushKit — iOS keretrendszer VoIP értesítések kézbesítésére prioritással és alacsony késleltetéssel.
  • Az értesítések banner megjelenítése nélkül kerülnek feldolgozásra — az alkalmazás a háttérben ébred fel a hívás feldolgozásához.
  • Regisztráció a PKPushRegistry-n keresztül történik pushType .voIP típussal.
  • Különbség az APNs-től — a PushKit nem használ szabványos értesítési csatornát és magasabb prioritással rendelkezik.
  • Korlátozások — a PushKit csak VoIP-re szolgál, és nem használható szokásos push értesítésekhez.

Mi az a PushKit

A PushKit egy Apple által kifejlesztett keretrendszer, amely az iOS 8-ban került bemutatásra, és alacsony késleltetésű push értesítések kézbesítését biztosítja VoIP alkalmazások számára. Ellentétben a szabványos APNs-sel (Apple Push Notification service), a PushKit lehetővé teszi az alkalmazás számára, hogy a háttérben felébredjen egy bejövő hívás fogadásakor, anélkül, hogy értesítést jelenítene meg a felhasználónak. Ez kritikus fontosságú a hang- és videóalkalmazások számára — a felhasználó azonnal megkapja a hívást, még akkor is, ha az alkalmazás bezárt. Az Apple WWDC 2024 szerint a PushKit világszerte több mint 2 milliárd VoIP értesítést dolgoz fel naponta.

Hogyan működik a PushKit

A működési mechanizmus az eszköz és az Apple push szerver közötti közvetlen kapcsolaton alapul, megkerülve a szabványos értesítési csatornát. Amikor az alkalmazásszerver VoIP értesítést küld, az egy dedikált PushKit szerveren halad keresztül, és maximális prioritással kerül kézbesítésre az eszközre. A rendszer felébreszti az alkalmazást a háttérben, és meghívja a pushRegistry:didReceiveIncomingPushWithPayload:forType: delegált metódust. Az alkalmazás megkapja a payload-ot, feldolgozza a hívást, és meghívja a completion handler-t a megerősítéshez. A teljes ciklus a küldéstől a feldolgozásig legfeljebb 5 másodpercig tart, amit az Apple specifikáció is megerősít.

Különbségek a PushKit és APNs között

A fő különbség a PushKit és az APNs között a kézbesítési mechanizmusban és a feldolgozásban rejlik. Az APNs a szabványos értesítési csatornát használja banner, hang vagy jelvény megjelenítésével, míg a PushKit az adatokat közvetlenül az alkalmazásba juttatja vizuális értesítés nélkül. Az alábbi táblázat a legfontosabb jellemzőket hasonlítja össze.

JellemzőPushKitAPNs
Kézbesítés prioritásaMagas (azonnali kézbesítés)Közepes (lehetséges késés)
Alkalmazás ébresztéseIgen, háttérbenCsak az értesítésre kattintva
Banner megjelenítéseNemIgen (opcionális)
HasználatVoIP, hívások, videóBármilyen típusú értesítés
PayloadCsak JSON, média nélkülJSON + mellékletek

A PushKit nem támogatja a gazdag médiamellékleteket sem, és nem használható szokásos marketing értesítésekhez. Az Apple szigorúan ellenőrzi a PushKit használatát — az alkalmazásnak egyértelmű VoIP funkcióval kell rendelkeznie, ellenkező esetben elutasításra kerül a felülvizsgálat során. Az APNs univerzális megoldás marad az összes többi forgatókönyvhöz.

Regisztráció és VoIP értesítések fogadása

A PushKit használatához az alkalmazásnak regisztrálnia kell a PKPushRegistry segítségével pushType .voIP típussal. A regisztráció egyszer történik az első indításkor, ezután a rendszer létrehoz egy egyedi push token-t, és azt a delegált segítségével továbbítja. Ezt a token-t elküldik az alkalmazásszerverre a későbbi VoIP értesítések küldéséhez. Az alábbi példa a PushKit regisztrációt és a token lekérését mutatja Swift-ben.

PushKit regisztráció beállítása

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

A desiredPushTypes PKPushType.voIP-vel történő meghívása után a rendszer automatikusan engedélyt kér a VoIP értesítések fogadásához. A pushRegistry:didUpdatePushCredentials:forType: metódusban az alkalmazás Data formátumban kapja meg az eszköz token-t, amely hex-string-gé alakításra kerül, majd elküldésre a szerverre. A token minden eszközre egyedi, és az alkalmazás újratelepítésekor megváltozik — a szervernek kezelnie kell a token frissítését.

Bejövő értesítés fogadása

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

A didReceiveIncomingPushWith metódusban az alkalmazás megkapja a payload-ot a hívás adataival. A hívó adatainak kinyerése után egy CXCallUpdate jön létre a CallKit keretrendszerből a bejövő hívás képernyőjének megjelenítéséhez. Fontos meghívni a completion handler-t a feldolgozás befejezése után — különben a rendszer időtúllépés miatt kényszerítetten befejezheti az alkalmazás folyamatát. A maximális feldolgozási idő 30 másodperc, ezt követően az iOS az értesítést feldolgozatlannak tekinti.

Bejövő hívások kezelése CallKit segítségével

A PushKit szorosan integrált a CallKit keretrendszerrel — amely a hívások rendszerfelületének megjelenítésére szolgál iOS-en. Amikor az alkalmazás VoIP értesítést kap a PushKit-en keresztül, létre kell hoznia egy CXProvider-t és CXCallController-t a hívás kezeléséhez. A CallKit automatikusan megjeleníti a bejövő hívás képernyőjét a zárolási képernyőn, még akkor is, ha az alkalmazás minimalizálva van. Az alábbi példa a CallKit provider beállítását mutatja.

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)

A CXProviderConfiguration határozza meg a hívás képernyőjének megjelenését és viselkedését — az alkalmazás nevét, a videó támogatást, az egyidejű hívások számát. A PushKit CallKit integrációja kötelező a VoIP alkalmazások számára: enélkül a rendszer nem jeleníti meg a bejövő hívás képernyőjét, és a felhasználó elmulasztja a hívást. Az Apple előírja a CallKit használatát minden PushKit-t használó alkalmazás számára.

Funkciók és korlátozások

A PushKit használata számos szigorú korlátozást von maga után, amelyeket az Apple határozott meg. A keretrendszer kizárólag VoIP funkciókhoz használható — bármilyen marketing értesítés PushKit-en keresztül történő küldése az alkalmazás blokkolásához vezet. A payload mérete nem haladhatja meg a 4 KB-ot, és csak JSON adatokat tartalmazhat mellékletek nélkül. Az iOS 13-tól kezdve az Apple korlátozta a VoIP értesítések küldésének gyakoriságát — legfeljebb egy értesítés percenként eszközönként. A szervernek be kell tartania ezt a korlátozást, különben az értesítéseket a rendszer elutasítja. A PushKit nem működik az iOS szimulátoron sem — a tesztelés csak fizikai eszközön lehetséges.

A PushKit payload felépítése

A VoIP értesítés payload-ja egy JSON szótár egyedi hívásadatokkal. Az APNs-sel ellentétben a PushKit nem támogatja a szabványos alert, badge és sound mezőket — az összes adatot a fejlesztő határozza meg. A tipikus felépítés tartalmazza a hívó azonosítóját (caller), a hívás típusát (voice vagy video), a szoba vagy munkamenet azonosítóját és egy időbélyeget. Minden mező méretének minimálisnak kell lennie a 4 KB-os korlátban való helytakarékosság érdekében. Az Apple azt javasolja, hogy csak a bejövő hívás képernyőjének zárolási képernyőn történő megjelenítéséhez szükséges adatokat tartalmazza a payload, a többi információt (avatár, csevegési előzmények) pedig a felhasználó válasza után külön hálózati kéréssel töltse be. Példa minimális payload-ra: { „caller”: „Anna”, „caller_id”: „+79161234567”, „type”: „audio”, „room”: „uuid-room-1234”, „ts”: 1718534400 }. A payload összes kulcsának rövidnek, egyértelműnek és szerver oldalon dokumentáltnak kell lennie az alkalmazásverziók közötti kompatibilitás érdekében.

Hibakezelés és újrapróbálkozások

A PushKit használatakor gondoskodni kell a kézbesítési hibák és a kapcsolat megszakadásának kezeléséről. Ha az eszköz offline módban van vagy le van választva a hálózatról, a VoIP értesítés nem kerül kézbesítésre — a PushKit nem támogatja az értesítések tárolását és újraküldését, ellentétben az APNs-sel, amely akár 24 óráig tárolja az értesítést az újrapróbálkozáshoz. A szervernek magának kell nyomon követnie a kézbesítetlen értesítéseket, és újra kell próbálkoznia a kapcsolat helyreállítása után. Ehhez a push kit feedback service mechanizmus használható — ez visszaadja a kézbesítetlen értesítések listáját a hiba okának megjelölésével. Ajánlott beállítani a VoIP értesítések kézbesítési sikerességének nyomon követését szerveranalitika segítségével, és értesíteni a fejlesztőt, ha a sikeres kézbesítések aránya 95% alá csökken. A PushKit rendszer csak aktív internetkapcsolat esetén garantálja a kézbesítést — ennek hiányában az értesítés visszavonhatatlanul elveszik, amit kritikus figyelembe venni a garantált kézbesítésű megbízható VoIP hívórendszer tervezésekor.

Gyakran Ismételt Kérdések

Mi az a PushKit?

A PushKit egy Apple keretrendszer a VoIP értesítések alacsony késleltetésű kézbesítésére, amely lehetővé teszi az alkalmazás számára, hogy a háttérben felébredjen egy bejövő hívás alkalmával banner megjelenítése nélkül. Üzenetküldőkben és videóalkalmazásokban használatos.

Miben különbözik a PushKit az APNs-től?

A PushKit magasabb kézbesítési prioritással rendelkezik, és a háttérben ébreszti fel az alkalmazást anélkül, hogy értesítést jelenítene meg a felhasználónak. Az APNs bannerrel jeleníti meg az értesítéseket, és nem tudja felébreszteni az alkalmazást a hívás feldolgozásához felhasználói interakció nélkül.

Kötelező a CallKit használata a PushKit mellett?

Igen, az Apple előírja a PushKit CallKit integrációját a bejövő hívás rendszerképernyőjének megjelenítéséhez. CallKit nélkül az alkalmazás nem tudja megjeleníteni a bejövő hívást a zárolási képernyőn, ami használhatatlanná teszi a VoIP funkciót.

Hogyan lehet PushKit token-t szerezni?

A token a PKPushRegistry .voIP típussal történő létrehozása és a pushRegistry:didUpdatePushCredentials:forType: delegált implementálása után szerezhető meg. A token Data formátumban kerül továbbításra, és hex-string-gé kell alakítani a szerverre küldéshez.

Milyen payload méretkorlátozások vannak a PushKit-ben?

A PushKit maximális payload mérete 4 KB. Az adatoknak JSON formátumban kell lenniük. A médiamellékletek nem támogatottak. iOS 13-tól kezdve eszközönként percenként legfeljebb egy VoIP értesítés küldhető.

Összefoglalás

  • PushKit — iOS keretrendszer VoIP értesítések alacsony késleltetésű kézbesítésére, az APNs megkerülésével.
  • A kézbesítés prioritása magasabb a PushKit-ben, mint az APNs-ben — az értesítés 5 másodpercen belül megérkezik.
  • Az alkalmazás a háttérben ébred fel az értesítés fogadásakor, banner megjelenítése nélkül.
  • A regisztráció a PKPushRegistry segítségével történik PKPushType.voIP és PKPushRegistryDelegate delegált segítségével.
  • A CallKit kötelező a bejövő hívás rendszerképernyőjének megjelenítéséhez iOS-en.
  • A payload 4 KB-ra korlátozott, csak JSON, legfeljebb egy értesítés percenként iOS 13-tól.
  • Ajánlás — a PushKit-t csak VoIP funkciókhoz használja, más értesítésekhez az APNs-t alkalmazza.

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