PushKit — τι είναι, πλαίσιο ειδοποιήσεων VoIP για iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-22 Χρόνος ανάγνωσης: 8 λεπ

Το PushKit είναι ένα πλαίσιο iOS για παράδοση ειδοποιήσεων VoIP με χαμηλή καθυστέρηση, παρακάμπτοντας το τυπικό APNs. Σύμφωνα με το Apple Developer Documentation (2025), το PushKit εγγυάται την παράδοση κλήσεων εντός 5 δευτερολέπτων ακόμη και σε κατάσταση παρασκηνίου. Οι ειδοποιήσεις VoIP υποβάλλονται σε επεξεργασία απευθείας, χωρίς να χρειάζεται να εμφανιστεί banner στον χρήστη, καθιστώντας το πλαίσιο βασικό εργαλείο για εφαρμογές ανταλλαγής μηνυμάτων και βίντεο στο iOS.

Κύρια σημεία

  • PushKit — πλαίσιο iOS για παράδοση ειδοποιήσεων VoIP με προτεραιότητα και χαμηλή καθυστέρηση.
  • Οι ειδοποιήσεις υποβάλλονται σε επεξεργασία χωρίς εμφάνιση banner — η εφαρμογή αφυπνίζεται στο παρασκήνιο για να επεξεργαστεί την κλήση.
  • Εγγραφή γίνεται μέσω PKPushRegistry με τύπο pushType .voIP.
  • Διαφορά από το APNs — το PushKit δεν χρησιμοποιεί τυπικό κανάλι ειδοποιήσεων και έχει υψηλότερη προτεραιότητα.
  • Περιορισμοί — το PushKit προορίζεται μόνο για VoIP και δεν μπορεί να χρησιμοποιηθεί για συνηθισμένες push ειδοποιήσεις.

Τι είναι το PushKit

Το PushKit είναι ένα πλαίσιο της Apple, που παρουσιάστηκε στο iOS 8, το οποίο παρέχει παράδοση push ειδοποιήσεων με χαμηλή καθυστέρηση για εφαρμογές VoIP. Σε αντίθεση με το τυπικό APNs (Apple Push Notification service), το PushKit επιτρέπει στην εφαρμογή να αφυπνίζεται στο παρασκήνιο όταν λαμβάνει μια εισερχόμενη κλήση, χωρίς να εμφανίζει ειδοποίηση στον χρήστη. Αυτό είναι κρίσιμο για εφαρμογές φωνής και βίντεο — ο χρήστης λαμβάνει την κλήση άμεσα, ακόμη και αν η εφαρμογή είναι κλειστή. Σύμφωνα με το Apple WWDC 2024, το PushKit επεξεργάζεται πάνω από 2 δισεκατομμύρια ειδοποιήσεις VoIP καθημερινά παγκοσμίως.

Πώς λειτουργεί το PushKit

Ο μηχανισμός λειτουργίας βασίζεται σε μια άμεση σύνδεση μεταξύ της συσκευής και του διακομιστή push της Apple, παρακάμπτοντας το τυπικό κανάλι ειδοποιήσεων. Όταν ο διακομιστής εφαρμογής στέλνει μια ειδοποίηση VoIP, αυτή περνά μέσω ενός αποκλειστικού διακομιστή PushKit και παραδίδεται στη συσκευή με μέγιστη προτεραιότητα. Το σύστημα αφυπνίζει την εφαρμογή στο παρασκήνιο και καλεί τη μέθοδο αντιπροσώπου pushRegistry:didReceiveIncomingPushWithPayload:forType:. Η εφαρμογή λαμβάνει το ωφέλιμο φορτίο, επεξεργάζεται την κλήση και καλεί τον completion handler για επιβεβαίωση. Ολόκληρος ο κύκλος από την αποστολή έως την επεξεργασία διαρκεί το πολύ 5 δευτερόλεπτα, όπως επιβεβαιώνεται από τις προδιαγραφές της Apple.

Διαφορές μεταξύ PushKit και APNs

Η κύρια διαφορά μεταξύ PushKit και APNs έγκειται στον μηχανισμό παράδοσης και επεξεργασίας. Το APNs χρησιμοποιεί το τυπικό κανάλι ειδοποιήσεων με εμφάνιση banner, ήχου ή σήματος, ενώ το PushKit παραδίδει δεδομένα απευθείας στην εφαρμογή χωρίς οπτική ειδοποίηση. Παρακάτω υπάρχει ένας συγκριτικός πίνακας βασικών χαρακτηριστικών.

ΧαρακτηριστικόPushKitAPNs
Προτεραιότητα παράδοσηςΥψηλή (άμεση παράδοση)Μεσαία (πιθανή καθυστέρηση)
Αφύπνιση εφαρμογήςΝαι, στο παρασκήνιοΜόνο με κλικ στην ειδοποίηση
Εμφάνιση bannerΌχιΝαι (προαιρετικά)
ΧρήσηVoIP, κλήσεις, βίντεοΚάθε τύπος ειδοποίησης
Ωφέλιμο φορτίοΜόνο JSON, χωρίς πολυμέσαJSON + συνημμένα

Το PushKit επίσης δεν υποστηρίζει πλούσια συνημμένα πολυμέσων και δεν μπορεί να χρησιμοποιηθεί για συνηθισμένες ειδοποιήσεις μάρκετινγκ. Η Apple ελέγχει αυστηρά τη χρήση του PushKit — η εφαρμογή πρέπει να έχει σαφή λειτουργικότητα VoIP, διαφορετικά θα απορριφθεί κατά τον έλεγχο. Το APNs παραμένει η καθολική λύση για όλα τα άλλα σενάρια.

Εγγραφή και λήψη ειδοποιήσεων VoIP

Για να χρησιμοποιήσει το PushKit, η εφαρμογή πρέπει να εγγραφεί μέσω PKPushRegistry με τύπο pushType .voIP. Η εγγραφή γίνεται μία φορά κατά την πρώτη εκκίνηση, μετά την οποία το σύστημα δημιουργεί ένα μοναδικό push token και το μεταδίδει μέσω του αντιπροσώπου. Αυτό το token αποστέλλεται στον διακομιστή εφαρμογής για μετέπειτα αποστολή ειδοποιήσεων VoIP. Παρακάτω υπάρχει ένα παράδειγμα εγγραφής PushKit και λήψης token σε Swift.

Ρύθμιση εγγραφής PushKit

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

Μετά την κλήση του desiredPushTypes με PKPushType.voIP, το σύστημα ζητά αυτόματα άδεια για λήψη ειδοποιήσεων VoIP. Στη μέθοδο pushRegistry:didUpdatePushCredentials:forType: η εφαρμογή λαμβάνει το token συσκευής ως Data, το οποίο μετατρέπεται σε hex-string και αποστέλλεται στον διακομιστή. Το token είναι μοναδικό για κάθε συσκευή και αλλάζει κατά την επανεγκατάσταση της εφαρμογής — ο διακομιστής πρέπει να χειρίζεται την ενημέρωση του token.

Λήψη εισερχόμενης ειδοποίησης

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 η εφαρμογή λαμβάνει το ωφέλιμο φορτίο με δεδομένα κλήσης. Μετά την εξαγωγή πληροφοριών για τον καλούντα, δημιουργείται ένα CXCallUpdate από το πλαίσιο CallKit για την εμφάνιση της οθόνης εισερχόμενης κλήσης. Είναι σημαντικό να κληθεί ο completion handler μετά την ολοκλήρωση της επεξεργασίας — διαφορετικά, το σύστημα μπορεί να τερματίσει βίαια τη διαδικασία της εφαρμογής λόγω υπέρβασης χρόνου. Ο μέγιστος χρόνος επεξεργασίας είναι 30 δευτερόλεπτα, μετά τα οποία το iOS θεωρεί την ειδοποίηση ως μη επεξεργασμένη.

Χειρισμός εισερχόμενων κλήσεων με CallKit

Το PushKit είναι στενά ενσωματωμένο με το CallKit — το πλαίσιο για εμφάνιση διεπαφής συστήματος κλήσεων στο iOS. Όταν η εφαρμογή λαμβάνει μια ειδοποίηση VoIP μέσω PushKit, πρέπει να δημιουργήσει ένα CXProvider και CXCallController για τη διαχείριση της κλήσης. Το CallKit εμφανίζει αυτόματα την οθόνη εισερχόμενης κλήσης στην οθόνη κλειδώματος, ακόμη και αν η εφαρμογή είναι ελαχιστοποιημένη. Παρακάτω υπάρχει ένα παράδειγμα ρύθμισης παρόχου CallKit.

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 καθορίζει την εμφάνιση και συμπεριφορά της οθόνης κλήσης — το όνομα εφαρμογής, την υποστήριξη βίντεο, τον αριθμό ταυτόχρονων κλήσεων. Η ενσωμάτωση του PushKit με το CallKit είναι υποχρεωτική για εφαρμογές VoIP: χωρίς αυτήν, το σύστημα δεν θα εμφανίσει την οθόνη εισερχόμενης κλήσης και ο χρήστης θα χάσει την κλήση. Η Apple απαιτεί τη χρήση του CallKit για όλες τις εφαρμογές που χρησιμοποιούν PushKit.

