PushKit — bu nima, VoIP uchun push bildirishnomalar freymvorki

Muallif: IT Sectr Nashr etilgan: 2026-06-16 O'qish vaqti: 8 daq

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 — VoIP, Location va FileProvider turlari uchun yuqori prioritetli push bildirishnomalarini yetkazib berish freymvorki.
  • PKPushRegistry — bildirishnoma turlarini ro'yxatdan o'tkazish va kiruvchi push xabarlarini olish uchun asosiy sinf.
  • VoIP-push — iOS 13 dan boshlab PushKit dan foydalanishning yagona ruxsat etilgan turi bo'lib, kiruvchi qo'ng'iroqlarning bir zumda ko'rsatilishini ta'minlaydi.
  • Doimiy TCP ulanishi — APNs ga xos kechikishlarsiz yetkazib berishni kafolatlaydigan PushKit ning texnik asosi.
  • CallKit bilan juftlik — PushKit bildirishnomani yetkazib beradi, CallKit tizim qo'ng'iroq ekranini ko'rsatadi, yagona foydalanuvchi tajribasini ta'minlaydi.

PushKit nima va u qanday ishlaydi?

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 bildirishnomalarning qanday turlarini qo'llab-quvvatlaydi

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 turiMaqsadiMavjudligi
VoIPKiruvchi ovozli va video qo'ng'iroqlarni ko'rsatishiOS 8+, App Store
ComplicationApple Watch siferblatlarida ma'lumotlarni yangilashwatchOS 6+
FileProviderFile Provider Extension da yangi fayllar haqida signaliOS 11+, cheklangan
PushToTalkKorporativ ilovalarda ratsiya funksiyasiiOS 16+, cheklangan kirish

PushKit vs APNs: asosiy farqlar

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.

Xususiyatlarni taqqoslash

ParametrPushKitAPNs
Ulanish turiDoimiy TCP (ajratilgan kanal)Buferlash bilan umumiy kanal
Median kechikish120–350 ms1–5 soniya
Ilovani uyg'otishHar doim, istalgan holatdanFaqat ilova o'chirilmagan bo'lsa
Payload hajmi5 KB gacha4 KB gacha
iOS guruhlashYo'qHa

PushKit arxitekturasi: PKPushRegistry va PKPushPayload

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.

PKPushRegistry ni ro'yxatdan o'tkazish

swift
import PushKit

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

Push bildirishnomasini qabul qilish va qayta ishlash

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.

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

iOS 13 cheklovlari va PushKit dan foydalanish qoidalari

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.

PushKit dan foydalanish bo'yicha Apple tavsiyalari (iOS 13+)

  • Har bir VoIP bildirishnomasi push olinganidan keyin 5 soniya ichida reportNewIncomingCall ni chaqirishi kerak
  • Pinglar, kontent sinxronlash yoki tokenlarni yangilash uchun PushKit dan foydalanmang — buning uchun background fetch mavjud
  • Server tomoni push ni faqat haqiqiy kiruvchi qo'ng'iroq bo'lganda yuborishi kerak, oldindan uyg'otish uchun emas
  • Keyingi qo'ng'iroqsiz push olinganda, foydalanuvchi Recents da o'tkazib yuborilgan qo'ng'iroqni ko'radi — bu chalkashtiradi

Swift da PushKit integratsiyasi

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.

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

Serverdan push bildirishnomasini yuborish

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.

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

PushKit bildirishnomalarini diagnostika qilish va sozlash

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.

Odatiy muammolar va ularning yechimlari

MuammoSababYechim
didUpdatePushCredentials chaqirilmaydiEntitlements yo'q yoki noto'g'ri turXcode da Capabilities → Push Notifications + VoIP ni tekshiring
Push kechikish bilan keladiQurilma Low Power Mode da yoki zaif signalPushKit apparat cheklovlarini chetlab o'ta olmaydi
Qayta ishga tushirgandan keyin bildirishnomalar kelmaydiIlovani qayta o'rnatishdan keyin push tokenining o'zgarishiYangi token so'rang va serveryangilang
App Store PushKit sababli rad etildiPushKit qo'ng'iroqlar uchun ishlatilmayaptiHar bir push reportNewIncomingCall ga olib kelishiga ishonch hosil qiling

Ko'p beriladigan savollar

PushKit ni CallKit siz ishlatish mumkinmi?

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 payload ning maksimal hajmi qancha?

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.

PushKit bilan ilova o'chirilsa nima bo'ladi?

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 da ishlaydimi?

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.

PushKit ulanishi faolligini qanday tekshirish mumkin?

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

  • PushKit — doimiy TCP ulanishidan foydalanadigan va 500 ms dan kam kechikishni ta'minlaydigan yuqori prioritetli push bildirishnomalarini yetkazib berish uchun Apple freymvorki.
  • PKPushRegistry ilovani ma'lum turdagi bildirishnomalarni — VoIP, Complication, FileProvider yoki PushToTalk olish uchun ro'yxatdan o'tkazadi.
  • iOS 13 dan boshlab PushKit ning yagona ruxsat etilgan qo'llanilishi CallKit orqali kiruvchi qo'ng'iroqlarni ko'rsatishdir; PushKit orqali fonda ma'lumotlarni yangilash taqiqlangan.
  • APNs dan farqi — buferlashsiz ajratilgan TCP kanali va istalgan holatdan ilovaning kafolatlangan uyg'otilishi.
  • Payload 5 KB bilan cheklangan; har bir VoIP-push 5 soniya ichida reportNewIncomingCall ni chaqirishi kerak.
  • Diagnostika PushKit fizik qurilmani talab qiladi — simulyator qo'llab-quvvatlanmaydi; token har bir ishga tushirishda yangilanishi kerak.
  • PushKit + CallKit — VoIP ilovalari uchun standart kombinatsiya: PushKit bildirishnomani yetkazib beradi, CallKit tizim qo'ng'iroq ekranini ko'rsatadi.

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.

Loyihani muhokama qilish

Shuningdek o'qing