PushKit — шта је то, оквир VoIP обавештења за iOS

Аутор: IT Sectr Објављено: 2026-03-22 Време читања: 8 мин

PushKit је iOS оквир за испоруку VoIP обавештења са ниским кашњењем, заобилазећи стандардни APNs. Према Apple Developer Documentation (2025), PushKit гарантује испоруку позива у року од 5 секунди чак и у позадини. VoIP обавештења се обрађују директно, без потребе да се кориснику прикаже банер, што овај оквир чини основним алатом за месинџере и апликације за видео позиве на iOS-у.

Главне тачке

  • PushKit — iOS оквир за испоруку VoIP обавештења са приоритетом и ниским кашњењем.
  • Обавештења се обрађују без приказивања банера — апликација се буди у позадини ради обраде позива.
  • Регистрација се врши преко PKPushRegistry са типом pushType .voIP.
  • Разлика од APNs — PushKit не користи стандардни канал обавештења и има виши приоритет.
  • Ограничења — PushKit је намењен само за VoIP и не може се користити за обична пусх обавештења.

Шта је PushKit

PushKit је оквир компаније Apple, представљен у iOS 8, који обезбеђује испоруку пусх обавештења са ниским кашњењем за VoIP апликације. За разлику од стандардног APNs (Apple Push Notification service), PushKit омогућава апликацији да се пробуди у позадини при пријему долазног позива, без приказивања обавештења кориснику. Ово је критично за апликације за гласовну и видео комуникацију — корисник прима позив тренутно, чак и ако је апликација затворена. Према Apple WWDC 2024, PushKit обрађује преко 2 милијарде VoIP обавештења дневно широм света.

Како ради PushKit

Механизам рада заснива се на директној вези између уређаја и Apple пусх сервера, заобилазећи стандардни канал обавештења. Када сервер апликације пошаље VoIP обавештење, оно пролази кроз наменски PushKit сервер и испоручује се на уређај са максималним приоритетом. Систем буди апликацију у позадини и позива метод делегата pushRegistry:didReceiveIncomingPushWithPayload:forType:. Апликација прима податке, обрађује позив и позива довршни руковалац ради потврде. Цео циклус од слања до обраде траје највише 5 секунди, што је потврђено Apple спецификацијом.

Разлике између PushKit и APNs

Основна разлика између PushKit и APNs лежи у механизму испоруке и обради. APNs користи стандардни канал обавештења са приказивањем банера, звука или значке, док PushKit испоручује податке директно у апликацију без визуелног обавештења. Испод је упоредна табела кључних карактеристика.

КарактеристикаPushKitAPNs
Приоритет испорукеВисок (тренутна испорука)Средњи (могуће кашњење)
Буђење апликацијеДа, у позадиниСамо при клику на обавештење
Приказивање банераНеДа (опционално)
УпотребаVoIP, позиви, видео комуникацијаБило које врсте обавештења
ПодациСамо JSON, без медијаJSON + прилози

PushKit такође не подржава богате медијске прилоге и не може се користити за обична маркетиншка обавештења. Apple строго контролише употребу PushKit-а — апликација мора имати јасну VoIP функционалност, у супротном ће бити одбијена при прегледу. APNs остаје универзално решење за све остале сценарије.

Регистрација и примање VoIP обавештења

Да би користила PushKit, апликација мора да се региструје преко PKPushRegistry са типом pushType .voIP. Регистрација се врши једном при првом покретању, након чега систем генерише јединствени пусх токен и прослеђује га преко делегата. Овај токен се шаље на сервер апликације за касније слање VoIP обавештења. Испод је пример регистрације PushKit-а и добијања токена у 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: апликација прима уређајски токен у облику Data, који се конвертује у хекс-низ и шаље на сервер. Токен је јединствен за сваки уређај и мења се при поновној инсталацији апликације — сервер мора да обрађује ажурирање токена.

Примање долазног обавештења

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 оквира за приказ екрана долазног позива. Важно је позвати довршни руковалац након завршетка обраде — у супротном, систем може присилно прекинути процес апликације због истека времена. Максимално време обраде је 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 препоручује да се у податке укључе само информације неопходне за приказ екрана долазног позива на закључаном екрану, а остале информације (аватар, историју порука) учитавају након што корисник одговори посебним мрежним захтевом. Пример минималних података: { „caller”: „Ana”, „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 обавештења са ниским кашњењем, који омогућава апликацији да се пробуди у позадини при долазном позиву без приказивања банера. Користи се у месинџерима и видео апликацијама.

По чему се PushKit разликује од APNs?

PushKit има виши приоритет испоруке и буди апликацију у позадини, не приказујући обавештење кориснику. APNs испоручује обавештења са банером и не може да пробуди апликацију за обраду позива без интеракције корисника.

Да ли је обавезно користити CallKit са PushKit?

Да, Apple захтева интеграцију PushKit са CallKit-ом за приказ системског екрана долазног позива. Без CallKit-а, апликација неће моћи да прикаже кориснику долазни позив на закључаном екрану, што чини VoIP функционалност бескорисном.

Како добити PushKit токен?

Токен се добија након креирања PKPushRegistry са типом .voIP и имплементацијом делегата pushRegistry:didUpdatePushCredentials:forType:. Токен се преноси као Data и мора се конвертовати у хекс-низ за слање на сервер.

Која су ограничења величине података у PushKit?

Максимална величина података за PushKit је 4 KB. Подаци морају бити у JSON формату. Медијски прилози нису подржани. Од iOS 13 важи ограничење — не више од једног VoIP обавештења у минути по уређају.

Резиме

  • PushKit — iOS оквир за испоруку VoIP обавештења са ниским кашњењем, заобилазећи APNs.
  • Приоритет испоруке PushKit-а је виши од APNs — обавештење стиже за 5 секунди.
  • Апликација се буди у позадини при пријему обавештења, без приказивања банера кориснику.
  • Регистрација се врши преко PKPushRegistry са PKPushType.voIP и делегатом PKPushRegistryDelegate.
  • CallKit је обавезан за приказ системског екрана долазног позива на iOS-у.
  • Подаци ограничени на 4 KB, само JSON, не више од једног обавештења у минути од iOS 13.
  • Препорука — користите PushKit само за VoIP функционалност, за остала обавештења примењујте APNs.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође