PushKit — nedir, iOS VoIP bildirim frameworkü

Yazar: IT Sectr Yayınlanma: 2026-03-22 Okuma süresi: 8 dk

PushKit, standart APNs'yi atlayarak düşük gecikmeli VoIP bildirimleri sağlayan bir iOS framework'üdür. Apple Developer Documentation (2025)'a göre PushKit, arka planda bile 5 saniye içinde çağrı teslimatını garanti eder. VoIP bildirimleri, kullanıcıya banner göstermeye gerek kalmadan doğrudan işlenir ve bu framework'u iOS'ta mesajlaşma ve görüntülü görüşme uygulamaları için birincil araç haline getirir.

Temel Noktalar

  • PushKit, öncelikli ve düşük gecikmeli VoIP bildirimleri sağlayan bir iOS framework'üdür.
  • Bildirimler banner gösterilmeden işlenir — uygulama, çağrıyı işlemek için arka planda uyanır.
  • Kayıt, pushType .voIP ile PKPushRegistry aracılığıyla gerçekleştirilir.
  • APNs'den farkı — PushKit standart bildirim kanalını kullanmaz ve daha yüksek önceliğe sahiptir.
  • Sınırlamalar — PushKit yalnızca VoIP için tasarlanmıştır ve normal push bildirimleri için kullanılamaz.

PushKit Nedir

PushKit, iOS 8'de tanıtılan Apple framework'üdür ve VoIP uygulamaları için düşük gecikmeli push bildirimleri sağlar. Standart APNs'den (Apple Push Notification service) farklı olarak PushKit, gelen bir çağrı alındığında uygulamanın arka planda uyanmasına izin verir ve kullanıcıya bildirim göstermez. Bu, sesli ve görüntülü görüşme uygulamaları için kritiktir — kullanıcı, uygulama kapalı olsa bile çağrıyı anında alır. Apple WWDC 2024'e göre PushKit, dünya genelinde her gün 2 milyardan fazla VoIP bildirimi işler.

PushKit Nasıl Çalışır

Mekanizma, cihaz ile Apple push sunucusu arasında standart bildirim kanalını atlayan doğrudan bağlantı üzerine kuruludur. Uygulama sunucusu bir VoIP bildirimi gönderdiğinde, özel bir PushKit sunucusundan geçer ve maksimum öncelikle cihaza teslim edilir. Sistem, uygulamayı arka planda uyandırır ve pushRegistry:didReceiveIncomingPushWithPayload:forType: delegate yöntemini çağırır. Uygulama yükü (payload) alır, çağrıyı işler ve onay için completion handler'ı çağırır. Apple spesifikasyonuna göre gönderme ve işleme arasındaki tüm döngü 5 saniyeden fazla sürmez.

PushKit vs APNs

PushKit ve APNs arasındaki temel fark, teslimat mekanizması ve işleme yöntemindedir. APNs, banner, ses veya rozet göstererek standart bildirim kanalını kullanırken, PushKit verileri görsel bildirim olmadan doğrudan uygulamaya teslim eder. Aşağıda temel özelliklerin karşılaştırma tablosu bulunmaktadır.

ÖzellikPushKitAPNs
Teslimat ÖnceliğiYüksek (anında teslimat)Orta (gecikme olası)
Uygulama UyandırmaEvet, arka plandaYalnızca bildirime dokunulduğunda
Banner GöstermeHayırEvet (isteğe bağlı)
KullanımVoIP, çağrılar, görüntülü görüşmeTüm bildirim türleri
Yük (Payload)Yalnızca JSON, medya yokJSON + ekler

PushKit ayrıca zengin medya eklerini desteklemez ve normal pazarlama bildirimleri için kullanılamaz. Apple, PushKit kullanımını sıkı bir şekilde kontrol eder — uygulamanın açık VoIP işlevselliğine sahip olması gerekir, aksi takdirde inceleme sırasında reddedilir. APNs, diğer tüm senaryolar için evrensel çözüm olmaya devam etmektedir.

Kayıt ve VoIP Bildirimleri Alma

