PushKit — bu nədir, VoIP üçün push bildiriş çərçivəsi

Müəllif: IT Sectr Dərc olunub: 2026-06-16 Oxuma vaxtı: 8 dəq

PushKit, zəmanətli ani çatdırılma ilə push bildirişlərinin çatdırılması üçün Apple çərçivəsi olub, ilk növbədə VoIP tətbiqləri üçün nəzərdə tutulmuşdur. Gecikə bilən və ya qruplaşdırıla bilən standart APNs-dən (Apple Push Notification service) fərqli olaraq, PushKit cihaz və Apple serverləri arasında daimi TCP əlaqəsindən istifadə edir. Apple Developer Documentation, 2026-ya görə, PushKit 500 millisaniyədən az çatdırılma gecikməsi təmin edir ki, bu da real vaxt tətbiqləri — səs və video zənglər üçün kritik əhəmiyyət daşıyır.

Başlıca

  • PushKit — VoIP, Location və FileProvider növləri üçün yüksək prioritetli push bildiriş çatdırılması çərçivəsi.
  • PKPushRegistry — bildiriş növlərini qeydiyyatdan keçirmək və daxil olan push mesajlarını qəbul etmək üçün əsas sinif.
  • VoIP-push — iOS 13-dən etibarən PushKit-in yegan’a icazə verilən istifadə növü olub, daxil olan zənglərin ani göstəricisini təmin edir.
  • Daimi TCP əlaqəsi — APNs-ə xas gecikmələr olmadan çatdırılmanı təmin edən PushKit-in texniki əsası.
  • CallKit ilə cütlük — PushKit bildiriş çatdırır, CallKit isə sistem zəng ekranını göstərir, vahid istifadəçi təcrübəsi təmin edir.

PushKit nədir və necə işləyir?

PushKit — iOS 8-də təqdim edilmiş Apple çərçivəsi olub, APNs serverləri ilə daimi əlaqə vasitəsilə zəmanətli prioritetlə push bildirişlərinin çatdırılması mexanizmini təmin edir. Vahid APNs kanalından keçən və gecikə bilən adi bildirişlərdən fərqli olaraq, PushKit bildirişləri daha yüksək prioritetlə ayrılmış axından istifadə edir ki, bu da demək olar ki, real vaxt rejimində çatdırılmanı təmin edir.

Texniki cəhətdən PushKit cihaz və Apple push serverləri arasında daimi TCP əlaqəsi vasitəsilə işləyir. Server VoIP bildirişi göndərdikdə, əlaqə dərhal onu cihaza ötürür, bu da tətbiqi oyadır və PKPushRegistry delegatını çağırır. Tətbiq aktiv vəziyyətdə olmamalıdır — PushKit onu fon, dayandırılmış vəziyyətdən və hətta cihaz yenidən başladıldıqdan sonra da oyada bilər.

Microsoft Research (2024)-in mobil platformalarda push bildiriş gecikmələri ilə bağlı araşdırmasına görə, PushKit bildirişlərinin median gecikməsi 120–350 ms təşkil edir, standart APNs bildirişləri isə 1–5 saniyə median göstərir. Böyüklük sırasındakı fərq məhz ayrılmış TCP kanalı və Apple tərəfindən prioritet emal ilə izah olunur.

PushKit hansı bildiriş növlərini dəstəkləyir

PushKit dörd növü dəstəkləyir: VoIP (zənglər üçün), Complication (watchOS siferblatları üçün məlumat), FileProvider (fayl sinxronizasiyası üçün) və PushToTalk (radiotelefon funksiyası üçün). iOS 13-dən etibarən yalnız VoIP növü üçüncü tərəf tərtibatçıları üçün geniş şəkildə əlçatan qalır. Complication və FileProvider dar tətbiq sahəsinə malikdir və Apple-ın öz ekosistemləri ilə məhdudlaşır.

