PushKit — ano ito, framework ng push notification para sa VoIP

May-akda: IT Sectr Nai-publish: 2026-06-16 Oras ng pagbabasa: 8 min

Ang PushKit ay isang framework ng Apple para sa paghahatid ng mga push notification na may garantisadong agarang paghahatid, pangunahing nilalayon para sa mga VoIP application. Hindi tulad ng karaniwang APNs (Apple Push Notification service) na maaaring maantala o mapangkat, ang PushKit ay gumagamit ng permanenteng TCP connection sa pagitan ng device at mga server ng Apple. Ayon sa Apple Developer Documentation, 2026, tinitiyak ng PushKit ang pagkaantala ng paghahatid na mas mababa sa 500 millisecond, na kritikal para sa mga real-time na application — mga tawag sa boses at video.

Mga Pangunahing Punto

  • PushKit — framework ng paghahatid ng push notification na may mataas na priyoridad para sa mga uri ng VoIP, Location at FileProvider.
  • PKPushRegistry — pangunahing klase para sa pagrerehistro ng mga uri ng notification at pagtanggap ng mga papasok na push message.
  • VoIP-push — ang tanging pinahihintulutang uri ng paggamit ng PushKit mula noong iOS 13, na tinitiyak ang agarang indikasyon ng mga papasok na tawag.
  • Permanenteng TCP connection — ang teknikal na batayan ng PushKit, na ginagarantiyahan ang paghahatid nang walang mga pagkaantala na katangian ng APNs.
  • Pares sa CallKit — inihahatid ng PushKit ang notification, ipinapakita ng CallKit ang system call screen, na nagbibigay ng pare-parehong karanasan ng user.

Ano ang PushKit at paano ito gumagana?

PushKit ay isang framework ng Apple, ipinakilala sa iOS 8, na nagbibigay ng mekanismo ng paghahatid ng mga push notification na may garantisadong priyoridad sa pamamagitan ng permanenteng koneksyon sa mga server ng APNs. Hindi tulad ng mga ordinaryong notification na dumadaan sa iisang APNs channel at maaaring maantala, ang mga PushKit notification ay gumagamit ng nakalaang stream na may mas mataas na priyoridad, na tinitiyak ang paghahatid halos sa real-time.

Teknikal, gumagana ang PushKit sa pamamagitan ng permanenteng TCP connection sa pagitan ng device at ng mga push server ng Apple. Kapag nagpadala ang server ng VoIP notification, agad itong ipinapadala ng koneksyon sa device, na gumigising sa application at tumatawag sa delegate ng PKPushRegistry. Ang application ay hindi kailangang nasa aktibong estado — maaari itong gisingin ng PushKit mula sa background, terminated na estado, o kahit pagkatapos ng pag-restart ng device.

Ayon sa pananaliksik ng Microsoft Research (2024) tungkol sa mga pagkaantala ng push notification sa mga mobile platform, ang median na pagkaantala ng PushKit notification ay 120–350 ms, habang ang karaniwang APNs notification ay nagpapakita ng median na 1–5 segundo. Ang pagkakaiba sa order ng magnitude ay ipinaliwanag mismo ng nakalaang TCP channel at prayoridad na pagproseso sa panig ng Apple.

Anong mga uri ng notification ang sinusuportahan ng PushKit

Sinusuportahan ng PushKit ang apat na uri: VoIP (para sa mga tawag), Complication (para sa data sa mga watch face ng watchOS), FileProvider (para sa pag-sync ng file) at PushToTalk (para sa function ng walkie-talkie). Mula noong iOS 13, ang VoIP na uri lamang ang nananatiling malawak na magagamit para sa mga third-party na developer. Ang Complication at FileProvider ay may makitid na espesyalisadong aplikasyon at limitado sa sariling ecosystem ng Apple.