Λειτουργίες και περιορισμοί

Η χρήση του PushKit επιβάλλει μια σειρά αυστηρών περιορισμών που έχουν τεθεί από την Apple. Το πλαίσιο μπορεί να χρησιμοποιηθεί μόνο για λειτουργικότητα VoIP — οποιαδήποτε προσπάθεια αποστολής ειδοποιήσεων μάρκετινγκ μέσω PushKit θα οδηγήσει σε αποκλεισμό της εφαρμογής. Το μέγεθος του ωφέλιμου φορτίου δεν πρέπει να υπερβαίνει τα 4 KB και μπορεί να περιέχει μόνο δεδομένα JSON χωρίς συνημμένα. Από το iOS 13, η Apple εισήγαγε περιορισμό στη συχνότητα αποστολής ειδοποιήσεων VoIP — όχι περισσότερες από μία ειδοποίηση ανά λεπτό ανά συσκευή. Ο διακομιστής πρέπει να τηρεί αυτόν τον περιορισμό, διαφορετικά οι ειδοποιήσεις θα απορριφθούν από το σύστημα. Το PushKit επίσης δεν λειτουργεί στον προσομοιωτή iOS — η δοκιμή είναι δυνατή μόνο σε φυσική συσκευή.

Δομή ωφέλιμου φορτίου PushKit

Το ωφέλιμο φορτίο ειδοποίησης VoIP είναι ένα λεξικό JSON με προσαρμοσμένα δεδομένα κλήσης. Σε αντίθεση με το APNs, το PushKit δεν υποστηρίζει τα τυπικά πεδία alert, badge και sound — όλα τα δεδομένα ορίζονται από τον προγραμματιστή. Η τυπική δομή περιλαμβάνει το αναγνωριστικό καλούντος (caller), τον τύπο κλήσης (voice ή video), το αναγνωριστικό δωματίου ή συνεδρίας και μια χρονική σφραγίδα. Το μέγεθος κάθε πεδίου πρέπει να είναι ελάχιστο για εξοικονόμηση χώρου στο όριο των 4 KB. Η Apple συνιστά να συμπεριλαμβάνονται στο ωφέλιμο φορτίο μόνο τα δεδομένα που είναι απαραίτητα για την εμφάνιση της οθόνης εισερχόμενης κλήσης στην οθόνη κλειδώματος, ενώ οι υπόλοιπες πληροφορίες (avatar, ιστορικό συνομιλίας) να φορτώνονται αφού απαντήσει ο χρήστης με ξεχωριστό αίτημα δικτύου. Παράδειγμα ελάχιστου ωφέλιμου φορτίου: { “caller”: “Anna”, “caller_id”: “+79161234567”, “type”: “audio”, “room”: “uuid-room-1234”, “ts”: 1718534400 }. Όλα τα κλειδιά στο ωφέλιμο φορτίο πρέπει να είναι σύντομα, σαφή και τεκμηριωμένα στην πλευρά του διακομιστή για συμβατότητα μεταξύ εκδόσεων εφαρμογής.

Διαχείριση σφαλμάτων και επαναλήψεις

Κατά την εργασία με το PushKit πρέπει να προβλεφθεί ο χειρισμός σφαλμάτων παράδοσης και απώλειας σύνδεσης. Εάν η συσκευή είναι σε λειτουργία εκτός σύνδεσης ή αποσυνδεδεμένη από το δίκτυο, η ειδοποίηση VoIP δεν θα παραδοθεί — το PushKit δεν υποστηρίζει αποθήκευση και εκ νέου αποστολή, σε αντίθεση με το APNs που αποθηκεύει την ειδοποίηση έως και 24 ώρες για επανάληψη. Ο διακομιστής πρέπει να παρακολουθεί μόνος του τις μη παραδοθείσες ειδοποιήσεις και να επαναλαμβάνει την προσπάθεια μετά την αποκατάσταση της σύνδεσης. Για αυτό χρησιμοποιείται ο μηχανισμός push kit feedback service — επιστρέφει μια λίστα μη παραδοθεισών ειδοποιήσεων με ένδειξη της αιτίας σφάλματος. Συνιστάται η ρύθμιση παρακολούθησης επιτυχίας παράδοσης ειδοποιήσεων VoIP μέσω αναλυτικών στοιχείων διακομιστή και ειδοποίηση του προγραμματιστή όταν το ποσοστό επιτυχούς παράδοσης πέσει κάτω από 95%. Το σύστημα PushKit εγγυάται την παράδοση μόνο όταν υπάρχει ενεργή σύνδεση στο διαδίκτυο στη συσκευή — ελλείψει αυτής, η ειδοποίηση χάνεται ανεπιστρεπτί, το οποίο είναι κρίσιμο να ληφθεί υπόψη κατά τον σχεδιασμό ενός αξιόπιστου συστήματος κλήσεων VoIP με εγγυημένη παράδοση.

