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
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.
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.
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ő | PushKit | APNs |
|---|---|---|
| Kézbesítés prioritása | Magas (azonnali kézbesítés) | Közepes (lehetséges késés) |
| Alkalmazás ébresztése | Igen, háttérben | Csak az értesítésre kattintva |
| Banner megjelenítése | Nem | Igen (opcionális) |
| Használat | VoIP, hívások, videó | Bármilyen típusú értesítés |
| Payload | Csak JSON, média nélkül | JSON + 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.
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.
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.
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.
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.
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.
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 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.
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
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.
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.
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.
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.
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
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.
Olvassa el is