Notification Content Extension — qué es, cómo crear una interfaz personalizada para iOS

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

Notification Content Extension es una extensión de iOS que permite reemplazar la interfaz estándar de notificación push por un UIView personalizado. El desarrollador obtiene control total sobre la visualización del contenido: imágenes, vídeos, animaciones, fuentes personalizadas y elementos interactivos. Según Apple Developer, 2025, Notification Content Extension admite cualquier interfaz UIKit en el espacio limitado de la notificación.

Puntos Clave

  • Notification Content Extension es una extensión de iOS para UI personalizada de notificaciones push.
  • La extensión implementa el protocolo UNNotificationContentExtension con el método obligatorio didReceive.
  • La interfaz personalizada se crea en Storyboard y puede contener cualquier componente UIKit.
  • El tamaño máximo de la extensión es 50 MB y no debe exceder los 12 MB comprimido.
  • La extensión se activa para notificaciones con el categoryIdentifier especificado.

Qué es Notification Content Extension

Notification Content Extension es una extensión de app en iOS que reemplaza la plantilla de visualización estándar de notificación push por un UIView personalizado. A diferencia de una notificación normal donde el contenido se limita a un título, subtítulo y cuerpo, la extensión permite mostrar cualquier interfaz UIKit: un mapa con coordenadas, un gráfico, una galería de imágenes o un formulario de entrada.

Cómo funciona

Cuando iOS recibe una notificación push con un categoryIdentifier especificado, el sistema verifica si hay una extensión registrada para esta categoría. Si es así, el sistema inicia la extensión en un proceso separado y le pasa el contenido de la notificación. La extensión muestra su interfaz en lugar de la estándar. El usuario interactúa con la interfaz personalizada sin abrir la aplicación principal.

Diferencia con Notification Service Extension

Es importante no confundir Notification Content Extension con Notification Service Extension. Service Extension procesa el contenido antes de que se muestre la notificación (descarga de adjuntos, descifrado). Content Extension reemplaza la interfaz después de recibir el contenido preparado. Ambas extensiones pueden trabajar en conjunto: Service Extension prepara los datos, Content Extension los muestra.

CaracterísticaContent ExtensionService Extension
PropósitoUI personalizada de notificaciónModificación del contenido antes de mostrar
Tiempo de ejecuciónMientras el usuario ve la notificaciónHasta 30 segundos en segundo plano
InterfazUIView UIKit completoSin interfaz
APIUNNotificationContentExtensionUNNotificationServiceExtension

Limitaciones de la extensión

Notification Content Extension se ejecuta en un proceso aislado con recursos limitados. La extensión no tiene acceso al almacenamiento principal de la aplicación a través de NSUserDefaults, excepto mediante App Group. El tamaño de la extensión está limitado a 50 MB sin comprimir. El tiempo para mostrar el contenido también es limitado — si la extensión no completa la actualización en un tiempo razonable, el sistema la cierra.

Creación de Notification Content Extension en Xcode

Para crear la extensión en Xcode, debes añadir un nuevo target de tipo Notification Content Extension. Xcode creará automáticamente MainInterface.storyboard con un controlador que hereda de UIViewController e implementa UNNotificationContentExtension.

Agregar el target de extensión

En Xcode, selecciona File → New → Target → Notification Content Extension. Especifica el nombre de la extensión, el lenguaje (Swift u Objective-C) y asegúrate de que el proyecto esté conectado al mismo equipo de desarrollo. Después de crear el target, aparecerá una carpeta con tres archivos: MainInterface.storyboard, Info.plist y el archivo del controlador.

Configuración de Info.plist

En el Info.plist de la extensión se debe especificar el array NSExtensionAttributes con la clave UNNotificationExtensionCategory. Este array contiene los identificadores de categoría de las notificaciones para las que se activará la extensión. La clave opcional UNNotificationExtensionInitialContentSizeRatio establece la relación de aspecto inicial de la interfaz personalizada para un posicionamiento correcto.

Arquitectura de carpetas de la extensión

Se recomienda mantener una arquitectura limpia en el target de la extensión: una carpeta separada para controladores, otra para Vistas personalizadas. Como la extensión es un binario separado, el código de la aplicación principal no es accesible directamente. Para compartir código, crea un framework separado o usa App Group para los datos.

