PushKit — nedir, VoIP için push bildirim çerçevesi

Yazar: IT Sectr Yayınlanma: 2026-06-16 Okuma süresi: 8 dk

PushKit, garantili anında teslimat ile push bildirimleri göndermek için bir Apple çerçevesidir ve öncelikli olarak VoIP uygulamaları için tasarlanmıştır. Gecikebilen veya gruplanabilen standart APNs’nin (Apple Push Notification service) aksine PushKit, cihaz ile Apple sunucuları arasında kalıcı bir TCP bağlantısı kullanır. Apple Developer Documentation, 2026’ya göre PushKit, gerçek zamanlı uygulamalar — sesli ve görüntülü aramalar — için kritik olan 500 milisaniyeden daha az uçtan uca teslimat gecikmesi sağlar.

Önemli Noktalar

  • PushKit — VoIP, Location ve FileProvider türleri için yüksek öncelikli push bildirimi teslimat çerçevesi.
  • PKPushRegistry — bildirim türlerini kaydetmek ve gelen push mesajlarını almak için ana sınıf.
  • VoIP push — iOS 13’ten itibaren PushKit’in izin verilen tek kullanımı, anında gelen arama göstergesi sağlar.
  • Kalıcı TCP bağlantısı — APNs’nin karakteristik gecikmeleri olmadan teslimatı garanti eden PushKit’in teknik temeli.
  • CallKit ile eşleşme — PushKit bildirimi gönderir, CallKit sistem arama ekranını gösterir, birleşik bir kullanıcı deneyimi sağlar.

PushKit nedir ve nasıl çalışır?

PushKit, iOS 8’de tanıtılan bir Apple çerçevesidir ve APNs sunucularına kalıcı bir bağlantı yoluyla garantili öncelikli push bildirimi teslimat mekanizması sağlar. Tek bir APNs kanalından geçen ve gecikebilen normal bildirimlerin aksine, PushKit bildirimleri daha yüksek öncelikli özel bir akış kullanarak neredeyse gerçek zamanlı teslimat sağlar.

Teknik olarak PushKit, cihaz ile Apple’ın push sunucuları arasında kalıcı bir TCP bağlantısı yoluyla çalışır. Bir sunucu VoIP bildirimi gönderdiğinde, bağlantı bunu anında cihaza iletir, cihaz uygulamayı uyandırır ve PKPushRegistry temsilcisini çağırır. Uygulamanın aktif durumda olması gerekmez — PushKit onu arka plandan, sonlandırılmış durumdan veya cihaz yeniden başlatıldıktan sonra bile uyandırabilir.

Microsoft Research (2024) tarafından mobil platformlarda push bildirimi gecikmesi üzerine yapılan araştırmaya göre, PushKit bildirimlerinin ortanca gecikmesi 120–350 ms iken, standart APNs bildirimlerinin ortancası 1–5 saniyedir. Bu büyüklük sırasındaki fark, özel TCP kanalı ve Apple tarafındaki öncelikli işlemeyle açıklanmaktadır.

PushKit hangi bildirim türlerini destekler?

PushKit dört tür destekler: VoIP (aramalar için), Complication (saat yüzü verileri için), FileProvider (dosya senkronizasyonu için) ve PushToTalk (telsiz işlevleri için). iOS 13’ten itibaren yalnızca VoIP türü üçüncü taraf geliştiriciler için yaygın olarak kullanılabilir durumdadır. Complication ve FileProvider’ın niş uygulamaları vardır ve Apple’ın kendi ekosistemleriyle sınırlıdır.

PushKit TürüAmaçKullanılabilirlik
VoIPGelen sesli ve görüntülü arama göstergesiiOS 8+, App Store
ComplicationApple Watch yüzlerinde veri güncellemewatchOS 6+
FileProviderFile Provider Extension’da yeni dosyalar hakkında sinyaliOS 11+, sınırlı
PushToTalkKurumsal uygulamalarda telsiz işleviiOS 16+, sınırlı erişim

PushKit vs APNs: temel farklar

APNs (Apple Push Notification service), tüm uygulamalar için tek bir kanal üzerinden çalışan evrensel bir push bildirimi teslimat hizmetidir. Kanal tıkalı olduğunda Apple, APNs bildirimlerini arabelleğe alabilir, gruplayabilir veya hatta atabilir. Öte yandan PushKit, her bildirim türü için özel bir bağlantı kullanır ve Apple, her VoIP push’un arabelleğe alınmadan teslim edilmesini garanti eder.

Fark, zamana duyarlı senaryolarda belirginleşir: APNs aracılığıyla gönderilen bir gelen arama, 10–30 saniye gecikmeyle gelebilir veya cihaz güç tasarrufu modundaysa hiç gelmeyebilir. PushKit, TCP kanalı sistem tarafından öncelikli olarak aktif tutulduğu için cihaz durumundan bağımsız olarak aynı bildirimi 100–500 ms içinde gönderir.

Özellik Karşılaştırması

