PushKit standart APNs-i keçərək aşağı gecikmə ilə VoIP bildirişləri çatdırmaq üçün iOS framework-udur. Apple Developer Documentation (2025)-a görə, PushKit fon rejimində belə zənglərin 5 saniyə ərzində çatdırılmasına zəmanət verir. VoIP bildirişləri birbaşa emal edilir, istifadəçiyə banner göstərməyə ehtiyac olmadan, bu da framework-u iOS-da mesajlaşma və videozəng tətbiqləri üçün əsas alət edir.
Əsas məqamlar
PushKit — iOS 8-də təqdim edilmiş, VoIP tətbiqləri üçün aşağı gecikmə ilə push bildirişlərinin çatdırılmasını təmin edən Apple framework-udur. Standart APNs-dən (Apple Push Notification service) fərqli olaraq, PushKit tətbiqə daxil olan zəng qəbul edərkən istifadəçiyə bildiriş göstərmədən fonda oyanmağa imkan verir. Bu, səsli və video rabitə tətbiqləri üçün kritik əhəmiyyət daşıyır — istifadəçi tətbiq bağlı olsa belə zəngi dərhal alır. Apple WWDC 2024 məlumatına görə, PushKit gündəlik olaraq dünya üzrə 2 milyarddan çox VoIP bildirişini emal edir.
İş mexanizmi cihaz və Apple push serveri arasında birbaşa əlaqəyə əsaslanır, standart bildiriş kanalını keçərək. Tətbiq serveri VoIP bildirişi göndərdikdə, o, xüsusi PushKit serverindən keçir və maksimum prioritetlə cihaza çatdırılır. Sistem tətbiqi fonda oyadır və pushRegistry:didReceiveIncomingPushWithPayload:forType: delegat metodunu çağırır. Tətbiq payload-ı alır, zəngi emal edir və təsdiqləmək üçün completion handler-i çağırır. Göndərmədən emal edilməyə qədər bütün dövr 5 saniyədən çox çəkmir, bu Apple spesifikasiyası ilə təsdiqlənmişdir.
PushKit və APNs arasındakı əsas fərq çatdırılma mexanizmində və emalda dır. APNs banner, səs və ya nişan göstərilməsi ilə standart bildiriş kanalından istifadə edir, PushKit isə məlumatları vizual bildiriş olmadan birbaşa tətbiqə çatdırır. Aşağıda əsas xüsusiyyətlərin müqayisə cədvəli verilmişdir.
| Xüsusiyyət | PushKit | APNs |
|---|---|---|
| Çatdırılma prioriteti | Yüksək (dərhal çatdırılma) | Orta (gecikmə mümkündür) |
| Tətbiqin oyanması | Bəli, fon rejimində | Yalnız bildirişə kliklədikdə |
| Banner göstərilməsi | Xeyr | Bəli (istəyə bağlı) |
| İstifadə | VoIP, zənglər, videorabitə | İstənilən bildiriş növləri |
| Payload | Yalnız JSON, media olmadan | JSON + əlavələr |
PushKit həmçinin zəngin media əlavələrini dəstəkləmir və adi marketinq bildirişləri üçün istifadə edilə bilməz. Apple PushKit-in istifadəsini ciddi şəkildə idarə edir — tətbiq açıq VoIP funksionallığına malik olmalıdır, əks halda baxış zamanı rədd ediləcək. APNs bütün digər ssenarilər üçün universal həll olaraq qalır.
PushKit-dən istifadə etmək üçün tətbiq PKPushRegistry vasitəsilə pushType .voIP növü ilə qeydiyyatdan keçməlidir. Qeydiyyat ilk işə salınmada bir dəfə aparılır, bundan sonra sistem unikal push token yaradır və onu delegat vasitəsilə ötürür. Bu token sonradan VoIP bildirişləri göndərmək üçün tətbiq serverinə göndərilir. Aşağıda Swift-də PushKit qeydiyyatı və tokenin alınması nümunəsi verilmişdir.
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 ilə çağırıldıqdan sonra sistem avtomatik olaraq VoIP bildirişləri almaq üçün icazə tələb edir. pushRegistry:didUpdatePushCredentials:forType: metodunda tətbiq device token-i Data şəklində alır, bu da hex-string-ə çevrilir və serverə göndərilir. Token hər bir cihaz üçün unikaldır və tətbiq yenidən qurulduqda dəyişir — server token yeniləməsini idarə etməlidir.
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 metodunda tətbiq zəng məlumatları ilə payload alır. Zəng edən haqqında məlumat çıxarıldıqdan sonra daxil olan zəng ekranını göstərmək üçün CallKit framework-undan CXCallUpdate yaradılır. Emal tamamlandıqdan sonra completion handler-i çağırmaq vacibdir — əks halda sistem vaxt aşımı səbəbindən tətbiq prosesini məcburi şəkildə sonlandıra bilər. Maksimum emal müddəti 30 saniyədir, bundan sonra iOS bildirişi emal edilməmiş hesab edir.
PushKit CallKit ilə sıx inteqrasiya olunub — iOS-da sistem zəng interfeysini göstərmək üçün framework. Tətbiq PushKit vasitəsilə VoIP bildirişi aldıqda, zəngi idarə etmək üçün CXProvider və CXCallController yaratmalıdır. CallKit tətbiq minimuma endirilsə belə, kilid ekranında avtomatik olaraq daxil olan zəng ekranını göstərir. Aşağıda CallKit provayderinin konfiqurasiyası nümunəsi verilmişdir.
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 zəng ekranının görünüşünü və davranışını müəyyən edir — tətbiq adı, video dəstəyi, eyni vaxtda zənglərin sayı. PushKit-in CallKit ilə inteqrasiyası VoIP tətbiqləri üçün məcburidir: onsuz sistem daxil olan zəng ekranını göstərməyəcək və istifadəçi zəngi qaçıracaq. Apple PushKit-dən istifadə edən bütün tətbiqlər üçün CallKit-dən istifadəni tələb edir.
PushKit-dən istifadə Apple tərəfindən müəyyən edilmiş bir sıra ciddi məhdudiyyətlər qoyur. Framework yalnız VoIP funksionallığı üçün istifadə edilə bilər — PushKit vasitəsilə marketinq bildirişləri göndərmək cəhdləri tətbiqin bloklanmasına səbəb olacaq. Payload ölçüsü 4 KB-dan çox olmamalıdır və yalnız JSON məlumatları ola bilər, əlavələr olmadan. iOS 13-dən etibarən Apple VoIP bildirişlərinin göndərilmə tezliyinə məhdudiyyət tətbiq edib — bir cihaza dəqiqədə birdən çox bildiriş göndərilə bilməz. Server bu məhdudiyyətə riayət etməlidir, əks halda bildirişlər sistem tərəfindən rədd ediləcək. PushKit iOS simulatorunda işləmir — sınaq yalnız fiziki cihazda mümkündür.
VoIP bildirişi payload-u zəng haqqında fərdi məlumatları olan JSON lüğətidir. APNs-dən fərqli olaraq, PushKit standart alert, badge və sound sahələrini dəstəkləmir — bütün məlumatlar tərtibatçı tərəfindən müəyyən edilir. Tipik struktura zəng edənin identifikatoru (caller), zəng növü (voice və ya video), otaq və ya sessiya identifikatoru və vaxt damğası daxildir. 4 KB limitində yerə qənaət etmək üçün hər bir sahənin ölçüsü minimal olmalıdır. Apple yalnız kilid ekranında daxil olan zəng ekranını göstərmək üçün lazım olan məlumatları payload-a daxil etməyi, qalan məlumatları (avatar, yazışma tarixçəsi) isə istifadəçi cavab verdikdən sonra ayrıca şəbəkə sorğusu ilə yükləməyi tövsiyə edir. Minimal payload nümunəsi: { “caller”: “Anna”, “caller_id”: “+79161234567”, “type”: “audio”, “room”: “uuid-room-1234”, “ts”: 1718534400 }. Payload-dakı bütün açarlar qısa, birmənalı və tətbiq versiyaları arasında uyğunluq üçün server tərəfində sənədləşdirilmiş olmalıdır.
PushKit ilə işləyərkən çatdırılma xətalarının və əlaqənin kəsilməsinin idarə edilməsini təmin etmək lazımdır. Cihaz oflayn rejimdədirsə və ya şəbəkədən ayrılıbsa, VoIP bildirişi çatdırılmayacaq — PushKit, APNs-dən fərqli olaraq, bildirişləri saxlamır və təkrar göndərmir (APNs təkrar cəhd üçün bildirişi 24 saata qədər saxlayır). Server çatdırılmamış bildirişləri özü izləməli və əlaqə bərpa olunduqda təkrar cəhd etməlidir. Bunun üçün push kit feedback service mexanizmindən istifadə olunur — o, xəta səbəbini göstərən çatdırılmamış bildirişlərin siyahısını qaytarır. Server analitikası vasitəsilə VoIP bildirişlərinin çatdırılma uğurunu izləmək və uğurlu çatdırılma faizi 95%-dən aşağı düşdükdə tərtibatçıya xəbərdarlıq etmək tövsiyə olunur. PushKit sistemi yalnız cihazda aktiv internet bağlantısı olduqda çatdırılmaya zəmanət verir — əlaqə olmadıqda bildiriş geri qaytarılmaz şəkildə itirilir, bu da zəmanətli çatdırılma ilə etibarlı VoIP zəng sistemi dizayn edərkən nəzərə alınmalıdır.
Tez-tez verilən suallar
PushKit — aşağı gecikmə ilə VoIP bildirişləri çatdırmaq üçün Apple framework-u, tətbiqə banner göstərmədən daxil olan zəng zamanı fonda oyanmağa imkan verir. Mesajlaşma və video tətbiqlərində istifadə olunur.
PushKit daha yüksək çatdırılma prioritetinə malikdir və istifadəçiyə bildiriş göstərmədən tətbiqi fonda oyadır. APNs banner ilə bildirişlər çatdırır və istifadəçi qarşılıqlı əlaqəsi olmadan zəngi idarə etmək üçün tətbiqi oyada bilməz.
Bəli, Apple daxil olan zəngin sistem ekranını göstərmək üçün PushKit-in CallKit ilə inteqrasiyasını tələb edir. CallKit olmadan tətbiq istifadəçiyə kilid ekranında daxil olan zəngi göstərə bilməyəcək, bu da VoIP funksionallığını yararsız edir.
Token PKPushRegistry .voIP növü ilə yaradıldıqdan və pushRegistry:didUpdatePushCredentials:forType: delegatı tətbiq edildikdən sonra əldə edilir. Token Data kimi ötürülür və serverə göndərmək üçün hex-string-ə çevrilməlidir.
PushKit üçün maksimum payload ölçüsü 4 KB-dır. Məlumatlar JSON formatında olmalıdır. Media əlavələri dəstəklənmir. iOS 13-dən etibarən bir cihaza dəqiqədə birdən çox VoIP bildirişi göndərilə bilməz.
Xülasə
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