PushKit'i kullanmak için uygulamanın PKPushRegistry aracılığıyla pushType .voIP ile kaydolması gerekir. Kayıt, ilk başlatmada bir kez yapılır ve ardından sistem benzersiz bir push tokeni oluşturur ve bunu delegate aracılığıyla iletir. Bu token, daha sonra VoIP bildirimleri göndermek için uygulama sunucusuna gönderilir. Aşağıda Swift'te PushKit kaydı ve token alma örneği verilmiştir.

PushKit Kaydını Ayarlama

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

PKPushType.voIP ile desiredPushTypes çağrıldıktan sonra sistem, otomatik olarak VoIP bildirimleri alma izni ister. pushRegistry:didUpdatePushCredentials:forType: yönteminde uygulama, cihaz tokenini Data olarak alır ve bu, onaltılık bir dizeye dönüştürülerek sunucuya gönderilir. Token her cihaz için benzersizdir ve uygulama yeniden yüklendiğinde değişir — sunucu token güncellemelerini işlemelidir.

Gelen Bildirim Alma

swift
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 yönteminde uygulama, çağrı verileriyle birlikte yükü alır. Arayan bilgisi çıkarıldıktan sonra, gelen çağrı ekranını görüntülemek için CallKit framework'ünden bir CXCallUpdate oluşturulur. İşlemden sonra completion handler'ı çağırmak önemlidir — aksi takdirde sistem, zaman aşımı nedeniyle uygulama sürecini zorla sonlandırabilir. Maksimum işlem süresi 30 saniyedir ve bundan sonra iOS bildirimi işlenmemiş olarak kabul eder.

CallKit ile Gelen Çağrıları İşleme

PushKit, CallKit ile sıkı bir şekilde entegre edilmiştir — iOS'ta sistem çağrı arayüzünü görüntülemek için bir framework. Uygulama, PushKit aracılığıyla bir VoIP bildirimi aldığında, çağrıyı yönetmek için bir CXProvider ve CXCallController oluşturmalıdır. CallKit, uygulama küçültülmüş olsa bile kilit ekranında gelen çağrı ekranını otomatik olarak gösterir. Aşağıda bir CallKit sağlayıcısı kurulum örneği verilmiştir.

swift
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, çağrı ekranının görünümünü ve davranışını tanımlar — uygulama adı, video desteği, eşzamanlı çağrı sayısı. VoIP uygulamaları için PushKit'in CallKit ile entegrasyonu zorunludur: bu olmadan sistem gelen çağrı ekranını göstermez ve kullanıcı çağrıyı kaçırır. Apple, PushKit kullanan tüm uygulamalar için CallKit kullanımını zorunlu kılar.

Özellikler ve Sınırlamalar

PushKit kullanımı, Apple tarafından belirlenen bir dizi sıkı kısıtlama ile birlikte gelir. Framework yalnızca VoIP işlevselliği için kullanılabilir — PushKit aracılığıyla pazarlama bildirimleri gönderme girişimleri uygulamanın engellenmesine yol açar. Yük boyutu 4 KB'yi aşmamalıdır ve yalnızca ekleri olmayan JSON verileri içerebilir. iOS 13'ten itibaren Apple, VoIP bildirimleri gönderme sıklığına bir sınırlama getirmiştir — cihaz başına dakikada en fazla bir bildirim. Sunucu bu sınırlamaya uymalıdır, aksi takdirde bildirimler sistem tarafından reddedilir. PushKit ayrıca iOS simülatöründe çalışmaz — test yalnızca fiziksel bir cihazda mümkündür.

PushKit Yük Yapısı

Bir VoIP bildirimi yükü, özel çağrı verileriyle birlikte bir JSON sözlüğüdür. APNs'den farklı olarak PushKit, standart alert, badge ve sound alanlarını desteklemez — tüm veriler geliştirici tarafından tanımlanır. Tipik bir yapı, arayan tanımlayıcısını (caller), çağrı türünü (voice veya video), oda veya oturum tanımlayıcısını ve bir zaman damgasını içerir. 4 KB sınırı içinde yerden tasarruf etmek için her alanın boyutu minimum düzeyde olmalıdır. Apple, yükte yalnızca kilit ekranında gelen çağrı ekranını görüntülemek için gerekli verilerin bulunmasını ve kalan bilgilerin (avatar, mesaj geçmişi) kullanıcı yanıtladıktan sonra ayrı bir ağ isteğiyle yüklenmesini önerir. Minimum yük örneği: { "caller": "Anna", "caller_id": "+79161234567", "type": "audio", "room": "uuid-room-1234", "ts": 1718534400 }. Yükteki tüm anahtarlar kısa, net ve uygulama sürümleri arasında uyumluluk için sunucu tarafında belgelenmiş olmalıdır.