PushKit NövüTəyinatƏlçatanlıq
VoIPDaxil olan səs və video zənglərin göstəricisiiOS 8+, App Store
ComplicationApple Watch siferblatlarında məlumat yenilənməsiwatchOS 6+
FileProviderFile Provider Extension-də yeni fayllar haqqında siqnaliOS 11+, məhdud
PushToTalkKorporativ tətbiqlərdə radiotelefon funksiyasıiOS 16+, məhdud giriş

PushKit vs APNs: əsas fərqlər

APNs (Apple Push Notification service) — bütün tətbiqlər üçün vahid kanal üzərində işləyən universal push bildiriş çatdırılma xidmətidir. Apple kanalın yüklənməsi zamanı APNs bildirişlərini buferləşdirə, qruplaşdıra və ya hətta silə bilər. PushKit isə əksinə, hər bildiriş növü üçün ayrılmış əlaqədən istifadə edir və Apple heç bir buferləşdirmə olmadan hər VoIP-push-un çatdırılmasına zəmanət verir.

Fərq, vaxt baxımından kritik ssenarilərdə özünü göstərir: APNs vasitəsilə çatdırılan daxil olan zəng 10–30 saniyə gecikmə ilə gələ bilər və ya cihaz enerjiyə qənaət rejimindədirsə, ümumiyyətlə gəlməyə bilər. PushKit cihazın vəziyyətindən asılı olmayaraq eyni bildirişi 100–500 ms ərzində çatdırır, çünki onun TCP kanalı sistem tərəfindən prioritet şəkildə aktiv saxlanılır.

Xüsusiyyətlərin müqayisəsi

ParametrPushKitAPNs
Əlaqə növüDaimi TCP (ayrılmış kanal)Buferləşdirmə ilə ümumi kanal
Median gecikmə120–350 ms1–5 saniyə
Tətbiqi oyatmaHəmişə, istənilən vəziyyetdənYalnız tətbiq öldürülməyibsə
Payload ölçüsü5 KB-a qədər4 KB-a qədər
iOS qruplaşdırmasıXeyrBəli

PushKit Arxitekturası: PKPushRegistry və PKPushPayload

PushKit arxitekturası PKPushRegistry ətrafında qurulmuşdur — bu, tətbiqi müəyyən növ bildirişləri üçün qeydiyyatdan keçirən obyektdir. Tətbiq PKPushRegistry nümunəsi yaradır, istənilən növü (məsələn, PKPushTypeVoIP) göstərir və delegat təyin edir. Qeydiyyatdan sonra sistem avtomatik olaraq APNs ilə əlaqəni saxlayır və delegat vasitəsilə push bildirişlərini çatdırır.

Hər bir bildiriş serverdən məlumatları olan dictionaryPayload lüğətini ehtiva edən PKPushPayload obyekti ilə təmsil olunur. Payload ölçüsü 5 KB ilə məhduddur ki, bu da zəng metadatasının ötürülməsi üçün kifayətdir: zəng edənin identifikatoru, zəng növü (audio/video), əlaqə adı və sessiya tokeni. Media axını ayrıca WebRTC və ya digər real vaxt protokolu vasitəsilə ötürülür.

PKPushRegistry qeydiyyatı

swift
import PushKit

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

Push bildirişinin qəbulu və emalı

PushKit bildiriş alındıqda delegat metodunu çağırır. Bu anda tətbiq dictionaryPayload-dən məlumatları çıxarmalı və dərhal CallKit vasitəsilə zəngi göstərməlidir, əks halda sistem fon tapşırığını başlaya bilər. Apple emalı 30 saniyə ərzində tamamlamağı tövsiyə edir, lakin VoIP zəngləri üçün ilk saniyə bitməmiş zəng ekranını göstərmək kritikdir.

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 Məhdudiyyətləri və PushKit istifadə qaydaları

