Descripción general de notificaciones

Una notificación es un mensaje que muestra Android fuera de la IU de la app para proporcionar al usuario recordatorios, mensajes de otras personas y otra información puntual de la app. Los usuarios pueden presionar la notificación para abrir la app o realizar una acción directamente desde la notificación.

En esta página, se proporciona una descripción general acerca de dónde aparecen las notificaciones y cuáles son las características disponibles. Si quieres comenzar a compilar tus notificaciones, consulta Cómo crear una notificación.

Para obtener más información sobre el diseño y los patrones de interacción, consulta la guía de diseño de notificaciones.

Presentación en un dispositivo

Las notificaciones se muestran a los usuarios en diferentes ubicaciones y formatos (por ejemplo, como un ícono en la barra de estado, una entrada más detallada en el panel lateral de notificaciones o un distintivo en el ícono de la app), así como en wearables sincronizados automáticamente.

Barra de estado y panel de notificaciones

Cuando envías una notificación, primero aparece como un ícono en la barra de estado.

Figura 1: Los íconos de notificación aparecen en el lado izquierdo de la barra de estado

Los usuarios pueden deslizar hacia abajo la barra de estado para abrir el panel lateral de notificaciones, donde pueden ver más detalles y realizar acciones desde la notificación.

Figura 2: Notificaciones en el panel lateral

Los usuarios pueden arrastrar hacia abajo una notificación del panel lateral para abrir la vista expandida, que muestra contenido adicional y botones de acción, de haberlos. A partir de Android 13, esta vista expandida incluye un botón que les permite a los usuarios detener una app que tiene servicios en primer plano en curso.

La notificación permanecerá visible en el panel lateral hasta que la app o el usuario la descarten.

Notificación emergente

A partir de Android 5.0, las notificaciones pueden aparecer brevemente en una ventana flotante llamada notificación emergente. Normalmente, este formato se usa para las notificaciones importantes que el usuario debe ver de inmediato y solo se muestra si el dispositivo está desbloqueado.

Figura 3: Notificación emergente que aparece frente a la app que esté en primer plano

La notificación emergente aparece en el momento en que la app emite la notificación y desaparece después de un momento, pero permanece visible en el panel lateral de notificaciones como de costumbre.

Entre los ejemplos de condiciones que pueden activar notificaciones emergentes se incluyen los siguientes:

  • La actividad del usuario se encuentra en el modo de pantalla completa (la app usa fullScreenIntent).
  • La notificación tiene prioridad alta y usa tonos o vibración en dispositivos con Android 7.1 (nivel de API 25) y versiones anteriores.
  • El canal de notificaciones tiene importancia alta en los dispositivos que ejecutan Android 8.0 (nivel de API 26) y versiones posteriores.

Pantalla de bloqueo

A partir de Android 5.0, las notificaciones pueden aparecer en la pantalla de bloqueo.

Puedes programar el nivel de detalle visible en las notificaciones que publica tu app en una pantalla de bloqueo segura, o incluso elegir si la notificación se mostrará en la pantalla de bloqueo o no.

Los usuarios pueden emplear la configuración del sistema para elegir el nivel de detalle visible en las notificaciones de la pantalla de bloqueo, incluida la opción de inhabilitar todas las notificaciones en esta pantalla. A partir de Android 8.0, los usuarios pueden optar por inhabilitar o habilitar las notificaciones en la pantalla de bloqueo para cada canal de notificaciones.

Figura 4: Notificaciones en la pantalla de bloqueo con contenido sensible oculto

Para obtener más información, consulta cómo configurar la visibilidad de las notificaciones de la pantalla de bloqueo.

Distintivo en el ícono de la app

En los selectores compatibles en dispositivos con Android 8.0 (nivel de API 26) y versiones posteriores, los íconos de la app indican que hay nuevas notificaciones con un "distintivo" de color (también denominado "punto de notificación") en el ícono de la app correspondiente.

Los usuarios pueden mantener presionado el ícono de la app para ver las notificaciones asociadas con ella. Luego, los usuarios pueden descartar las notificaciones o interactuar con ellas desde ese menú, de forma similar al panel lateral.

Figura 5: Insignias de notificación y menú de presión prolongada

Para obtener más información sobre cómo funcionan las insignias, consulta Insignias de notificaciones.

Dispositivos con Wear OS

Si el usuario tiene un dispositivo Wear OS vinculado, todas las notificaciones aparecerán allí automáticamente, incluidos los detalles y botones de acción expandibles.

Para mejorar la experiencia, puedes personalizar el formato de las notificaciones en wearables y proporcionar diferentes acciones, como respuestas sugeridas y respuestas de entrada de voz. Si necesitas más información, consulta cómo agregar características específicas para wearables a tu notificación.

Figura 6: Notificaciones que aparecen automáticamente en un dispositivo Wear OS vinculado

Anatomía de las notificaciones

El diseño de una notificación está determinado por las plantillas del sistema; la app simplemente define el contenido de cada sector de la plantilla. Algunos detalles de la notificación aparecen solo en la vista ampliada.

Figura 7: Notificación con detalles básicos

Las partes más comunes de una notificación se indican en la Figura 7:

  1. Ícono pequeño: Es obligatorio y se establece con setSmallIcon().
  2. Nombre de la app: Proporcionado por el sistema.
  3. Marca de tiempo: El sistema la proporciona, pero puedes anularla con setWhen() o bien ocultarla con setShowWhen(false).
  4. Ícono grande: Es opcional (en general, se usa solo para fotos de contacto; no lo uses para el ícono de la app) y se configura con setLargeIcon().
  5. Título: Es opcional y se establece con setContentTitle().
  6. Texto: Es opcional y se establece con setContentText().

Te recomendamos que uses plantillas del sistema para garantizar una compatibilidad de diseño correcta en todos los dispositivos. Sin embargo, si es necesario, también puedes crear un diseño de notificación personalizado.

Si quieres obtener más información para crear una notificación con estas características y más, lee Cómo crear una notificación.

Acciones de la notificación

Aunque no es obligatorio, cada notificación debería abrir una actividad de app adecuada cuando se la presiona. Además de esta acción de notificación predeterminada, puedes agregar botones de acción que ejecuten una tarea relacionada con la app desde la notificación (en general, sin abrir una actividad), como se muestra en la figura 9.

Figura 9: Notificación con botones de acción

A partir de Android 7.0 (nivel de API 24), también puedes agregar una acción para responder a los mensajes o ingresar otro texto directamente desde la notificación.

A partir de Android 10 (nivel de API 29), la plataforma puede generar automáticamente botones para acciones basadas en intenciones sugeridas.

En Cómo crear una notificación, se explica en más detalle el proceso para agregar botones de acción.

Cómo solicitar que se desbloquee el dispositivo

Es probable que los usuarios vean acciones de notificación en la pantalla de bloqueo del dispositivo. Si una acción de notificación determinada causa que una app inicie una actividad o envíe una respuesta directa, los usuarios deben desbloquear el dispositivo para que la app pueda invocar esa acción de notificación.

En Android 12 (nivel de API 31) y versiones posteriores, puedes configurar una acción de notificación, de modo que el dispositivo se deba desbloquear para que la app invoque esa acción, independientemente del flujo de trabajo que inicie la acción. Esta opción permite agregar una capa de seguridad adicional a las notificaciones en dispositivos bloqueados.

Para solicitar que se desbloquee el dispositivo antes de que la app invoque una acción de notificación determinada, pasa true a setAuthenticationRequired() cuando creas la acción de notificación, como se muestra en el siguiente fragmento de código:

Kotlin