Hata Yönetimi ve Yeniden Denemeler

PushKit ile çalışırken, teslimat hatalarını ve bağlantı kaybını yönetmek gerekir. Cihaz çevrimdışıysa veya ağdan bağlantısı kesilmişse, VoIP bildirimi teslim edilmez — PushKit, yeniden deneme için bildirimleri 24 saate kadar saklayan APNs'nin aksine, depolama ve yeniden göndermeyi desteklemez. Sunucu, teslim edilmeyen bildirimleri bağımsız olarak izlemeli ve bağlantı yeniden kurulduğunda yeniden denemelidir. Bunun için push kit feedback service mekanizması kullanılır — başarısızlık nedeniyle birlikte teslim edilmeyen bildirimlerin bir listesini döndürür. VoIP bildirimi teslimat başarısının sunucu analitiği aracılığıyla izlenmesi ve başarılı teslimat oranı %95'in altına düştüğünde geliştiriciye bildirilmesi önerilir. PushKit sistemi, yalnızca cihazın aktif bir internet bağlantısı olduğunda teslimatı garanti eder — bağlantı yoksa bildirim kalıcı olarak kaybolur ve bu, garantili teslimatla güvenilir bir VoIP çağrı sistemi tasarlarken dikkate alınması kritik öneme sahiptir.

Sıkça Sorulan Sorular

PushKit nedir?

PushKit, banner göstermeden gelen çağrıda uygulamanın arka planda uyanmasını sağlayan, düşük gecikmeli VoIP bildirimleri için bir Apple framework'üdür. Mesajlaşma ve görüntülü görüşme uygulamalarında kullanılır.

PushKit APNs'den nasıl farklıdır?

PushKit daha yüksek teslimat önceliğine sahiptir ve kullanıcıya bildirim göstermeden uygulamayı arka planda uyandırır. APNs, bildirimleri banner ile teslim eder ve kullanıcı etkileşimi olmadan bir çağrıyı işlemek için uygulamayı uyandıramaz.

PushKit ile CallKit kullanmak zorunlu mu?

Evet, Apple sistem gelen çağrı ekranını görüntülemek için PushKit'in CallKit ile entegrasyonunu gerektirir. CallKit olmadan uygulama, kilit ekranında gelen çağrıyı gösteremez ve bu da VoIP işlevselliğini işe yaramaz hale getirir.

PushKit tokeni nasıl alınır?

Token, .voIP türüyle PKPushRegistry oluşturulduktan ve pushRegistry:didUpdatePushCredentials:forType: delegate yöntemi uygulandıktan sonra alınır. Token Data olarak iletilir ve sunucuya göndermek için onaltılık bir dizeye dönüştürülmelidir.

PushKit'te yük boyutu sınırları nelerdir?

PushKit için maksimum yük boyutu 4 KB'dir. Veriler JSON formatında olmalıdır. Medya ekleri desteklenmez. iOS 13'ten itibaren cihaz başına dakikada en fazla bir VoIP bildirimi sınırı vardır.

Özet

  • PushKit, APNs'yi atlayarak düşük gecikmeli VoIP bildirimleri sağlayan bir iOS framework'üdür.
  • Teslimat önceliği APNs'den daha yüksektir — bildirim 5 saniye içinde gelir.
  • Uygulama, bildirim alındığında arka planda uyanır ve kullanıcıya banner göstermez.
  • Kayıt, PKPushRegistry, PKPushType.voIP ve PKPushRegistryDelegate protokolü aracılığıyla yapılır.
  • CallKit, iOS'ta sistem gelen çağrı ekranını görüntülemek için zorunludur.
  • Yük 4 KB ile sınırlı, yalnızca JSON, iOS 13'ten itibaren dakikada en fazla bir bildirim.
  • Öneri — PushKit'i yalnızca VoIP işlevselliği için kullanın, diğer bildirimler için APNs kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun