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 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.
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 PushKit | Layunin | Pagkakaroon |
|---|---|---|
| VoIP | Indikasyon ng mga papasok na tawag sa boses at video | iOS 8+, App Store |
| Complication | Pag-update ng data sa mga watch face ng Apple Watch | watchOS 6+ |
| FileProvider | Signal tungkol sa mga bagong file sa File Provider Extension | iOS 11+, limitado |
| PushToTalk | Function ng walkie-talkie sa mga corporate application | iOS 16+, limitadong access |
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.
| Parameter | PushKit | APNs |
|---|---|---|
| Uri ng koneksyon | Permanenteng TCP (nakalaang channel) | Karaniwang channel na may buffering |
| Median na pagkaantala | 120–350 ms | 1–5 segundo |
| Paggising ng application | Palagi, mula sa anumang estado | Lamang kung ang app ay hindi pinatay |
| Sukat ng payload | Hanggang 5 KB | Hanggang 4 KB |
| Pagpapangkat ng iOS | Hindi | Oo |
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.
import PushKit
class PushKitManager: NSObject {
private let pushRegistry = PKPushRegistry(queue: .main)
func configure() {
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]
}
}
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.
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
)
}
}
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.
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.
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)")
}
}
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.
// Halimbawa ng VoIP push payload
{
"aps": {
"alert": {}
},
"caller": "+15551234567",
"callerName": "Alice Johnson",
"sessionId": "abc-123-def",
"hasVideo": false
}
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.
| Problema | Dahilan | Solusyon |
|---|---|---|
| Hindi tinatawag ang didUpdatePushCredentials | Kulang ng entitlements o maling uri | Suriin ang Capabilities → Push Notifications + VoIP sa Xcode |
| Push ay dumarating nang may pagkaantala | Device sa Low Power Mode o mahinang signal | Hindi maaaring lampasan ng PushKit ang mga limitasyon ng hardware |
| Hindi dumarating ang mga notification pagkatapos ng restart | Pagbabago ng push token pagkatapos ng muling pag-install ng app | Humingi ng bagong token at i-update ito sa server |
| App Store tinanggihan dahil sa PushKit | Hindi ginagamit ang PushKit para sa mga tawag | Tiyakin na ang bawat push ay humahantong sa reportNewIncomingCall |
Mga Madalas Itanong
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.
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.
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.
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.
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
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.
Basahin din