Συχνές Ερωτήσεις

Τι είναι το PushKit;

Το PushKit είναι ένα πλαίσιο της Apple για παράδοση ειδοποιήσεων VoIP με χαμηλή καθυστέρηση, που επιτρέπει στην εφαρμογή να αφυπνίζεται στο παρασκήνιο για εισερχόμενη κλήση χωρίς εμφάνιση banner. Χρησιμοποιείται σε εφαρμογές ανταλλαγής μηνυμάτων και βίντεο.

Σε τι διαφέρει το PushKit από το APNs;

Το PushKit έχει υψηλότερη προτεραιότητα παράδοσης και αφυπνίζει την εφαρμογή στο παρασκήνιο χωρίς να εμφανίζει ειδοποίηση στον χρήστη. Το APNs παραδίδει ειδοποιήσεις με banner και δεν μπορεί να αφυπνίσει την εφαρμογή για επεξεργασία κλήσης χωρίς αλληλεπίδραση χρήστη.

Είναι υποχρεωτική η χρήση του CallKit με το PushKit;

Ναι, η Apple απαιτεί την ενσωμάτωση του PushKit με το CallKit για την εμφάνιση της οθόνης συστήματος εισερχόμενης κλήσης. Χωρίς CallKit, η εφαρμογή δεν μπορεί να εμφανίσει την εισερχόμενη κλήση στην οθόνη κλειδώματος, καθιστώντας τη λειτουργικότητα VoIP άχρηστη.

Πώς μπορώ να αποκτήσω token PushKit;

Το token αποκτάται μετά τη δημιουργία PKPushRegistry με τύπο .voIP και υλοποίηση του αντιπροσώπου pushRegistry:didUpdatePushCredentials:forType:. Το token μεταδίδεται ως Data και πρέπει να μετατραπεί σε hex-string για αποστολή στον διακομιστή.

Ποιοι είναι οι περιορισμοί μεγέθους ωφέλιμου φορτίου στο PushKit;

Το μέγιστο μέγεθος ωφέλιμου φορτίου για το PushKit είναι 4 KB. Τα δεδομένα πρέπει να είναι σε μορφή JSON. Τα συνημμένα πολυμέσων δεν υποστηρίζονται. Από το iOS 13 ισχύει περιορισμός όχι περισσότερων από μία ειδοποίηση VoIP ανά λεπτό ανά συσκευή.

Σύνοψη

  • PushKit — πλαίσιο iOS για παράδοση ειδοποιήσεων VoIP με χαμηλή καθυστέρηση, παρακάμπτοντας το APNs.
  • Η προτεραιότητα παράδοσης του PushKit είναι υψηλότερη από το APNs — η ειδοποίηση φτάνει σε 5 δευτερόλεπτα.
  • Η εφαρμογή αφυπνίζεται στο παρασκήνιο κατά τη λήψη ειδοποίησης, χωρίς banner στον χρήστη.
  • Η εγγραφή γίνεται μέσω PKPushRegistry με PKPushType.voIP και αντιπρόσωπο PKPushRegistryDelegate.
  • Το CallKit είναι υποχρεωτικό για την εμφάνιση οθόνης συστήματος εισερχόμενης κλήσης στο iOS.
  • Το ωφέλιμο φορτίο περιορίζεται σε 4 KB, μόνο JSON, όχι περισσότερες από μία ειδοποίηση ανά λεπτό από iOS 13.
  • Σύσταση — χρησιμοποιήστε το PushKit μόνο για λειτουργικότητα VoIP, για άλλες ειδοποιήσεις εφαρμόστε το APNs.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης