PushKit — bu Apple-ning kafolatlangan zudlik bilan yetkazib berish bilan push bildirishnomalarini yetkazib berish uchun freymvorki bo'lib, birinchi navbatda VoIP ilovalari uchun mo'ljallangan. Kechikishi yoki guruhlanishi mumkin bo'lgan standart APNs (Apple Push Notification service) dan farqli o'laroq, PushKit qurilma va Apple serverlari o'rtasida doimiy TCP ulanishidan foydalanadi. Apple Developer Documentation, 2026 ma'lumotlariga ko'ra, PushKit 500 millisekunddan kam yetkazib berish kechikishini ta'minlaydi, bu real vaqt ilovalari — ovozli va video qo'ng'iroqlar uchun juda muhimdir.
Asosiy ma'lumotlar
PushKit — iOS 8 da taqdim etilgan Apple freymvorki bo'lib, APNs serverlari bilan doimiy ulanish orqali kafolatlangan prioritet bilan push bildirishnomalarini yetkazib berish mexanizmini ta'minlaydi. Yagona APNs kanalidan o'tadigan va kechikishi mumkin bo'lgan oddiy bildirishnomalardan farqli o'laroq, PushKit bildirishnomalari yuqori prioritetli ajratilgan oqimdan foydalanadi, bu esa yetkazib berishni deyarli real vaqtda ta'minlaydi.
Texnik jihatdan, PushKit qurilma va Apple push serverlari o'rtasida doimiy TCP ulanishi orqali ishlaydi. Server VoIP bildirishnomasini yuborganda, ulanish uni zudlik bilan qurilmaga uzatadi, u ilovani uyg'otadi va PKPushRegistry delegatini chaqiradi. Ilova faol holatda bo'lishi shart emas — PushKit uni fondan, tugatilgan holatdan va hatto qurilma qayta ishga tushirilgandan keyin ham uyg'otishi mumkin.
Microsoft Research (2024) tomonidan mobil platformalarda push bildirishnoma kechikishlari bo'yicha tadqiqotga ko'ra, PushKit bildirishnomalarining median kechikishi 120–350 ms ni tashkil qiladi, standart APNs bildirishnomalari esa 1–5 soniya medianni ko'rsatadi. Kattalik tartibidagi farq aynan ajratilgan TCP kanali va Apple tomonidan prioritet ishlov berish bilan izohlanadi.
PushKit to'rt turni qo'llab-quvvatlaydi: VoIP (qo'ng'iroqlar uchun), Complication (watchOS siferblatlari uchun ma'lumotlar), FileProvider (fayllarni sinxronlash uchun) va PushToTalk (ratsiya funksiyasi uchun). iOS 13 dan boshlab, faqat VoIP turi uchinchi tomon ishlab chiqaruvchilari uchun keng foydalanish mumkin bo'lib qoladi. Complication va FileProvider tor ixtisoslashtirilgan qo'llanilishga ega va Apple ning o'z ekotizimlari bilan cheklangan.
| PushKit turi | Maqsadi | Mavjudligi |
|---|---|---|
| VoIP | Kiruvchi ovozli va video qo'ng'iroqlarni ko'rsatish | iOS 8+, App Store |
| Complication | Apple Watch siferblatlarida ma'lumotlarni yangilash | watchOS 6+ |
| FileProvider | File Provider Extension da yangi fayllar haqida signal | iOS 11+, cheklangan |
| PushToTalk | Korporativ ilovalarda ratsiya funksiyasi | iOS 16+, cheklangan kirish |
APNs (Apple Push Notification service) — barcha ilovalar uchun yagona kanal orqali ishlaydigan universal push bildirishnomalarini yetkazib berish xizmati. Apple kanalning haddan tashqari yuklanishi vaqtida APNs bildirishnomalarini buferlashi, guruhlashi yoki hatto tashlab yuborishi mumkin. PushKit, aksincha, har bir bildirishnoma turi uchun ajratilgan ulanishdan foydalanadi va Apple har bir VoIP-push ni buferlashsiz yetkazib berishni kafolatlaydi.
Farq vaqt jihatidan muhim stsenariylarda namoyon bo'ladi: APNs orqali yetkazilgan kiruvchi qo'ng'iroq 10–30 soniya kechikish bilan kelishi mumkin yoki qurilma energiya tejash rejimida bo'lsa, umuman kelmasligi mumkin. PushKit xuddi shu bildirishnomani 100–500 ms ichida yetkazib beradi, qurilma holatidan qat'iy nazar, chunki uning TCP kanali tizim tomonidan prioritet tartibida faol saqlanadi.
| Parametr | PushKit | APNs |
|---|---|---|
| Ulanish turi | Doimiy TCP (ajratilgan kanal) | Buferlash bilan umumiy kanal |
| Median kechikish | 120–350 ms | 1–5 soniya |
| Ilovani uyg'otish | Har doim, istalgan holatdan | Faqat ilova o'chirilmagan bo'lsa |
| Payload hajmi | 5 KB gacha | 4 KB gacha |
| iOS guruhlash | Yo'q | Ha |
PushKit arxitekturasi PKPushRegistry atrofida qurilgan — bu ilovani ma'lum turdagi bildirishnomalarni olish uchun ro'yxatdan o'tkazadigan ob'ekt. Ilova PKPushRegistry namunasini yaratadi, kerakli turni (masalan, PKPushTypeVoIP) ko'rsatadi va delegatni tayinlaydi. Ro'yxatdan o'tkazilgandan so'ng, tizim avtomatik ravishda APNs bilan ulanishni saqlaydi va delegat orqali push bildirishnomalarini yetkazib beradi.
Har bir bildirishnoma serverdan ma'lumotlarga ega dictionaryPayload lug'atini o'z ichiga olgan PKPushPayload ob'ekti bilan ifodalanadi. Payload hajmi 5 KB bilan cheklangan, bu qo'ng'iroq metama'lumotlarini uzatish uchun etarli: qo'ng'iroq qiluvchining identifikatori, qo'ng'iroq turi (audio/video), kontakt nomi va sessiya tokeni. Media oqimi alohida WebRTC yoki boshqa real vaqt protokoli orqali uzatiladi.
import PushKit
class PushKitManager: NSObject {
private let pushRegistry = PKPushRegistry(queue: .main)
func configure() {
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]
}
}
PushKit bildirishnoma olinganda delegat usulini chaqiradi. Shu paytda ilova dictionaryPayload dan ma'lumotlarni ajratib olishi va zudlik bilan CallKit orqali qo'ng'iroqni ko'rsatishi kerak, aks holda tizim fon topshirig'ini tugatishi mumkin. Apple ishlov berishni 30 soniya ichida tugatishni tavsiya qiladi, ammo VoIP qo'ng'iroqlari uchun birinchi soniya tugashidan oldin qo'ng'iroq ekranini ko'rsatish juda muhimdir.
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
)
}
}
iOS 13 ning chiqarilishi bilan Apple PushKit dan foydalanishga qat'iy cheklovlar kiritdi. Ishlab chiqaruvchilar VoIP-push dan ilovalarni fonda yangilash uchun yashirin mexanizm sifatida ommaviy foydalanishdi — PushKit orqali uyg'otish foydalanuvchining aniq ruxsatisiz kontentni yuklash, ma'lumotlarni sinxronlash va interfeysni yangilash imkonini berdi. Apple buni energiya tejash kontseptsiyasining buzilishi deb hisobladi va PushKit ni faqat kiruvchi qo'ng'iroqlarni ko'rsatish bilan chekladi.
Endi har bir PushKit bildirishnomasi zudlik bilan CallKit orqali kiruvchi qo'ng'iroqni ko'rsatishga olib kelishi kerak. Agar tizim PushKit boshqa maqsadlarda ishlatilayotganini aniqlasa — masalan, fon sinxronlash yoki qo'ng'iroqni ko'rsatmasdan kontentni yangilash uchun — ilova moderatsiyada rad etilishi yoki PushKit xizmatidan uzilishi mumkin. Apple iOS 13 dan boshlab fonda ma'lumotlarni yangilash uchun PushKit dan foydalanish imkoniyatini ham olib tashladi.
To'liq PushKit integratsiyasi ro'yxatdan o'tkazish, push tokenini olish va kiruvchi bildirishnomalarni qayta ishlashni o'z ichiga oladi. PushKit mustaqil ravishda bildirishnomalarni yuborishga ruxsat so'raydi — PushKit ning o'zi uchun qo'shimcha UNUserNotificationCenter chaqiruvi talab qilinmaydi, lekin ilovaning mahalliy bildirishnomalari uchun kerak bo'lishi mumkin. Ro'yxatdan o'tkazilgandan so'ng, tizim push tokenini uzatish uchun pushRegistry:didUpdatePushCredentials usulini chaqiradi, bu token serveryuborilishi kerak.
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)")
}
}
Server tomoni PushKit bildirishnomasini APNs orqali push-type = voip va apns-push-type: voip sarlavhasi bilan yuboradi. Oddiy APNs dan farqli o'laroq, VoIP-push o'z sertifikatidan foydalanadi va topic sozlamasini talab qilmaydi. Payload qo'ng'iroqni identifikatsiya qilish uchun minimal ma'lumotlarni o'z ichiga olishi kerak.
// VoIP push payload namunasi
{
"aps": {
"alert": {}
},
"caller": "+15551234567",
"callerName": "Alice Johnson",
"sessionId": "abc-123-def",
"hasVideo": false
}
PushKit ni sozlash standart APNs ga qaraganda qiyinroq, chunki PushKit iOS simulyatorida ishlamaydi. Diagnostika uchun fizik iPhone yoki iPad kerak. To'g'ri ishlashning birinchi belgisi ishga tushirishda pushRegistry:didUpdatePushCredentials ning chaqirilishi va ma'lum formatdagi push tokenining (VoIP uchun 64 hex belgisi) paydo bo'lishidir. Agar delegat chaqirilmasa, ilovangizning entitlements larini tekshiring.
Yana bir tez-tez uchraydigan muammo — PushKit ilova yangilanganidan keyin bildirishnomalarni yetkazib bermaydi. Bu push tokeni o'zgargan, ammo server eskisini ishlatishda davom etayotgan bo'lsa sodir bo'ladi. Yechim — ilova ishga tushirilganda serverga yangi token yuborish va pushRegistry:didInvalidatePushTokenForType chaqirilganda yaroqsiz tokenlarni o'chirish. Apple oddiy APNs orqali fallback mexanizmini amalga oshirishni ham tavsiya qiladi.
| Muammo | Sabab | Yechim |
|---|---|---|
| didUpdatePushCredentials chaqirilmaydi | Entitlements yo'q yoki noto'g'ri tur | Xcode da Capabilities → Push Notifications + VoIP ni tekshiring |
| Push kechikish bilan keladi | Qurilma Low Power Mode da yoki zaif signal | PushKit apparat cheklovlarini chetlab o'ta olmaydi |
| Qayta ishga tushirgandan keyin bildirishnomalar kelmaydi | Ilovani qayta o'rnatishdan keyin push tokenining o'zgarishi | Yangi token so'rang va serveryangilang |
| App Store PushKit sababli rad etildi | PushKit qo'ng'iroqlar uchun ishlatilmayapti | Har bir push reportNewIncomingCall ga olib kelishiga ishonch hosil qiling |
Ko'p beriladigan savollar
Texnik jihatdan ha, lekin ma'nosiz. iOS 13 dan boshlab, PushKit ning yagona ruxsat etilgan qo'llanilishi kiruvchi qo'ng'iroqlarni ko'rsatishdir, bu CallKit ni talab qiladi. PushKit ni CallKit siz ishlatish App Store da ilovaning rad etilishiga olib keladi.
PushKit uchun payload ning maksimal hajmi 5 KB (5120 bayt). Bu oddiy APNs bildirishnomalaridan 1 KB ko'p, bu qo'ng'iroq haqida ko'proq metama'lumotlarni uzatish imkonini beradi.
Apple ilova o'chirilganda avtomatik ravishda push tokenini bekor qiladi. Server bekor qilish haqida bildirishnoma oladi va bu tokenga push yuborishni to'xtatishi kerak. Yaroqsiz tokenga push yuborish urinishi APNs 410 xatosiga olib keladi.
PushKit macOS 10.14+ da Mac Catalyst yoki AppKit yordamida yaratilgan Mac ilovalari uchun mavjud. Funksionallik iOS versiyasi bilan to'liq o'xshash, jumladan VoIP bildirishnomalarini qo'llab-quvvatlash.
O'z analitikangizdan foydalaning: serverdan push yuborish va mijozda didReceiveIncomingPushWithPayload chaqirilishi orasidagi vaqtni kuzating. O'rtacha vaqt 500 ms dan kam bo'lsa, PushKit ning to'g'ri ishlashini ko'rsatadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.