PushKit standart APNs ni chetlab o'tib, past kechikish bilan VoIP bildirishnomalarini yetkazib berish uchun iOS framework-idir. Apple Developer Documentation (2025) ga ko'ra, PushKit fon rejimida ham qo'ng'iroqlarni 5 soniya ichida yetkazib berishni kafolatlaydi. VoIP bildirishnomalari to'g'ridan-to'g'ri qayta ishlanadi, foydalanuvchiga banner ko'rsatish zaruratisiz, bu framework-ni iOS-da messenjerlar va videoaloqa ilovalari uchun asosiy vositaga aylantiradi.
Asosiy nuqtalar
PushKit — iOS 8 da taqdim etilgan, VoIP ilovalari uchun past kechikish bilan push bildirishnomalarini yetkazib berishni ta'minlaydigan Apple framework-i. Standart APNs (Apple Push Notification service) dan farqli o'laroq, PushKit ilovaga kiruvchi qo'ng'iroqni qabul qilganda foydalanuvchiga bildirishnoma ko'rsatmasdan fonda uyg'onishga imkon beradi. Bu ovozli va video aloqa ilovalari uchun juda muhim — foydalanuvchi ilova yopiq bo'lsa ham qo'ng'iroqni darhol oladi. Apple WWDC 2024 ma'lumotlariga ko'ra, PushKit kunlik dunyo bo'ylab 2 milliarddan ortiq VoIP bildirishnomalarini qayta ishlaydi.
Ish mexanizmi qurilma va Apple push serveri o'rtasidagi to'g'ridan-to'g'ri ulanishga asoslangan bo'lib, standart bildirishnoma kanalini chetlab o'tadi. Ilova serveri VoIP bildirishnomasini yuborganda, u maxsus PushKit serveridan o'tadi va maksimal ustuvorlik bilan qurilmaga yetkaziladi. Tizim ilovani fonda uyg'otadi va pushRegistry:didReceiveIncomingPushWithPayload:forType: delegat metodini chaqiradi. Ilova yuklamani oladi, qo'ng'iroqni qayta ishlaydi va tasdiqlash uchun completion handler-ni chaqiradi. Yuborishdan qayta ishlashgacha bo'lgan butun sikl 5 soniyadan ko'p davom etmaydi, bu Apple spetsifikatsiyasi bilan tasdiqlangan.
PushKit va APNs o'rtasidagi asosiy farq yetkazib berish mexanizmida va qayta ishlashda. APNs banner, tovush yoki belgi ko'rsatish bilan standart bildirishnoma kanalidan foydalanadi, PushKit esa ma'lumotlarni vizual bildirishnomasiz to'g'ridan-to'g'ri ilovaga yetkazadi. Quyida asosiy xususiyatlarning taqqoslash jadvali keltirilgan.
| Xususiyat | PushKit | APNs |
|---|---|---|
| Yetkazib berish ustuvorligi | Yuqori (zudlik bilan yetkazish) | O'rta (kechikish mumkin) |
| Ilovani uyg'otish | Ha, fonda | Faqat bildirishnomani bosganda |
| Banner ko'rsatish | Yo'q | Ha (ixtiyoriy) |
| Foydalanish | VoIP, qo'ng'iroqlar, videoaloqa | Har qanday bildirishnoma turlari |
| Yuklama | Faqat JSON, mediasiz | JSON + ilovalar |
PushKit shuningdek boy media ilovalarini qo'llab-quvvatlamaydi va oddiy marketing bildirishnomalari uchun ishlatilmaydi. Apple PushKit dan foydalanishni qattiq nazorat qiladi — ilova aniq VoIP funksionalligiga ega bo'lishi kerak, aks holda ko'rib chiqishda rad etiladi. APNs barcha boshqa stsenariylar uchun universal yechim bo'lib qoladi.
PushKit dan foydalanish uchun ilova PKPushRegistry orqali pushType .voIP turi bilan ro'yxatdan o'tishi kerak. Ro'yxatdan o'tish birinchi ishga tushirishda bir marta amalga oshiriladi, shundan so'ng tizim noyob push token yaratadi va uni delegat orqali uzatadi. Ushbu token keyinchalik VoIP bildirishnomalarini yuborish uchun ilova serveriga yuboriladi. Quyida Swift-da PushKit ro'yxatdan o'tish va token olish namunasi keltirilgan.
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)
}
desiredPushTypes PKPushType.voIP bilan chaqirilgandan so'ng, tizim avtomatik ravishda VoIP bildirishnomalarini olish uchun ruxsat so'raydi. pushRegistry:didUpdatePushCredentials:forType: metodida ilova qurilma tokenini Data shaklida oladi, u hex-string-ga aylantiriladi va serverga yuboriladi. Token har bir qurilma uchun noyobdir va ilova qayta o'rnatilganda o'zgaradi — server token yangilanishini boshqarishi kerak.
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()
}
)
}
didReceiveIncomingPushWith metodida ilova qo'ng'iroq ma'lumotlari bilan yuklamani oladi. Qo'ng'iroq qiluvchi haqidagi ma'lumot chiqarilgandan so'ng, kiruvchi qo'ng'iroq ekranini ko'rsatish uchun CallKit framework-dan CXCallUpdate yaratiladi. Qayta ishlash tugagandan so'ng completion handler-ni chaqirish muhim — aks holda tizim vaqt tugashi sababli ilova jarayonini majburiy tugatishi mumkin. Maksimal qayta ishlash vaqti 30 soniya, shundan so'ng iOS bildirishnomani qayta ishlanmagan deb hisoblaydi.
PushKit CallKit bilan chambarchas integratsiyalashgan — iOS da tizim qo'ng'iroq interfeysini ko'rsatish uchun framework. Ilova PushKit orqali VoIP bildirishnomasini olganda, qo'ng'iroqni boshqarish uchun CXProvider va CXCallController yaratishi kerak. CallKit ilova minimallashtirilgan bo'lsa ham, qulflash ekranida avtomatik ravishda kiruvchi qo'ng'iroq ekranini ko'rsatadi. Quyida CallKit provayderini sozlash namunasi keltirilgan.
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)
CXProviderConfiguration qo'ng'iroq ekranining ko'rinishi va xatti-harakatini belgilaydi — ilova nomi, video qo'llab-quvvatlash, bir vaqtning o'zida qo'ng'iroqlar soni. PushKit ni CallKit bilan integratsiyasi VoIP ilovalari uchun majburiydir: usiz tizim kiruvchi qo'ng'iroq ekranini ko'rsatmaydi va foydalanuvchi qo'ng'iroqni o'tkazib yuboradi. Apple PushKit dan foydalanadigan barcha ilovalar uchun CallKit dan foydalanishni talab qiladi.
PushKit dan foydalanish Apple tomonidan o'rnatilgan bir qator qattiq cheklovlarni yuklaydi. Framework faqat VoIP funksionalligi uchun ishlatilishi mumkin — PushKit orqali marketing bildirishnomalarini yuborishga urinishlar ilovaning bloklanishiga olib keladi. Yuklama hajmi 4 KB dan oshmasligi kerak va faqat JSON ma'lumotlarini o'z ichiga olishi mumkin, ilovalarsiz. iOS 13 dan boshlab, Apple VoIP bildirishnomalarini yuborish chastotasiga cheklov kiritdi — bitta qurilmada daqiqada birdan ortiq bildirishnoma yuborilmaydi. Server bu cheklovga rioya qilishi kerak, aks holda bildirishnomalar tizim tomonidan rad etiladi. PushKit iOS simulyatorida ishlamaydi — sinov faqat jismoniy qurilmada mumkin.
VoIP bildirishnomasi yuklamasi qo'ng'iroq haqidagi maxsus ma'lumotlarga ega JSON lug'atdir. APNs dan farqli o'laroq, PushKit standart alert, badge va sound maydonlarini qo'llab-quvvatlamaydi — barcha ma'lumotlar dasturchi tomonidan belgilanadi. Oddiy tuzilma qo'ng'iroq qiluvchi identifikatori (caller), qo'ng'iroq turi (voice yoki video), xona yoki sessiya identifikatori va vaqt tamg'asini o'z ichiga oladi. 4 KB cheklovida joyni tejash uchun har bir maydonning hajmi minimal bo'lishi kerak. Apple faqat qulflash ekranida kiruvchi qo'ng'iroq ekranini ko'rsatish uchun zarur bo'lgan ma'lumotlarni yuklamaga kiritishni, qolgan ma'lumotlarni (avatar, yozishmalar tarixi) esa foydalanuvchi javob bergandan so'ng alohida tarmoq so'rovi bilan yuklashni tavsiya qiladi. Minimal yuklama namunasi: { “caller”: “Anna”, “caller_id”: “+79161234567”, “type”: “audio”, “room”: “uuid-room-1234”, “ts”: 1718534400 }. Yuklamadagi barcha kalitlar qisqa, aniq va ilova versiyalari o'rtasida moslik uchun server tomonida hujjatlashtirilgan bo'lishi kerak.
PushKit bilan ishlashda yetkazib berish xatolari va ulanish uzilishini boshqarishni ta'minlash kerak. Qurilma oflayn rejimda bo'lsa yoki tarmoqdan uzilgan bo'lsa, VoIP bildirishnomasi yetkazilmaydi — PushKit, APNs dan farqli o'laroq, bildirishnomalarni saqlash va qayta yuborishni qo'llab-quvvatlamaydi (APNs qayta urinish uchun bildirishnomani 24 soatgacha saqlaydi). Server yetkazilmagan bildirishnomalarni o'zi kuzatishi va ulanish tiklanganda qayta urinishi kerak. Buning uchun push kit feedback service mexanizmidan foydalaniladi — u xato sababini ko'rsatuvchi yetkazilmagan bildirishnomalar ro'yxatini qaytaradi. Server analitikasi orqali VoIP bildirishnomalarini yetkazish muvaffaqiyatini kuzatish va muvaffaqiyatli yetkazish foizi 95% dan pastga tushganda dasturchiga xabar berish tavsiya etiladi. PushKit tizimi faqat qurilmada faol internet aloqasi mavjud bo'lganda yetkazishni kafolatlaydi — aloqa bo'lmaganda bildirishnoma qaytarib bo'lmaydigan darajada yo'qoladi, bu kafolatlangan yetkazish bilan ishonchli VoIP qo'ng'iroq tizimini loyihalashda hisobga olinishi kerak.
Ko'p beriladigan savollar
PushKit — past kechikish bilan VoIP bildirishnomalarini yetkazib berish uchun Apple framework-i, ilovaga banner ko'rsatmasdan kiruvchi qo'ng'iroqda fonda uyg'onishga imkon beradi. Messenjerlar va video ilovalarida ishlatiladi.
PushKit yuqoriroq yetkazib berish ustuvorligiga ega va foydalanuvchiga bildirishnoma ko'rsatmasdan ilovani fonda uyg'otadi. APNs banner bilan bildirishnomalarni yetkazadi va foydalanuvchi o'zaro aloqasisiz qo'ng'iroqni boshqarish uchun ilovani uyg'ota olmaydi.
Ha, Apple kiruvchi qo'ng'iroqning tizim ekranini ko'rsatish uchun PushKit ni CallKit bilan integratsiyasini talab qiladi. CallKit siz ilova foydalanuvchiga qulflash ekranida kiruvchi qo'ng'iroqni ko'rsata olmaydi, bu VoIP funksionalligini befoyda qiladi.
Token PKPushRegistry .voIP turi bilan yaratilgandan va pushRegistry:didUpdatePushCredentials:forType: delegati amalga oshirilgandan so'ng olinadi. Token Data sifatida uzatiladi va serverga yuborish uchun hex-string-ga aylantirilishi kerak.
PushKit uchun maksimal yuklama hajmi 4 KB. Ma'lumotlar JSON formatida bo'lishi kerak. Media ilovalari qo'llab-quvvatlanmaydi. iOS 13 dan boshlab, bitta qurilmada daqiqada birdan ortiq VoIP bildirishnomasi yuborilmaydi.
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.