val moreSecureNotification = Notification.Builder(
        context, NotificationListenerVerifierActivity.TAG)
    .addAction(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

Java

Notification moreSecureNotification = new Notification.Builder(
        context, NotificationListenerVerifierActivity.TAG)
    .addAction(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

Notificación expandible

De forma predeterminada, el contenido de texto de la notificación se trunca para que quepa en una línea. Si deseas que la notificación sea más larga, puedes aplicar una plantilla adicional que habilite un área de texto más grande y expandible, como se muestra en la figura 8.

Figura 8: Notificación expandible para texto largo

También puedes crear una notificación expandible con una imagen de estilo similar a la bandeja de entrada, a una conversación de chat o a los controles de reproducción de contenido multimedia. Para obtener más información, consulta Cómo crear una notificación expandible.

Actualizaciones de notificaciones y grupos

Para no abrumar a los usuarios con notificaciones múltiples o redundantes cuando haya actualizaciones, una posibilidad es actualizar una notificación existente en lugar de emitir una nueva o, también, usar una notificación de bandeja de entrada a fin de mostrar las novedades de la conversación.

Sin embargo, si es necesario enviar varias notificaciones, puedes concentrarlas en un grupo (disponible en Android 7.0 y versiones posteriores). Un grupo de notificaciones te permite juntar varias notificaciones en una sola publicación en el panel lateral de notificaciones, con un resumen. Luego, el usuario puede expandir la notificación grupal para ver los detalles de cada notificación individual.

El usuario puede expandir progresivamente el grupo de notificaciones y cada notificación individual para obtener más detalles.

Figura 10: Grupo de notificaciones contraído y expandido

Para saber cómo agregar notificaciones a un grupo, consulta Cómo crear un grupo de notificaciones.

Canales de notificaciones

A partir de Android 8.0 (nivel de API 26), todas las notificaciones deben asignarse a un canal; si no, no aparecerán. Cuando se categorizan las notificaciones en canales, los usuarios pueden inhabilitar canales de notificaciones específicos de la app (en lugar de inhabilitar todas las notificaciones) y controlar las opciones visuales y auditivas de cada canal, todo desde la configuración del sistema Android (Figura 11). Los usuarios también pueden mantener presionada una notificación para cambiar los comportamientos del canal asociado.

En los dispositivos que ejecutan Android 7.1 (nivel de API 25) y versiones anteriores, los usuarios solo pueden administrar las notificaciones de cada app de manera individual (de hecho, cada app tiene solo un canal en Android 7.1 y versiones anteriores).

Figura 11: Configuración de notificaciones para la app de Reloj y uno de sus canales

Una app puede tener varios canales de notificaciones, un canal individual para cada tipo de notificación que emita la app. Una app también puede crear canales de notificaciones en respuesta a las elecciones realizadas por los usuarios de tu app. Por ejemplo, puedes configurar canales de notificaciones individuales para cada grupo de conversación creado por un usuario en una app de mensajería.

El canal también es el lugar donde se especifica el nivel de importancia de las notificaciones en Android 8.0 y versiones posteriores. Por lo tanto, todas las notificaciones publicadas en el mismo canal de notificaciones tienen el mismo comportamiento.

Para obtener más información, consulta Cómo crear y administrar canales de notificaciones.

Importancia de la notificación

Android usa la importancia de una notificación para determinar el nivel de interrupción (visual y auditiva) de cada notificación. Cuanto mayor sea la importancia de una notificación, mayor será el nivel de interrupción.

En Android 8.0 (nivel de API 26) y versiones posteriores, se determina la importancia de una notificación según el objeto importance del canal al que se envió la notificación. Los usuarios pueden cambiar la importancia de un canal de notificaciones en la configuración del sistema (Figura 12). En Android 7.1 (nivel de API 25) y versiones anteriores, se determina la importancia de cada notificación según el objeto priority de la notificación.

Figura 12: Los usuarios pueden cambiar la importancia de cada canal en Android 8.0 y versiones posteriores

Los posibles niveles de importancia son los siguientes:

  • Urgente: emite un sonido y aparece como una notificación emergente.
  • Alta: emite un sonido.
  • Media: sin sonido.
  • Bajo: sin sonido y no aparece en la barra de estado.

Todas las notificaciones, independientemente de su importancia, aparecen en ubicaciones de la IU no disruptivas del sistema, como en el panel lateral de notificaciones o en forma de distintivos en el ícono de selector (aunque puedes modificar el aspecto del distintivo de notificación).

Para obtener más información, consulta cómo establecer la importancia.

Modo No interrumpir

A partir de Android 5.0 (nivel de API 21), los usuarios pueden habilitar el modo No interrumpir, que silencia los sonidos y la vibración de todas las notificaciones. Estas siguen apareciendo en la IU del sistema normalmente, a menos que el usuario especifique lo contrario.

Hay tres niveles disponibles en el modo No interrumpir:

  • Silencio total: bloquea todos los sonidos y vibraciones, incluso de alarmas, música, videos y juegos.
  • Solo alarmas: bloquea todos los sonidos y vibraciones, excepto las alarmas.
  • Solo prioridad: los usuarios pueden configurar qué categorías del sistema pueden interrumpirlos (por ejemplo, solo alarmas, recordatorios, eventos, llamadas o mensajes). Para mensajes y llamadas, los usuarios también pueden optar por filtrar según quién sea el remitente o la persona que llama (Figura 13).

Figura 13: Los usuarios pueden permitir notificaciones según categorías del sistema (izquierda) y según el remitente del mensaje o la llamada (derecha)

En Android 8.0 (nivel de API 26) y versiones posteriores, los usuarios pueden, además, permitir notificaciones según categorías específicas de la app (también denominadas canales) anulando el modo No interrumpir canal por canal. Por ejemplo, una app de pagos puede tener canales para notificaciones relacionadas con retiros y depósitos. El usuario puede optar por permitir notificaciones de retiro, de depósito o ambas en el modo de prioridad. En los dispositivos con Android 7.1 (nivel de API 25) y versiones anteriores, los usuarios pueden permitir notificaciones de app específicas, en lugar de hacerlo por canales.

A fin de configurar correctamente las notificaciones para estas opciones de configuración, debes establecer una categoría y un canal para todo el sistema.

Notificaciones para servicios en primer plano

Se requiere una notificación cuando la app está ejecutando un "servicio en primer plano", es decir, un Service que se ejecuta en segundo plano y que es de larga duración y visible para el usuario, como un reproductor de contenido multimedia. Esta notificación no puede ser descartada como otras. Para quitar la notificación, el servicio debe detenerse o quitarse del estado "en primer plano".

Para obtener más información, consulta Ejecución de un servicio en primer plano. Si estás compilando un reproductor de contenido multimedia, también puedes consultar cómo usar notificaciones de MediaStyle con un servicio en primer plano.

Límites de publicación

A partir de Android 8.1 (nivel de API 27), las apps no pueden hacer que una notificación suene más de una vez por segundo. Si tu app publica varias notificaciones en un segundo, todas aparecen normalmente, pero solo la primera de cada segundo emite un sonido.

Sin embargo, Android también aplica un límite de frecuencia de actualización de notificaciones. Si publicas actualizaciones de una misma notificación con demasiada frecuencia (varias en menos de un segundo), el sistema puede eliminar algunas.

Compatibilidad de notificaciones

A partir de Android 1.0, la IU del sistema de notificaciones y las API relacionadas con notificaciones han evolucionado continuamente. Para utilizar las funciones más recientes de la API de notificaciones y, al mismo tiempo, admitir dispositivos más antiguos, utiliza la API de notificaciones de la biblioteca de compatibilidad: NotificationCompat y sus subclases, así como NotificationManagerCompat. De esta manera, no necesitas escribir código condicional para verificar los niveles de API porque estas API lo manejan automáticamente por ti.

NotificationCompat se actualiza a medida que evoluciona la plataforma para incluir los métodos más recientes. Es importante tener en cuenta que la disponibilidad de un método de NotificationCompat no garantiza que se proporcione la función correspondiente en dispositivos más antiguos. En algunos casos, cuando se llama a una API reciente en dispositivos más antiguos, esto da lugar a una no-op. Por ejemplo, NotificationCompat.addAction() muestra el botón de acción únicamente en dispositivos que ejecutan Android 4.1 (nivel de API 16) y versiones posteriores.

El siguiente es un resumen de los cambios más significativos de las notificaciones de Android.

Android 4.1 (nivel de API 16)

  • Se introdujeron plantillas de notificación expandibles (llamadas estilos de notificación), que permiten usar un área de contenido más grande para mostrar información. Los usuarios pueden usar un gesto de desplazamiento hacia arriba o abajo a fin de expandir una notificación.
  • También se incorporó la capacidad de agregar acciones adicionales a una notificación a través de botones.
  • Se agregó la posibilidad de que los usuarios desactiven las notificaciones de cada app individual desde la configuración.

Android 4.4 (niveles de API 19 y 20)

  • Se agregaron servicios de escucha de notificaciones a la API.
  • Se agregó compatibilidad con Android Wear (ahora denominado Wear OS) en el nivel de API 20.

Android 5.0 (nivel de API 21)

  • Se incorporaron las notificaciones emergentes y en la pantalla de bloqueo.
  • El usuario ahora puede poner el teléfono en modo No interrumpir y configurar qué notificaciones pueden interrumpirlo cuando el dispositivo está en modo de solo prioridad.
  • Los métodos agregados a la API establecen si se muestra o no una notificación en la pantalla de bloqueo (setVisibility()) y especifican la versión "pública" del texto de la notificación.
  • Se agregó el método setPriority(), que indica al sistema el nivel de "interrupción" de esta notificación (p. ej., si se establece un valor alto, la notificación aparecerá como emergente).
  • Se agregó compatibilidad con pilas de notificaciones a los dispositivos con Android Wear (ahora denominado Wear OS). Agrupa notificaciones en una pila utilizando setGroup(). Ten en cuenta que las pilas de notificaciones todavía no eran compatibles con tablets ni teléfonos. Las pilas de notificaciones luego se comenzaron a denominar grupos o paquetes.

Android 7.0 (nivel de API 24)

  • Se rediseñaron las plantillas de notificación para destacar la hero image y el avatar.
  • Se agregaron tres plantillas de notificación: una para las apps de mensajería y las otras dos para personalizar la presentación del contenido con la capacidad de expansión y otras opciones del sistema.
  • Se agregó compatibilidad con dispositivos de mano (teléfonos y tablets) para los grupos de notificaciones. Usa la misma API que las pilas de notificaciones de Android Wear (ahora denominado Wear OS) introducidas en Android 5.0 (nivel de API 21).
  • Los usuarios pueden responder directamente dentro de la notificación (ingresando texto que luego se envía a la app superior de la notificación) desde la respuesta intercalada.

Android 8.0 (nivel de API 26)

  • Las notificaciones individuales ahora deben colocarse en un canal específico.
  • Los usuarios pueden desactivar las notificaciones por canal, en lugar de desactivar todas las notificaciones de una app.
  • Las apps con notificaciones activas muestran un "distintivo" de notificación en la parte superior del ícono de la app en la pantalla principal o el selector.
  • Los usuarios ahora pueden posponer una notificación desde el panel. Puedes establecer un tiempo de espera automático para las notificaciones.
  • También puedes establecer el color de fondo de la notificación.
  • Con respecto a los comportamientos de las notificaciones, se movieron algunas API de Notification a NotificationChannel. Por ejemplo, usa NotificationChannel.setImportance() en lugar de NotificationCompat.Builder.setPriority() en Android 8.0 y versiones posteriores.

Android 13.0 (nivel de API 33)