Uri ng PushKitLayuninPagkakaroon
VoIPIndikasyon ng mga papasok na tawag sa boses at videoiOS 8+, App Store
ComplicationPag-update ng data sa mga watch face ng Apple WatchwatchOS 6+
FileProviderSignal tungkol sa mga bagong file sa File Provider ExtensioniOS 11+, limitado
PushToTalkFunction ng walkie-talkie sa mga corporate applicationiOS 16+, limitadong access

PushKit vs APNs: mga pangunahing pagkakaiba

APNs (Apple Push Notification service) — unibersal na serbisyo ng paghahatid ng push notification na gumagana sa pamamagitan ng iisang channel para sa lahat ng application. Maaaring i-buffer, pagsama-samahin, o kahit itapon ng Apple ang mga APNs notification kapag overload ang channel. Ang PushKit, sa kabaligtaran, ay gumagamit ng nakalaang koneksyon para sa bawat uri ng notification, at ginagarantiyahan ng Apple ang paghahatid ng bawat VoIP-push nang walang buffering.

Ang pagkakaiba ay makikita sa mga sitwasyong kritikal sa oras: ang isang papasok na tawag na inihatid sa pamamagitan ng APNs ay maaaring dumating na may 10–30 segundong pagkaantala o hindi dumating kung ang device ay nasa power saving mode. PushKit ay naghahatid ng parehong notification sa loob ng 100–500 ms anuman ang estado ng device, dahil ang TCP channel nito ay pinananatiling aktibo ng system sa prayoridad na paraan.

Paghahambing ng mga katangian

ParameterPushKitAPNs
Uri ng koneksyonPermanenteng TCP (nakalaang channel)Karaniwang channel na may buffering
Median na pagkaantala120–350 ms1–5 segundo
Paggising ng applicationPalagi, mula sa anumang estadoLamang kung ang app ay hindi pinatay
Sukat ng payloadHanggang 5 KBHanggang 4 KB
Pagpapangkat ng iOSHindiOo

Arkitektura ng PushKit: PKPushRegistry at PKPushPayload

Ang arkitektura ng PushKit ay binuo sa paligid ng PKPushRegistry — isang bagay na nagrerehistro sa application para sa pagtanggap ng mga notification ng isang partikular na uri. Gumagawa ang application ng instance ng PKPushRegistry, tinutukoy ang nais na uri (halimbawa, PKPushTypeVoIP) at nagtatalaga ng delegate. Pagkatapos ng pagrerehistro, awtomatikong pinapanatili ng system ang koneksyon sa APNs at naghahatid ng mga push notification sa pamamagitan ng delegate.

Ang bawat notification ay kinakatawan ng isang bagay na PKPushPayload, na naglalaman ng dictionaryPayload na diksyunaryo na may data mula sa server. Ang laki ng payload ay limitado sa 5 KB, sapat para sa paglipat ng metadata ng tawag: identifier ng tumatawag, uri ng tawag (audio/video), pangalan ng contact, at token ng session. Ang media stream ay ipinapadala nang hiwalay sa pamamagitan ng WebRTC o iba pang real-time na protocol.

Pagrerehistro ng PKPushRegistry

swift
import PushKit

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

Pagtanggap at pagproseso ng push notification

PushKit ay tumatawag sa delegate method kapag nakatanggap ng notification. Sa sandaling ito, dapat kunin ng application ang data mula sa dictionaryPayload at agad na ipakita ang tawag sa pamamagitan ng CallKit, kung hindi, maaaring tapusin ng system ang background task. Inirerekomenda ng Apple na kumpletuhin ang pagproseso sa loob ng 30 segundo, ngunit para sa mga tawag sa VoIP, kritikal na ipakita ang call screen bago matapos ang unang segundo.

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

Mga limitasyon ng iOS 13 at mga patakaran ng paggamit ng PushKit