iOS 13-ün buraxılması ilə Apple PushKit istifadəsinə ciddi məhdudiyyətlər tətbiq etdi. Tərtibatçılar VoIP-push-dan tətbiqlərin fon yenilənməsi üçün gizli mexanizm kimi kütləvi istifadə edirdilər — PushKit vasitəsilə oyatma məzmun yükləməyə, məlumat sinxronizasiyasına və istifadəçinin açıq icazəsi olmadan interfeysin yenilənməsinə imkan verirdi. Apple bunu enerjiyə qənaət konsepsiyasının pozulması hesab etdi və PushKit-i yalnız daxil olan zənglərin göstəricisi ilə məhdudlaşdırdı.

Artıq hər bir PushKit bildirişi dərhal CallKit vasitəsilə daxil olan zəngin göstərilməsinə səbəb olmalıdır. Sistem PushKit-in digər məqsədlər üçün istifadə edildiyini aşkarlasa — məsələn, fon sinxronizasiyası və ya zəng göstərmədən məzmun yenilənməsi — tətbiq moderasiyada rədd edilə və ya PushKit xidmətindən ayrıla bilər. Apple həmçinin iOS 13-dən etibarən fon məlumat yenilənməsi üçün PushKit-dən istifadə imkanını silib.

PushKit istifadəsi üçün Apple tövsiyələri (iOS 13+)

  • Hər bir VoIP bildirişi push qəbulundan sonra 5 saniyə ərzində reportNewIncomingCall çağırmalıdır
  • Pinglər, məzmun sinxronizasiyası və ya token yenilənməsi üçün PushKit-dən istifadə etməyin — bunun üçün background fetch var
  • Server tərəfi push-u yalnız real daxil olan zəng olduqda göndərməli, ilkin oyatma üçün yox
  • Sonradan zəng olmadan push qəbul edildikdə, istifadəçi Recents-də buraxılmış zəng görəcək — bu, oryantasiyanı pozur

Swift-də PushKit inteqrasiyası

Tam PushKit inteqrasiyası qeydiyyat, push tokeninin əldə edilməsi və daxil olan bildirişlərin emalını əhatə edir. PushKit bildiriş göndərməyə icazəni müstəqil olaraq tələb edir — PushKit-in özü üçün əlavə UNUserNotificationCenter çağırışı tələb olunmur, lakin tətbiqin yerli bildirişləri üçün lazım ola bilər. Qeydiyyatdan sonra sistem pushRegistry:didUpdatePushCredentials metodunu çağıraraq push tokenini ötürür, bu token serverə göndərilməlidir.

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

Serverdən push bildirişinin göndərilməsi

Server tərəfi PushKit bildirişini APNs vasitəsilə push-type = voip və apns-push-type: voip başlığı ilə göndərir. Adi APNs-dən fərqli olaraq, VoIP-push öz sertifikatından istifadə edir və topic konfiqurasiyası tələb etmir. Payload zəngin identifikasiyası üçün minimal məlumatları ehtiva etməlidir.

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

PushKit bildirişlərinin diaqnostikası və sazlanması

PushKit sazlanması standart APNs-dən daha çətindir, çünki PushKit iOS simulyatorunda işləmir. Diaqnostika üçün fiziki iPhone və ya iPad lazımdır. Düzgün işin ilk əlaməti başlatma zamanı pushRegistry:didUpdatePushCredentials-in çağırılması və müəyyən formatda push tokeninin (VoIP üçün 64 hex simvolu) görünməsidir. Əgər delegat çağırılmırsa, tətbiqinizin entitlements-larını yoxlayın.

Digər tez-tez rast gəlinən problem PushKit-in bildirişləri çatdırmamasıdır tətbiq yenilənməsindən sonra. Bu, push tokeni dəyişmişsə, lakin server köhnəsini istifadə etməyə davam edırsə baş verir. Həll yolu — tətbiq başlatıldıqda serverə təzə token göndərmək və pushRegistry:didInvalidatePushTokenForType çağırıldıqda etibarsız tokenləri silməkdir. Apple həmçinin adi APNs vasitəsilə fallback mexanizmi tətbiq etməyi tövsiyə edir.