ParametrePushKitAPNs
Bağlantı TürüKalıcı TCP (özel kanal)Ara belleğe sahip paylaşımlı kanal
Ortanca Gecikme120–350 ms1–5 saniye
Uygulama UyandırmaHer zaman, her durumdanYalnızca uygulama kapatılmamışsa
Payload Boyutu5 KB’a kadar4 KB’a kadar
iOS GruplamaHayırEvet

PushKit Mimarisi: PKPushRegistry ve PKPushPayload

PushKit mimarisi PKPushRegistry etrafında inşa edilmiştir — bu nesne, uygulamayı belirli bir türde bildirim almak üzere kaydeder. Uygulama bir PKPushRegistry örneği oluşturur, istenen türü (örneğin PKPushTypeVoIP) belirtir ve bir temsilci atar. Kayıttan sonra sistem, APNs ile bağlantıyı otomatik olarak sürdürür ve push bildirimlerini temsilci aracılığıyla iletir.

Her bildirim, sunucu verilerini içeren bir dictionaryPayload’e sahip bir PKPushPayload nesnesiyle temsil edilir. Payload boyutu 5 KB ile sınırlıdır, bu da arama meta verilerini (çağıran tanımlayıcısı, arama türü (ses/görüntü), kişi adı ve oturum anahtarı) iletmek için yeterlidir. Medya akışının kendisi WebRTC veya başka bir gerçek zamanlı protokol aracılığıyla ayrı olarak iletilir.

PKPushRegistry Kaydı

swift
import PushKit

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

Push Bildirimlerini Alma ve İşleme

PushKit, bir bildirim aldığında temsilci yöntemini çağırır. Bu noktada uygulama, dictionaryPayload’den verileri çıkarmalı ve aramayı hemen CallKit aracılığıyla görüntülemelidir, aksi takdirde sistem arka plan görevini sonlandırabilir. Apple, işlemeyi 30 saniye içinde tamamlamayı önerir, ancak VoIP aramaları için ilk saniye içinde arama ekranını göstermek kritiktir.

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 Kısıtlamaları ve PushKit Kullanım Kuralları

iOS 13’ün piyasaya sürülmesiyle Apple, PushKit kullanımına katı kısıtlamalar getirdi. Geliştiriciler, VoIP push’u arka plan uygulama güncellemeleri için gizli bir mekanizma olarak yaygın şekilde kullanıyorlardı — PushKit aracılığıyla uyandırma, kullanıcının açık izni olmadan içerik yüklemeye, verileri senkronize etmeye ve arayüzü güncellemeye izin veriyordu. Apple bunu enerji tasarrufu kavramının ihlali olarak değerlendirdi ve PushKit’i yalnızca gelen arama göstergesiyle sınırlandırdı.

Artık her PushKit bildirimi, CallKit aracılığıyla hemen bir gelen arama görüntülemesine yol açmalıdır. Sistem, PushKit’in başka amaçlar için kullanıldığını tespit ederse — örneğin, arama göstermeden arka plan senkronizasyonu veya içerik güncellemeleri — uygulama inceleme sırasında reddedilebilir veya PushKit hizmetinden devre dışı bırakılabilir. Apple ayrıca iOS 13’ten itibaren arka plan veri güncellemeleri için PushKit kullanma yeteneğini de kaldırdı.

Apple’ın PushKit Kullanım Önerileri (iOS 13+)

  • Her VoIP bildirimi, push alındıktan sonra 5 saniye içinde reportNewIncomingCall çağırmalıdır
  • Ping, içerik senkronizasyonu veya anahtar güncellemeleri için PushKit kullanmayın — bunlar için background fetch vardır
  • Sunucu tarafı, ön uyandırma için değil, yalnızca gerçek bir gelen arama olduğunda push göndermelidir
  • Takip eden bir arama olmadan push almak, Son Aramalar’da cevapsız bir arama gösterecektir — bu kullanıcının kafasını karıştırır

Swift’te PushKit Entegrasyonu

Tam PushKit entegrasyonu, kayıt, push anahtarı alma ve gelen bildirimleri işlemeyi içerir. PushKit otomatik olarak bildirim gönderme izni ister — PushKit’in kendisi için ek bir UNUserNotificationCenter çağrısı gerekmez, ancak uygulamanın yerel bildirimleri için gerekebilir. Kayıttan sonra sistem, sunucuya gönderilmesi gereken push anahtarını iletmek için pushRegistry:didUpdatePushCredentials’ı çağırır.

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

Sunucudan Push Bildirimi Gönderme

Sunucu tarafı, APNs aracılığıyla push-type = voip ve apns-push-type: voip başlığıyla bir PushKit bildirimi gönderir. Normal APNs’nin aksine, VoIP push kendi sertifikasını kullanır ve topic yapılandırması gerektirmez. Payload, arama tanımlaması için minimum veri içermelidir.

json
// VoIP push payload örneği
{
    "aps": {
        "alert": {}
    },
    "caller": "+15551234567",
    "callerName": "Alice Johnson",
    "sessionId": "abc-123-def",
    "hasVideo": false
}

PushKit Bildirimlerinde Tanı ve Hata Ayıklama

PushKit’te hata ayıklama, standart APNs’den daha karmaşıktır çünkü PushKit iOS simülatöründe çalışmaz. Tanı için fiziksel bir iPhone veya iPad gereklidir. Doğru çalışmanın ilk işareti, başlatmada pushRegistry:didUpdatePushCredentials çağrısı ve belirli bir biçimde (VoIP için 64 onaltılık karakter) bir push anahtarının görünmesidir. Temsilci çağrılmazsa, uygulamanın yetkilendirmelerini kontrol edin.

Bir diğer yaygın sorun, uygulama güncellemesinden sonra PushKit’in bildirim göndermemesidir. Bu, push anahtarı değiştiğinde ancak sunucu eskisini kullanmaya devam ettiğinde olur. Çözüm, uygulama başlatıldığında sunucuya yeni anahtarı göndermek ve pushRegistry:didInvalidatePushTokenForType çağrıldığında geçersiz anahtarları kaldırmaktır. Apple ayrıca normal APNs aracılığıyla bir yedek mekanizma uygulanmasını önerir.

Yaygın Sorunlar ve Çözümleri

SorunNedenÇözüm
didUpdatePushCredentials çağrılmıyorEksik yetkilendirmeler veya yanlış türXcode’da Capabilities → Push Notifications + VoIP’yi kontrol edin
Push gecikmeli geliyorCihaz düşük güç modunda veya zayıf sinyalPushKit donanım sınırlamalarını aşamaz
Yeniden başlatmadan sonra bildirim gelmiyorUygulama yeniden yüklendikten sonra push anahtarı değiştiYeni anahtar isteyin ve sunucuda güncelleyin
PushKit nedeniyle App Store reddiPushKit arama dışı amaçlarla kullanıldıHer push’un reportNewIncomingCall ile sonuçlandığından emin olun

Sıkça Sorulan Sorular

PushKit, CallKit olmadan kullanılabilir mi?

Teknik olarak evet, ancak anlamsız olurdu. iOS 13’ten itibaren PushKit’in izin verilen tek kullanımı, görüntüleme için CallKit gerektiren gelen arama göstergesidir. PushKit’i CallKit olmadan kullanmak, uygulamanın App Store’da reddedilmesine yol açar.

PushKit payload’unun maksimum boyutu nedir?

PushKit için maksimum payload boyutu 5 KB’dır (5120 bayt). Bu, normal APNs bildirimlerinden 1 KB daha fazladır ve daha fazla arama meta verisi iletilmesine olanak tanır.

PushKit kullanan bir uygulamayı silersem ne olur?

Uygulama silindiğinde Apple otomatik olarak push anahtarını geçersiz kılar. Sunucu bir geçersiz kılma bildirimi alır ve bu anahtara push göndermeyi durdurmalıdır. Geçersiz bir anahtara push gönderme girişimi APNs hatası 410 ile sonuçlanır.

PushKit macOS’ta çalışır mı?

PushKit, Mac Catalyst veya AppKit kullanılarak oluşturulmuş Mac uygulamaları için macOS 10.14+ üzerinde kullanılabilir. İşlevsellik, VoIP bildirimi desteği dahil olmak üzere iOS sürümüyle tamamen aynıdır.

PushKit bağlantısının aktif olduğunu nasıl doğrulayabilirim?

Kendi analitiğinizi kullanın: sunucudan push gönderme ile istemcide didReceiveIncomingPushWithPayload çağrısı arasındaki süreyi izleyin. 500 ms’den az ortalama süre, PushKit’in doğru çalıştığını gösterir.

Özet

  • PushKit — kalıcı bir TCP bağlantısı kullanarak ve 500 ms’den az gecikme sağlayarak yüksek öncelikli push bildirimleri göndermek için Apple çerçevesi.
  • PKPushRegistry, uygulamayı belirli bir türde — VoIP, Complication, FileProvider veya PushToTalk — bildirim almak üzere kaydeder.
  • iOS 13’ten itibaren, PushKit’in izin verilen tek kullanımı CallKit aracılığıyla gelen arama göstergesidir; PushKit aracılığıyla arka plan veri güncellemeleri yasaktır.
  • APNs’den farkı — arabelleksiz özel TCP kanalı ve her durumdan garantili uygulama uyandırma.
  • Payload 5 KB ile sınırlıdır; her VoIP push, 5 saniye içinde reportNewIncomingCall çağırmalıdır.
  • PushKit tanısı fiziksel bir cihaz gerektirir — simülatör desteklenmez; anahtar her başlatmada güncellenmelidir.
  • PushKit + CallKit — VoIP uygulamaları için standart kombinasyon: PushKit bildirimi gönderir, CallKit sistem arama ekranını gösterir.

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