PushKit — qué es, framework de notificaciones VoIP de iOS

Autor: IT Sectr Publicado: 2026-03-22 Tiempo de lectura: 8 min

PushKit es un framework de iOS para la entrega de notificaciones VoIP de baja latencia, evitando el APNs estándar. Según la Apple Developer Documentation (2025), PushKit garantiza la entrega de llamadas en menos de 5 segundos incluso en segundo plano. Las notificaciones VoIP se procesan directamente, sin necesidad de mostrar un banner al usuario, lo que convierte al framework en la herramienta principal para mensajería y aplicaciones de videollamada en iOS.

Puntos clave

  • PushKit es un framework de iOS para entregar notificaciones VoIP con prioridad y baja latencia.
  • Las notificaciones se procesan sin mostrar un banner — la aplicación se activa en segundo plano para gestionar la llamada.
  • El registro se realiza mediante PKPushRegistry con el tipo pushType .voIP.
  • Diferencia con APNs — PushKit no usa el canal estándar de notificaciones y tiene mayor prioridad.
  • Limitaciones — PushKit está diseñado solo para VoIP y no puede usarse para notificaciones push normales.

Qué es PushKit

PushKit es un framework de Apple, presentado en iOS 8, que entrega notificaciones push de baja latencia para aplicaciones VoIP. A diferencia del APNs estándar (Apple Push Notification service), PushKit permite que la aplicación se active en segundo plano al recibir una llamada entrante, sin mostrar una notificación al usuario. Esto es fundamental para aplicaciones de voz y videollamada — el usuario recibe la llamada al instante, incluso si la aplicación está cerrada. Según Apple WWDC 2024, PushKit procesa más de 2 mil millones de notificaciones VoIP diariamente en todo el mundo.

Cómo funciona PushKit

El mecanismo se basa en una conexión directa entre el dispositivo y el servidor push de Apple, evitando el canal estándar de notificaciones. Cuando el servidor de la aplicación envía una notificación VoIP, pasa a través de un servidor dedicado de PushKit y se entrega al dispositivo con máxima prioridad. El sistema activa la aplicación en segundo plano y llama al método delegado pushRegistry:didReceiveIncomingPushWithPayload:forType:. La aplicación recibe el payload, procesa la llamada y llama al completion handler para confirmación. Todo el ciclo desde el envío hasta el procesamiento no lleva más de 5 segundos, según la especificación de Apple.

PushKit vs APNs

La principal diferencia entre PushKit y APNs radica en el mecanismo de entrega y procesamiento. APNs usa el canal estándar de notificaciones mostrando un banner, sonido o badge, mientras que PushKit entrega datos directamente a la aplicación sin notificación visual. A continuación se muestra una tabla comparativa de las características clave.

CaracterísticaPushKitAPNs
Prioridad de entregaAlta (entrega inmediata)Media (posible retraso)
Activación de appSí, en segundo planoSolo al tocar la notificación
Mostrar bannerNoSí (opcional)
UsoVoIP, llamadas, videollamadasTodos los tipos de notificaciones
PayloadSolo JSON, sin mediosJSON + adjuntos

PushKit tampoco admite adjuntos multimedia enriquecidos y no puede usarse para notificaciones de marketing habituales. Apple controla estrictamente el uso de PushKit — la aplicación debe tener funcionalidad VoIP explícita, de lo contrario será rechazada en la revisión. APNs sigue siendo la solución universal para todos los demás escenarios.

Registro y recepción de notificaciones VoIP

Para usar PushKit, la aplicación debe registrarse a través de PKPushRegistry con el tipo pushType .voIP. El registro se realiza una vez en el primer inicio, tras lo cual el sistema genera un token push único y lo transmite a través del delegado. Este token se envía al servidor de la aplicación para el posterior envío de notificaciones VoIP. A continuación se muestra un ejemplo de registro de PushKit y obtención de token en Swift.

Configuración del registro 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)
}

Después de llamar a desiredPushTypes con PKPushType.voIP, el sistema solicita automáticamente permiso para recibir notificaciones VoIP. En el método pushRegistry:didUpdatePushCredentials:forType:, la aplicación recibe el token del dispositivo como Data, que se convierte en una cadena hexadecimal y se envía al servidor. El token es único para cada dispositivo y cambia al reinstalar la aplicación — el servidor debe manejar las actualizaciones de token.

Recepción de una notificación entrante

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

En el método didReceiveIncomingPushWith, la aplicación recibe el payload con los datos de la llamada. Después de extraer la información del llamante, se crea un CXCallUpdate del framework CallKit para mostrar la pantalla de llamada entrante. Es importante llamar al completion handler después del procesamiento — de lo contrario, el sistema podría terminar forzosamente el proceso de la aplicación por tiempo de espera. El tiempo máximo de procesamiento es de 30 segundos, tras los cuales iOS considera la notificación no procesada.

Manejo de llamadas entrantes con CallKit

PushKit está estrechamente integrado con CallKit — un framework para mostrar la interfaz de llamadas del sistema en iOS. Cuando la aplicación recibe una notificación VoIP a través de PushKit, debe crear un CXProvider y CXCallController para gestionar la llamada. CallKit muestra automáticamente la pantalla de llamada entrante en la pantalla de bloqueo, incluso si la aplicación está minimizada. A continuación se muestra un ejemplo de configuración de un proveedor 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 define la apariencia y el comportamiento de la pantalla de llamada — el nombre de la aplicación, soporte de video, número de llamadas simultáneas. La integración de PushKit con CallKit es obligatoria para aplicaciones VoIP: sin ella, el sistema no mostrará la pantalla de llamada entrante y el usuario perderá la llamada. Apple exige el uso de CallKit para todas las aplicaciones que usan PushKit.