Sa paglabas ng iOS 13, nagpatupad ang Apple ng mahigpit na limitasyon sa paggamit ng PushKit. Maramihang ginamit ng mga developer ang VoIP-push bilang nakatagong mekanismo para sa pag-update ng mga application sa background — ang paggising sa pamamagitan ng PushKit ay nagpapahintulot sa pag-load ng content, pag-sync ng data, at pag-update ng interface nang walang tahasang pahintulot ng user. Itinuring ito ng Apple bilang paglabag sa konsepto ng pagtitipid ng enerhiya at nilimitahan ang PushKit sa indikasyon lamang ng mga papasok na tawag.

Ngayon bawat PushKit notification ay dapat agad na humantong sa pagpapakita ng isang papasok na tawag sa pamamagitan ng CallKit. Kung matuklasan ng system na ang PushKit ay ginagamit para sa iba pang layunin — halimbawa, para sa background synchronization o pag-update ng content nang hindi nagpapakita ng tawag — ang application ay maaaring tanggihan sa moderasyon o maalis sa serbisyo ng PushKit. Apple din ay tinanggal ang kakayahang gumamit ng PushKit para sa pag-update ng data sa background mula noong iOS 13.

Mga rekomendasyon ng Apple para sa paggamit ng PushKit (iOS 13+)

  • Bawat VoIP notification ay dapat tumawag ng reportNewIncomingCall sa loob ng 5 segundo pagkatapos matanggap ang push
  • Huwag gumamit ng PushKit para sa ping, pag-sync ng content, o pag-update ng token — para diyan ay may background fetch
  • Ang panig ng server ay dapat magpadala ng push lamang kapag may tunay na papasok na tawag, hindi para sa paunang paggising
  • Kapag nakatanggap ng push nang walang kasunod na tawag, makikita ng user ang isang hindi nasagot na tawag sa Recents — ito ay nakakalito

Integrasyon ng PushKit sa Swift

Ang kumpletong integrasyon ng PushKit ay kinabibilangan ng pagrerehistro, pagkuha ng push token, at pagproseso ng mga papasok na notification. PushKit ay independiyenteng humihingi ng pahintulot sa pagpapadala ng mga notification — dagdag na tawag ng UNUserNotificationCenter ay hindi kinakailangan para sa PushKit mismo, ngunit maaaring kailanganin para sa lokal na notification ng application. Pagkatapos ng pagrerehistro, tinatawag ng system ang method na pushRegistry:didUpdatePushCredentials para ilipat ang push token, na dapat ipadala sa 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)")
    }
}

Pagpapadala ng push notification mula sa server

Ang panig ng server ay nagpapadala ng PushKit notification sa pamamagitan ng APNs na may push-type = voip at header na apns-push-type: voip. Hindi tulad ng karaniwang APNs, ang VoIP-push ay gumagamit ng sariling certificate at hindi nangangailangan ng pag-configure ng topic. Ang payload ay dapat naglalaman ng minimal na data para sa pagkakakilanlan ng tawag.

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

Diagnostika at pag-debug ng mga notification ng PushKit

Ang pag-debug ng PushKit ay mas mahirap kaysa sa karaniwang APNs, dahil PushKit ay hindi gumagana sa iOS simulator. Para sa diagnostika kailangan ng pisikal na iPhone o iPad. Ang unang tanda ng tamang paggana ay ang pagtawag sa pushRegistry:didUpdatePushCredentials sa startup at ang paglitaw ng push token na may partikular na format (64 hex character para sa VoIP). Kung hindi tinatawag ang delegate, suriin ang entitlements ng iyong application.

Ang isa pang karaniwang problema ay ang PushKit ay hindi naghahatid ng mga notification pagkatapos ng pag-update ng application. Ito ay nangyayari kung ang push token ay nagbago, ngunit ang server ay patuloy na gumagamit ng luma. Ang solusyon ay magpadala ng bagong token sa server sa startup ng application at tanggalin ang mga hindi wastong token kapag tinawag ang pushRegistry:didInvalidatePushTokenForType. Inirerekomenda din ng Apple na magpatupad ng fallback mechanism sa pamamagitan ng ordinaryong APNs.

Mga karaniwang problema at kanilang solusyon

ProblemaDahilanSolusyon
Hindi tinatawag ang didUpdatePushCredentialsKulang ng entitlements o maling uriSuriin ang Capabilities → Push Notifications + VoIP sa Xcode
Push ay dumarating nang may pagkaantalaDevice sa Low Power Mode o mahinang signalHindi maaaring lampasan ng PushKit ang mga limitasyon ng hardware
Hindi dumarating ang mga notification pagkatapos ng restartPagbabago ng push token pagkatapos ng muling pag-install ng appHumingi ng bagong token at i-update ito sa server
App Store tinanggihan dahil sa PushKitHindi ginagamit ang PushKit para sa mga tawagTiyakin na ang bawat push ay humahantong sa reportNewIncomingCall

Mga Madalas Itanong

Maaari bang gamitin ang PushKit nang walang CallKit?

Teknikal na oo, ngunit walang saysay. Mula noong iOS 13, ang tanging pinahihintulutang aplikasyon ng PushKit ay ang indikasyon ng mga papasok na tawag, na nangangailangan ng CallKit para sa pagpapakita. Ang paggamit ng PushKit nang walang CallKit ay hahantong sa pagtanggi ng application sa App Store.

Ano ang maximum na sukat ng PushKit payload?

Ang maximum na sukat ng payload para sa PushKit ay 5 KB (5120 byte). Ito ay 1 KB na mas malaki kaysa sa karaniwang APNs notification, na nagpapahintulot sa pagpapadala ng mas maraming metadata tungkol sa tawag.

Ano ang mangyayari kung tanggalin ko ang app na may PushKit?

Awtomatikong i-invalidate ng Apple ang push token kapag tinanggal ang application. Ang server ay makakatanggap ng abiso ng invalidation at dapat huminto sa pagpapadala ng push sa token na ito. Ang pagtatangkang magpadala ng push sa hindi wastong token ay magdudulot ng error na APNs 410.

Gumagana ba ang PushKit sa macOS?

Ang PushKit ay available sa macOS 10.14+ para sa mga Mac application na ginawa gamit ang Mac Catalyst o AppKit. Ang functionality ay ganap na kahalintulad sa iOS na bersyon, kabilang ang suporta para sa VoIP notification.

Paano suriin kung aktibo ang PushKit connection?

Gamitin ang iyong sariling analytics: subaybayan ang oras sa pagitan ng pagpapadala ng push mula sa server at pagtawag sa didReceiveIncomingPushWithPayload sa client. Ang average na oras na mas mababa sa 500 ms ay nagpapahiwatig ng tamang paggana ng PushKit.

Buod

  • PushKit — framework ng Apple para sa paghahatid ng mga push notification na may mataas na priyoridad, gamit ang permanenteng TCP connection at tinitiyak ang pagkaantala na mas mababa sa 500 ms.
  • PKPushRegistry ay nagrerehistro ng application para sa pagtanggap ng mga notification ng isang partikular na uri — VoIP, Complication, FileProvider o PushToTalk.
  • Mula noong iOS 13 ang tanging pinahihintulutang aplikasyon ng PushKit ay indikasyon ng mga papasok na tawag sa pamamagitan ng CallKit; ang pag-update ng data sa background sa pamamagitan ng PushKit ay ipinagbabawal.
  • Pagkakaiba mula sa APNs — nakalaang TCP channel nang walang buffering at garantisadong paggising ng application mula sa anumang estado.
  • Payload ay limitado sa 5 KB; bawat VoIP-push ay dapat tumawag ng reportNewIncomingCall sa loob ng 5 segundo.
  • Diagnostika ng PushKit ay nangangailangan ng pisikal na device — ang simulator ay hindi suportado; ang token ay dapat i-update sa bawat startup.
  • PushKit + CallKit — karaniwang kombinasyon para sa VoIP application: inihahatid ng PushKit ang notification, ipinapakita ng CallKit ang system call screen.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din