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 — 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 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 |
|---|---|---|
| VoIP | Daxil olan səs və video zənglərin göstəricisi | iOS 8+, App Store |
| Complication | Apple Watch siferblatlarında məlumat yenilənməsi | watchOS 6+ |
| FileProvider | File Provider Extension-də yeni fayllar haqqında siqnal | iOS 11+, məhdud |
| PushToTalk | Korporativ tətbiqlərdə radiotelefon funksiyası | iOS 16+, məhdud giriş |
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.
| Parametr | PushKit | APNs |
|---|---|---|
| Əlaqə növü | Daimi TCP (ayrılmış kanal) | Buferləşdirmə ilə ümumi kanal |
| Median gecikmə | 120–350 ms | 1–5 saniyə |
| Tətbiqi oyatma | Həmişə, istənilən vəziyyetdən | Yalnız tətbiq öldürülməyibsə |
| Payload ölçüsü | 5 KB-a qədər | 4 KB-a qədər |
| iOS qruplaşdırması | Xeyr | Bəli |
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.
import PushKit
class PushKitManager: NSObject {
private let pushRegistry = PKPushRegistry(queue: .main)
func configure() {
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]
}
}
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.
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-ü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.
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.
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 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.
// VoIP push payload nümunəsi
{
"aps": {
"alert": {}
},
"caller": "+15551234567",
"callerName": "Alice Johnson",
"sessionId": "abc-123-def",
"hasVideo": false
}
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.
| Problem | Səbəb | Həll |
|---|---|---|
| didUpdatePushCredentials çağırılmır | Entitlements yoxdur veya yanlış növ | Xcode-da Capabilities → Push Notifications + VoIP yoxlayın |
| Push gecikmə ilə gəlir | Cihaz Low Power Mode-da və ya zəif siqnal | PushKit aparat məhdudiyyətlərini keçə bilməz |
| Yenidən başlatmadan sonra bildirişlər gəlmir | Tətbiqin yenidən quraşdırılmasından sonra push tokeninin dəyişməsi | Yeni token tələb edin və serverdə yeniləyin |
| App Store PushKit səbəbindən rədd etdi | PushKit zənglər üçün istifadə edilmir | Hər bir push-un reportNewIncomingCall-ə səbəb olduğuna əmin olun |
Tez-tez verilən suallar
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 üçü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.
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.
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.
Ö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ə
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.
Həm də oxuyun