Características y limitaciones

El uso de PushKit conlleva una serie de restricciones estrictas establecidas por Apple. El framework solo puede usarse para funcionalidad VoIP — cualquier intento de enviar notificaciones de marketing a través de PushKit resultará en el bloqueo de la aplicación. El tamaño del payload no debe exceder los 4 KB y solo puede contener datos JSON sin adjuntos. A partir de iOS 13, Apple introdujo un límite en la frecuencia de envío de notificaciones VoIP — no más de una notificación por minuto por dispositivo. El servidor debe cumplir con este límite, de lo contrario las notificaciones serán rechazadas por el sistema. PushKit tampoco funciona en el simulador de iOS — las pruebas solo son posibles en un dispositivo físico.

Estructura del payload de PushKit

Un payload de notificación VoIP es un diccionario JSON con datos personalizados de la llamada. A diferencia de APNs, PushKit no admite los campos estándar alert, badge y sound — todos los datos los define el desarrollador. Una estructura típica incluye el identificador del llamante (caller), el tipo de llamada (voice o video), el identificador de sala o sesión y una marca de tiempo. El tamaño de cada campo debe ser mínimo para ahorrar espacio dentro del límite de 4 KB. Apple recomienda incluir en el payload solo los datos necesarios para mostrar la pantalla de llamada entrante en la pantalla de bloqueo, y cargar el resto de la información (avatar, historial de mensajes) después de que el usuario responda mediante una solicitud de red separada. Ejemplo de un payload mínimo: { "caller": "Ana", "caller_id": "+79161234567", "type": "audio", "room": "uuid-room-1234", "ts": 1718534400 }. Todas las claves en el payload deben ser cortas, inequívocas y documentadas en el lado del servidor para la compatibilidad entre versiones de la aplicación.

Manejo de errores y reintentos

Al trabajar con PushKit, es necesario manejar fallos de entrega y pérdida de conexión. Si el dispositivo está fuera de línea o desconectado de la red, la notificación VoIP no se entregará — PushKit no admite almacenamiento ni reenvío, a diferencia de APNs, que almacena notificaciones hasta 24 horas para reintento. El servidor debe rastrear de forma independiente las notificaciones no entregadas y reintentar cuando se restablezca la conexión. Para esto se utiliza el mecanismo push kit feedback service — devuelve una lista de notificaciones no entregadas con el motivo del fallo. Se recomienda configurar el monitoreo del éxito de entrega de notificaciones VoIP a través de análisis del servidor y notificar al desarrollador si la tasa de entregas exitosas cae por debajo del 95%. El sistema PushKit garantiza la entrega solo cuando el dispositivo tiene una conexión a internet activa — si está ausente, la notificación se pierde permanentemente, lo cual es crítico considerar al diseñar un sistema confiable de llamadas VoIP con entrega garantizada.

Preguntas frecuentes

¿Qué es PushKit?

PushKit es un framework de Apple para la entrega de notificaciones VoIP de baja latencia que permite a la aplicación activarse en segundo plano en una llamada entrante sin mostrar un banner. Se usa en mensajería y aplicaciones de videollamada.

¿En qué se diferencia PushKit de APNs?

PushKit tiene una prioridad de entrega más alta y activa la aplicación en segundo plano sin mostrar una notificación al usuario. APNs entrega notificaciones con un banner y no puede activar la aplicación para procesar una llamada sin interacción del usuario.

¿Es obligatorio usar CallKit con PushKit?

Sí, Apple exige la integración de PushKit con CallKit para mostrar la pantalla de llamada entrante del sistema. Sin CallKit, la aplicación no puede mostrar la llamada entrante en la pantalla de bloqueo, lo que hace que la funcionalidad VoIP sea inútil.

¿Cómo obtener un token de PushKit?

El token se obtiene después de crear PKPushRegistry con el tipo .voIP e implementar el método delegado pushRegistry:didUpdatePushCredentials:forType:. El token se transmite como Data y debe convertirse a una cadena hexadecimal para enviarlo al servidor.

¿Cuáles son los límites de tamaño del payload en PushKit?

El tamaño máximo del payload para PushKit es de 4 KB. Los datos deben estar en formato JSON. No se admiten adjuntos multimedia. Desde iOS 13, hay un límite de no más de una notificación VoIP por minuto por dispositivo.

Resumen

  • PushKit es un framework de iOS para la entrega de notificaciones VoIP de baja latencia, evitando APNs.
  • La prioridad de entrega de PushKit es mayor que la de APNs — la notificación llega en menos de 5 segundos.
  • La aplicación se activa en segundo plano al recibir una notificación, sin mostrar un banner al usuario.
  • El registro se realiza mediante PKPushRegistry con PKPushType.voIP y el protocolo PKPushRegistryDelegate.
  • CallKit es obligatorio para mostrar la pantalla de llamada entrante del sistema en iOS.
  • El payload está limitado a 4 KB, solo JSON, no más de una notificación por minuto desde iOS 13.
  • Recomendación — use PushKit solo para funcionalidad VoIP, para otras notificaciones use APNs.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también