Implementación del protocolo UNNotificationContentExtension

UNNotificationContentExtension es un protocolo que debe implementar el controlador en Notification Content Extension. El único método obligatorio es didReceive(_:with:), llamado al recibir una notificación. El controlador recibe la notificación y un controlador de vista listo que debe actualizar con los datos.

Implementación básica del controlador

El controlador de la extensión debe heredar de UIViewController e implementar UNNotificationContentExtension. Un Storyboard o xib se vincula a este controlador. Al recibir una notificación, el método didReceive pasa el contenido y el controlador actualiza sus vistas.

swift
import UIKit
import UserNotifications
import UserNotificationsUI

class CustomNotificationViewController: UIViewController {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var customImageView: UIImageView!

    func didReceive(
        notification: UNNotification
    ) {
        let content = notification.request.content
        titleLabel.text = content.title
        loadAttachment(content.attachments.first)
    }

    private func loadAttachment(attachment: UNNotificationAttachment?) {
        guard let url = attachment?.URL else { return }
        if let image = UIImage(contentsOfFile: url.path) {
            customImageView.image = image
        }
    }
}

extension CustomNotificationViewController: UNNotificationContentExtension {
    func didReceive(
        notification: UNNotification
    ) {
        didReceive(notification: notification)
    }
}

Gestión del tamaño de la interfaz

El sistema determina el tamaño de la interfaz personalizada basándose en la clave UNNotificationExtensionInitialContentSizeRatio en Info.plist y el contenido actual. Se recomienda establecer esta clave en 0.1 para el tamaño inicial mínimo, y luego cambiar el tamaño mediante preferredContentSize después de cargar el contenido.

Personalización de la interfaz e interactividad

Notification Content Extension brinda total libertad en la creación de la interfaz. Puedes usar cualquier componente UIKit: UITableView, MKMapView, WKWebView, UIStackView. Sin embargo, es importante considerar el espacio limitado de la notificación y optimizar el rendimiento.

Agregar un mapa a la notificación

Un escenario popular es mostrar un mapa con una ubicación. Para ello, agrega MKMapView al Storyboard de la extensión, y el controlador pasa las coordenadas desde el contenido de la notificación. Es importante no olvidar agregar MapKit al target de la extensión. Al usar un mapa, considera el límite de memoria de la extensión — cargar tiles complejos puede exceder los recursos disponibles.

Animaciones y transiciones

Notification Content Extension admite animaciones UIView, incluyendo cambio de tamaño, movimiento y transparencia de elementos. Al entrar en el modo expandido de notificación, se puede iniciar una animación de aparición del contenido. Las animaciones deben ser cortas (hasta 0.5 segundos) y no interferir con la interacción del usuario con la notificación. Evita las animaciones infinitas — consumen batería y reducen el rendimiento.

Manejo de toques en la interfaz personalizada

Como la extensión es un UIViewController completo, puedes agregar gestos y manejadores de toque. Los gestos UIKit (UITapGestureRecognizer, UIButton) funcionan de forma estándar. Para acciones que requieran abrir la aplicación, usa el delegado de la extensión o userNotificationCenter. Los elementos interactivos deben ser lo suficientemente grandes para un toque cómodo en el espacio limitado — el tamaño mínimo del objetivo táctil es de 44x44 puntos según las recomendaciones de Apple.

Trabajo con medios y adjuntos

El contenido multimedia es una capacidad clave de Notification Content Extension. Una notificación puede contener imágenes, GIF, audio y vídeo que se muestran en la interfaz personalizada. Los adjuntos se entregan a través de UNNotificationAttachment, que puede ser agregado por el servidor mediante el payload o por Notification Service Extension después de la descarga. Los formatos compatibles incluyen JPEG, PNG, MPEG-4 y MP3.

Visualización de medios en la extensión

Para mostrar una imagen, basta con obtener UNNotificationAttachment del contenido de la notificación y cargarlo desde la URL local. Es importante recordar que la extensión solo tiene acceso a archivos locales — los recursos remotos deben ser descargados previamente por Service Extension. El tamaño máximo del adjunto es de 50 MB en iOS 15+, el límite aumenta con cada actualización posterior. Para soportar múltiples imágenes, usa UNNotificationAttachment con diferentes identificadores y muéstralos mediante UIPageViewController.

Carga y visualización de imágenes

Para mostrar una imagen en la interfaz personalizada, la extensión obtiene UNNotificationAttachment del contenido de la notificación y lo carga desde la URL local. El adjunto debe ser descargado previamente por Notification Service Extension — Content Extension no tiene acceso a la red. El tamaño máximo del adjunto multimedia es de 50 MB en iOS 15+, en versiones anteriores el límite era de 10 MB. La extensión debe manejar correctamente la ausencia de adjuntos y mostrar una interfaz de respaldo. Para la precarga de imágenes de baja resolución, usa versiones en miniatura creadas por Service Extension antes de adjuntar.

Reproducción de vídeo en la notificación

iOS admite la reproducción de vídeo en Notification Content Extension mediante AVPlayerLayer. La extensión puede mostrar un reproductor de vídeo con botones de control directamente en la notificación. Esto es especialmente útil para aplicaciones de videovigilancia, streaming o vista previa de contenido. Se permite la reproducción automática sin sonido siempre que el usuario espere contenido multimedia en esta notificación. Al implementar un reproductor de vídeo, agrega controles: reproducción/pausa, barra de progreso y un botón de cierre. Asegúrate de que el vídeo no se inicie automáticamente con sonido — esto viola las recomendaciones de Apple sobre la experiencia del usuario. Para presentaciones de diapositivas de múltiples imágenes, usa transiciones animadas entre ellas mediante UIView.transition con la opción de transición de vuelta de página.

Optimización del rendimiento de la extensión

Notification Content Extension se ejecuta en un entorno limitado con un límite de memoria de aproximadamente 50 MB. Para optimizar el rendimiento, usa carga diferida de imágenes, evita cálculos pesados en el hilo principal y aplica Auto Layout con restricciones simples. Las operaciones pesadas como el procesamiento de imágenes o el análisis de datos deben realizarse en colas en segundo plano (DispatchQueue.global). Si se excede el límite de memoria, el sistema finalizará la extensión y el usuario verá una notificación estándar. Se recomienda perfilar la extensión con Instruments (Allocations y Time Profiler) antes de publicar, y también verificar el consumo de memoria en dispositivos reales con diferentes versiones de iOS.

Preguntas Frecuentes

¿Se puede usar SwiftUI en Notification Content Extension?

Sí, a partir de iOS 16, Notification Content Extension es compatible con SwiftUI a través de UIHostingController. Sin embargo, UIKit sigue siendo una opción más estable para interfaces complejas debido al soporte limitado de SwiftUI en extensiones.

¿Por qué la extensión no se activa para mi notificación?

Verifica que el categoryIdentifier en el payload de la notificación coincida con UNNotificationExtensionCategory en el Info.plist de la extensión. También asegúrate de que la extensión esté agregada al target principal de la app y esté correctamente firmada.

¿Cómo pasar datos de la aplicación principal a la extensión?

Usa App Group — almacenamiento compartido (UserDefaults suite) o un contenedor de archivos. La aplicación principal y la extensión deben estar en el mismo equipo de desarrollo y tener habilitada la capacidad App Groups.

¿Cómo actualizar el contenido de la extensión sin una nueva notificación?

Usa el método didReceive(_:with:) con UNNotificationContentExtensionMediaPlayPauseButtonType para control de medios o solicita una actualización a través del delegado. Una actualización completa del contenido sin una nueva notificación no es posible.

¿Cómo depurar Notification Content Extension?

Selecciona el target de la extensión en Xcode y ejecuta en el simulador. Usa lldb y puntos de interrupción como en una aplicación normal. Para probar, envía una notificación push a través de Firebase Console o localmente mediante Pusher.

Resumen

  • Notification Content Extension es una extensión de iOS para visualización personalizada de notificaciones push.
  • La extensión implementa UNNotificationContentExtension y proporciona una interfaz UIKit completa.
  • Se activa para notificaciones con un categoryIdentifier coincidente.
  • Admite cualquier componente de UI: mapas, imágenes, vídeos, animaciones.
  • Se ejecuta en un proceso aislado con acceso mediante App Group.
  • Límite de tamaño — 50 MB de extensión sin comprimir.
  • Para contenido multimedia, usa UNNotificationAttachment preparado por Service Extension.

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