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 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.
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.
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ística | Content Extension | Service Extension |
|---|---|---|
| Propósito | UI personalizada de notificación | Modificación del contenido antes de mostrar |
| Tiempo de ejecución | Mientras el usuario ve la notificación | Hasta 30 segundos en segundo plano |
| Interfaz | UIView UIKit completo | Sin interfaz |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
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.
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.
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.
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.
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.
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.
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.
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)
}
}
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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
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.
Lea también