Notification Category (categoría de notificaciones) es un mecanismo de iOS para agrupar notificaciones push por tipo y adjuntarles acciones personalizadas. La categoría determina qué botones se muestran al usar 3D Touch o long-press en una notificación, así como el modo en que el sistema procesa las notificaciones entrantes de este tipo. Según la Documentación para Desarrolladores de Apple, UNNotificationCategory se registra en UNUserNotificationCenter y se vincula a una notificación mediante el campo category en el payload APNS.
Puntos Clave
Notification Category es una función de iOS (desde la versión 8.0) que permite a los desarrolladores clasificar notificaciones push y añadirles acciones interactivas. Cuando un usuario recibe una notificación y presiona con fuerza (3D Touch) o hace una pulsación larga, aparecen botones definidos por la categoría. Esto hace que las notificaciones sean interactivas y permite a los usuarios actuar sin abrir la aplicación.
Una categoría se registra mediante un objeto UNNotificationCategory, que contiene un identificador, un array de acciones y parámetros de visualización opcionales. El sistema usa el identificador de categoría del payload APNS para encontrar la categoría registrada y mostrar los botones correspondientes.
A diferencia de Android Notification Channel, iOS Category no gestiona la importancia, el sonido ni la vibración. Su único propósito es proporcionar capacidades interactivas para las notificaciones: botones de respuesta, confirmación, cancelación o entrada de texto.
Las categorías no son obligatorias para mostrar notificaciones push en iOS. La notificación aparecerá de todos modos — con botones si hay una categoría registrada, o sin ellos. Las categorías solo son necesarias para añadir interactividad a las notificaciones.
El mecanismo de categorías consta de cuatro etapas: registrar la categoría en el cliente, enviar un payload APNS con la categoría, que el sistema reconozca la categoría y gestionar la acción del usuario.
Las acciones en una categoría pueden ser de dos tipos: foreground (abren la aplicación) y background (se ejecutan en segundo plano). Para las acciones en segundo plano, la aplicación dispone de tiempo limitado (unos 30 segundos) para procesar en UNNotificationActionHandler.
UNNotificationCategory admite varias opciones mediante el parámetro options: customDismissAction — recibir un evento al deslizar la notificación, allowInCarPlay — mostrar acciones en CarPlay, hiddenPreviewsBodyPlaceholder — texto de marcador de posición personalizado para vistas previas ocultas.
iOS proporciona dos tipos de acciones para las categorías de notificaciones. Cada tipo tiene su propio propósito y forma de interactuar con el usuario.
| Tipo | Clase | Descripción | Ejemplo |
|---|---|---|---|
| Acción simple | UNNotificationAction | Un botón con título y opciones (destructive, foreground, authenticationRequired) | “Eliminar”, “Ver” |
| Entrada de texto | UNTextInputAction | Un botón que abre un campo de entrada de texto con un marcador de posición | “Responder”, “Comentar” |
UNTextInputAction es una función única de iOS. Cuando el usuario pulsa el botón “Responder”, el sistema muestra un campo de texto donde el usuario escribe su respuesta. El texto introducido se pasa al delegado junto con el identificador de la acción. Esto permite implementar respuestas rápidas sin abrir la aplicación.
Opciones de acción: options.authenticationRequired — requiere desbloquear el dispositivo, options.destructive — resalta el botón en rojo (para acciones peligrosas), options.foreground — abre la aplicación después de pulsar.
Las categorías se registran al iniciar la aplicación, normalmente en el método didFinishLaunchingWithOptions. El registro se realiza a través de UNUserNotificationCenter, después de solicitar permiso para notificaciones. Las categorías pueden actualizarse en cada inicio — las versiones antiguas se reemplazan por las nuevas.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Responder",
options: [.foreground],
textInputButtonTitle: "Enviar",
textInputPlaceholder: "Escriba un mensaje..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Eliminar",
options: [.destructive]
)
let messageCategory = UNNotificationCategory(
identifier: "message",
actions: [replyAction, deleteAction],
intentIdentifiers: [],
options: [.customDismissAction]
)
UNUserNotificationCenter.current()
.setNotificationCategories([messageCategory])
}
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UNUserNotificationCenter.current().delegate = self
registerNotificationCategories()
return true
}
}
Después de registrar la categoría, cualquier notificación con category = “message” en el payload APNS mostrará los botones “Responder” y “Eliminar”. La gestión de pulsaciones ocurre en userNotificationCenter:didReceive response, donde actionIdentifier determina qué botón se ha pulsado.
Cuando el usuario pulsa un botón de categoría, iOS llama al UNUserNotificationCenterDelegate con un objeto UNNotificationResponse. El response.actionIdentifier contiene el identificador del botón pulsado, y response.notification.request.content.userInfo contiene los datos personalizados del payload.
Los desarrolladores familiarizados con Android Notification Channels suelen confundirlos con iOS Notification Categories. A pesar del nombre similar, estos mecanismos resuelven tareas diferentes y funcionan de forma distinta.
Ambas plataformas pueden combinar ambos mecanismos: en Android, una notificación puede pertenecer a un canal con acciones de NotificationCompat, mientras que en iOS, una categoría complementa los canales, que en iOS se llaman thread-id y sirven para agrupar notificaciones en el centro de notificaciones.
Para que una notificación se muestre con los botones de la categoría, el servidor debe incluir la clave category en el payload APNS. Sin esta clave, el sistema no sabrá qué categoría aplicar a la notificación.
{
"aps": {
"alert": {
"title": "Nuevo mensaje",
"body": "Ana: ¡Hola! ¿Cómo estás?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
La clave category debe coincidir exactamente con el identificador registrado mediante setNotificationCategories en el cliente. Las mayúsculas y minúsculas importan — “message” y “Message” se consideran categorías diferentes. Si no se encuentra la categoría, la notificación aparece sin botones, sin errores en los registros.
Si el servidor envía una notificación con una categoría que no está registrada en el cliente, iOS ignora la categoría y muestra la notificación sin botones. El error no se registra y la aplicación no se entera del desajuste. Se recomienda sincronizar la lista de categorías entre el servidor y el cliente.
Al diseñar categorías de notificaciones en iOS, siga el principio de una categoría — un escenario. Cada categoría debe corresponder a un tipo específico de interacción: responder a un mensaje, confirmar una acción o rechazar una solicitud. No mezcle diferentes escenarios en una misma categoría.
Use UNTextInputAction para escenarios donde el usuario necesita introducir texto sin abrir la aplicación: respuestas de mensajería, comentarios, notas rápidas. Las acciones de texto aumentan la participación — el usuario realiza una acción significativa en 2 toques en lugar de 5+ dentro de la aplicación.
Para acciones peligrosas (eliminar, bloquear), use la opción destructive. iOS resaltará estos botones en rojo, advirtiendo al usuario sobre la irreversibilidad de la acción. Para acciones que requieren desbloquear el dispositivo (ver datos personales), especifique authenticationRequired.
Pruebe las categorías en diferentes dispositivos: en iPhone con 3D Touch, en iPhone sin 3D Touch (long-press), en iPad y en Mac. El comportamiento de las categorías puede diferir ligeramente entre las plataformas de Apple. Preste especial atención a CarPlay: los botones de categoría aparecen en la pantalla del coche y deben diseñarse con texto mínimo para la seguridad del conductor.
Preguntas Frecuentes
No hay límites — iOS no impone un límite en la cantidad de UNNotificationCategory. Sin embargo, en la práctica, se recomienda no usar más de 10–15 categorías para no complicar la gestión en el delegado. Cada categoría puede contener hasta 4 acciones (botones). Más de 4 acciones son ignoradas por el sistema.
Implemente el protocolo UNUserNotificationCenterDelegate y el método didReceive. Verifique response.actionIdentifier: UNNotificationDismissActionIdentifier — deslizar para descartar, UNNotificationDefaultActionIdentifier — toque en el cuerpo, o su identificador de botón personalizado. Para botones de entrada de texto, el texto está disponible a través de response.userText.
Category — define las acciones interactivas (botones) para la notificación. Thread-id — agrupa las notificaciones en el Centro de Notificaciones por tema. Ambas claves se especifican en el payload APNS. Category y thread-id no están relacionados: una notificación puede tener categoría pero no thread-id, y viceversa.
Sí, UNNotificationCategory es compatible con macOS 10.14+ (Mojave) en aplicaciones que usan el framework UserNotifications. El comportamiento de las categorías en macOS es similar al de iOS: al hacer clic en una notificación, se muestran botones y la gestión se realiza a través de UNUserNotificationCenterDelegate.
Se recomienda registrar las categorías en cada inicio de la aplicación mediante setNotificationCategories. El sistema reemplaza el conjunto antiguo de categorías por el nuevo en cada llamada. Si no se actualizan, las categorías persisten entre inicios, pero cuando el código cambia, las categorías antiguas pueden causar un comportamiento inesperado.
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