Tipik problemlər və onların həlli

ProblemSəbəbHəll
didUpdatePushCredentials çağırılmırEntitlements yoxdur veya yanlış növXcode-da Capabilities → Push Notifications + VoIP yoxlayın
Push gecikmə ilə gəlirCihaz Low Power Mode-da və ya zəif siqnalPushKit aparat məhdudiyyətlərini keçə bilməz
Yenidən başlatmadan sonra bildirişlər gəlmirTətbiqin yenidən quraşdırılmasından sonra push tokeninin dəyişməsiYeni token tələb edin və serverdə yeniləyin
App Store PushKit səbəbindən rədd etdiPushKit zənglər üçün istifadə edilmirHər bir push-un reportNewIncomingCall-ə səbəb olduğuna əmin olun

Tez-tez verilən suallar

PushKit-i CallKit olmadan istifadə etmək olarmı?

Texniki cəhətdən bəli, lakin mənasız. iOS 13-dən etibarən PushKit-in yegan’a icazə verilən tətbiqi daxil olan zənglərin göstəricisidir ki, bu da göstərmək üçün CallKit tələb edir. PushKit-in CallKit olmadan istifadəsi App Store-da tətbiqin rədd edilməsinə səbəb olacaq.

PushKit payload-unun maksimum ölçüsü nə qədərdir?

PushKit üçün payload-un maksimum ölçüsü 5 KB (5120 bayt) təşkil edir. Bu, adi APNs bildirişlərindən 1 KB çoxdur ki, bu da zəng haqqında daha çox metadatın ötürülməsinə imkan verir.

PushKit ilə tətbiq silinərsə nə baş verir?

Apple tətbiq silindikdə avtomatik olaraq push tokenini ləğv edir. Server etibarsızlaşdırma barədə bildiriş alacaq və bu tokenə push göndərməyi dayandırmalıdır. Etibarsız tokenə push göndərmək cəhdi APNs xətası 410 ilə nəticələnəcək.

PushKit macOS-da işləyirmi?

Mac Catalyst və ya AppKit istifadə edərək yaradılmış Mac tətbiqləri üçün PushKit macOS 10.14+-də mövcuddur. Funksionallıq VoIP bildirişlərinin dəstəyi daxil olmaqla iOS versiyası ilə tamamilə analojidir.

PushKit əlaqəsinin aktiv olduğunu necə yoxlamaq olar?

Öz analitikanızı istifadə edin: serverdən push göndərilməsi ilə müştəridə didReceiveIncomingPushWithPayload çağırılması arasındakı vaxtı izləyin. Orta vaxtın 500 ms-dən az olması PushKit-in düzgün işlədiyini göstərir.

Nəticə

  • PushKit — daimi TCP əlaqəsi istifadə edən və 500 ms-dən az gecikmə təmin edən yüksək prioritetli push bildiriş çatdırılması üçün Apple çərçivəsi.
  • PKPushRegistry tətbiqi müəyyən növ bildirişləri — VoIP, Complication, FileProvider və ya PushToTalk üçün qeydiyyatdan keçirir.
  • iOS 13-dən etibarən PushKit-in yegan’a icazə verilən tətbiqi CallKit vasitəsilə daxil olan zənglərin göstəricisidir; PushKit vasitəsilə fon məlumat yenilənməsi qadağandır.
  • APNs-dən fərqi — buferləşdirmə olmadan ayrılmış TCP kanalı və istənilən vəziyyətdən tətbiqin zəmanətli oyadılması.
  • Payload 5 KB ilə məhduddur; hər bir VoIP-push 5 saniyə ərzində reportNewIncomingCall çağırmalıdır.
  • Diaqnostika PushKit fiziki cihaz tələb edir — simulyator dəstəklənmir; token hər başlatmada yenilənməlidir.
  • PushKit + CallKit — VoIP tətbiqləri üçün standart birləşmə: PushKit bildiriş çatdırır, CallKit sistem zəng ekranını göstərir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun