> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Gestión de la bandeja de notificaciones

> Cómo se comportan las notificaciones push móviles de OneSignal en la bandeja de notificaciones en Android e iOS: manejo de clics y descartes, notificaciones restauradas, insignias, borrado de notificaciones programáticamente y extensiones de servicio.

Use esta guía para comprender y controlar qué sucede con sus notificaciones push después de que se muestran en un dispositivo: qué hacen el clic y el descarte, cuándo Android vuelve a mostrar notificaciones, cómo las insignias se mantienen sincronizadas y qué herramientas del SDK le permiten gestionar la bandeja desde el código de su aplicación.

Esta página cubre push móvil (Android e iOS). Para el comportamiento de web push, consulte [Comportamiento de las notificaciones web push](./push).

***

## Ciclo de vida de la notificación en la bandeja

Cada notificación de OneSignal mostrada en un dispositivo es rastreada por el SDK. Lo que sucede después determina si puede llegar a reaparecer:

| Evento                                                                                                         | Qué sucede                                                                                                                                                                     | ¿Puede reaparecer?                                                             |
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| **El usuario hace clic en ella**                                                                               | Se elimina de la bandeja, se marca como clicada, se dispara el [listener de clic](./mobile-sdk-reference#addclicklistener-push), se ejecuta la URL de lanzamiento o el intent. | No                                                                             |
| **El usuario la descarta** (la desliza o toca Borrar todo)                                                     | Se marca como descartada.                                                                                                                                                      | No                                                                             |
| **Su aplicación la borra** con los [métodos del SDK de OneSignal](#borrar-notificaciones-programáticamente)    | Se elimina de la bandeja y se marca como descartada.                                                                                                                           | No                                                                             |
| **Su aplicación la cancela** con el `NotificationManager` nativo de Android                                    | Se elimina de la bandeja, pero **no** se marca como descartada.                                                                                                                | Sí, en Android se restaura en el siguiente reinicio de la aplicación           |
| **Android la elimina forzosamente** (reinicio del dispositivo, actualización de la aplicación, cierre forzado) | Es eliminada por el sistema operativo sin acción del usuario.                                                                                                                  | Sí, consulte [Notificaciones restauradas](#notificaciones-restauradas-android) |

<Warning>
  En Android, borre siempre las notificaciones con los métodos del SDK de OneSignal en lugar de `NotificationManager.cancel()` o `cancelAll()` nativos de Android. Las notificaciones canceladas con las APIs nativas no se marcan como descartadas, por lo que el SDK las restaura la próxima vez que la aplicación se reinicia.
</Warning>

***

## Comportamiento de clic y descarte

**Hacer clic** en una notificación abre su aplicación (o la URL de lanzamiento de la notificación), elimina la notificación de la bandeja y dispara el callback [`addClickListener()`](./mobile-sdk-reference#addclicklistener-push) con la carga útil de la notificación y el ID del botón de acción clicado. Si la notificación clicada pertenece a un grupo, el SDK actualiza o elimina el resumen del grupo. Las notificaciones clicadas nunca se restauran.

**Descartar** una notificación (deslizarla o tocar Borrar todo en la bandeja) la marca como descartada y actualiza el contador de la insignia y cualquier resumen de grupo. Las notificaciones descartadas nunca se restauran. El SDK no proporciona un listener de descarte; el descarte se rastrea internamente.

Las notificaciones mostradas mientras su aplicación está en primer plano pasan primero por el [listener de ciclo de vida en primer plano](./mobile-sdk-reference#addforegroundlifecyclelistener-push), donde puede prevenir la visualización.

***

## Notificaciones restauradas (Android)

Android puede eliminar notificaciones forzosamente sin acción del usuario: al reiniciar el dispositivo, actualizar la aplicación y en cierres forzados (incluidos los administradores de batería agresivos en algunos dispositivos). El SDK de Android vuelve a mostrar (restaura) automáticamente las notificaciones afectadas la próxima vez que la aplicación arranca en frío, para que los mensajes entregados que el usuario nunca vio ni descartó no se pierdan.

Las notificaciones restauradas reaparecen silenciosamente en la [categoría Restored](./android-notification-categories#restored) de baja importancia. Solo se restauran las notificaciones que no fueron clicadas ni descartadas, que están dentro de su TTL y que se recibieron en los últimos 7 días, hasta un máximo de 49 notificaciones.

Las reglas completas de elegibilidad y los controles están en [Notificaciones restauradas (Android)](./osnotification-payload#restored-notifications-android). Para reducir las restauraciones, use un `ttl` más corto al enviar o borre las notificaciones consumidas con los [métodos del SDK a continuación](#borrar-notificaciones-programáticamente). iOS no tiene comportamiento de restauración.

***

## Comportamiento de insignias

En **iOS**, las insignias se establecen mediante la carga útil de la notificación (`ios_badgeType` e `ios_badgeCount`) y requieren un App Group para que la extensión de servicio pueda actualizar los contadores con precisión. De forma predeterminada, el SDK borra la insignia cuando la aplicación se abre.

En **Android**, la insignia del ícono de la aplicación refleja el número de notificaciones de OneSignal activas en la bandeja y se gestiona a través de las [categorías de notificación](./android-notification-categories). El SDK actualiza el contador automáticamente cuando las notificaciones se muestran, descartan, clican o borran, y lo restablece a `0` cuando llama a `clearAllNotifications()`.

La configuración, las opciones por plataforma y la solución de problemas se cubren en [Insignias](./badges).

***

## Borrar notificaciones programáticamente

Borre las notificaciones cuando su contenido se haya consumido en su aplicación, no en eventos del ciclo de vida de la aplicación. Los patrones comunes:

* **Sincronización de contenido consumido**: el usuario abre la pantalla a la que apuntan las notificaciones (una bandeja de entrada, un centro de mensajes o un feed de actividad), por lo que las notificaciones ahora son redundantes. Bórrelas todas, o use los métodos dirigidos si solo se consumió parte del contenido.
* **Cierre de sesión**: borre todo para que las notificaciones del usuario anterior no sean visibles para el siguiente usuario.

Evite borrar en cada lanzamiento o paso a primer plano de la aplicación para "mantener la bandeja limpia". Las notificaciones en la bandeja impulsan la reinteracción, y borrarlas elimina ese punto de entrada. Si está gestionando la acumulación de notificaciones, use `collapse_id` al enviar para reemplazar notificaciones en lugar de apilarlas, o un TTL más corto para expirar las no entregadas.

### `clearAllNotifications()`

Elimina las notificaciones de su aplicación de la bandeja y restablece el contador de la insignia a `0`. En Android, esto elimina solo las notificaciones creadas por OneSignal y las marca como descartadas para que no se restauren. En iOS, esto elimina **todas** las notificaciones entregadas de su aplicación, incluidas las notificaciones locales y los pushes de otros proveedores. Consulte la [referencia completa del método](./mobile-sdk-reference#clearallnotifications).

<Note>
  Si borra al lanzar la aplicación para prevenir notificaciones restauradas, limite la llamada a Android en aplicaciones multiplataforma. En iOS también elimina las notificaciones locales y los pushes de otros proveedores.
</Note>

### `removeNotification()` y `removeGroupedNotifications()` (Android)

Elimine una sola notificación por su ID de notificación de Android, o todas las notificaciones de un grupo por su clave de grupo. Las notificaciones eliminadas se marcan como descartadas y no se restauran. Use estos métodos cuando solo se consumió parte del contenido de la bandeja, como una conversación de varias. Consulte la [referencia del método](./mobile-sdk-reference#removenotification-removegroupednotifications-android).

***

## Descartar notificaciones automáticamente después de un retraso

No existe un parámetro en el momento del envío que elimine una notificación mostrada después de un tiempo determinado. Lo que es posible difiere según la plataforma:

* **Android 8.0 (API 26) y posteriores**: establezca un tiempo de espera en una [extensión de servicio de notificaciones](./service-extensions) usando `setTimeoutAfter()`. Android elimina la notificación de la sombra cuando el tiempo de espera transcurre. En dispositivos por debajo de API 26, la llamada se ignora y la notificación permanece hasta que el usuario interactúa con ella.
* **iOS**: no es compatible. iOS no tiene forma de expirar automáticamente una notificación entregada. Las opciones más cercanas son reemplazarla con una notificación más reciente mediante [`collapse_id`](./push#collapse-id-mobile-push), o eliminarla desde una Notification Service Extension con [`removeDeliveredNotifications(withIdentifiers:)`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removedeliverednotifications\(withidentifiers:\)) de Apple cuando llega un push posterior.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  class NotificationServiceExtension : INotificationServiceExtension {
      override fun onNotificationReceived(event: INotificationReceivedEvent) {
          event.notification.setExtender { builder ->
              // Eliminar esta notificación de la sombra después de 10 minutos (solo API 26+)
              builder.setTimeoutAfter(10 * 60 * 1000L)
          }
      }
  }
  ```

  ```java Java theme={null}
  public class NotificationServiceExtension implements INotificationServiceExtension {
      @Override
      public void onNotificationReceived(INotificationReceivedEvent event) {
          event.getNotification().setExtender(builder ->
              // Eliminar esta notificación de la sombra después de 10 minutos (solo API 26+)
              builder.setTimeoutAfter(10 * 60 * 1000L)
          );
      }
  }
  ```
</CodeGroup>

Para que el tiempo de espera sea por mensaje en lugar de fijo en el código, envíe la duración en [`additionalData`](./osnotification-payload) y léala del evento en su extensión de servicio.

<Note>
  Una notificación eliminada por `setTimeoutAfter()` es descartada por el sistema, por lo que el SDK de OneSignal no la restaura. No la confunda con `ttl`, que controla cuánto tiempo espera un mensaje no entregado a un dispositivo sin conexión y nunca elimina una notificación ya mostrada.
</Note>

***

## Personalizar notificaciones con extensiones de servicio

Las [extensiones de servicio](./service-extensions) se ejecutan antes de que una notificación se muestre, permitiéndole modificar su apariencia, recibir datos en segundo plano o prevenir la visualización por completo:

* En **Android**, implemente `INotificationServiceExtension` y use `setExtender()` para cambiar las opciones de `NotificationCompat`, o llame a `event.preventDefault()` para suprimir la visualización.
* En **iOS**, use una `UNNotificationServiceExtension` (la `OneSignalNotificationServiceExtension` creada durante la configuración) para contenido multimedia enriquecido, incrementos de insignia y entrega confirmada.

<Warning>
  En Android, su extensión de servicio también se ejecuta para las [notificaciones restauradas](#notificaciones-restauradas-android). Los efectos secundarios en `onNotificationReceived` (llamadas de analítica, solicitudes de API, escrituras en base de datos) se vuelven a ejecutar cuando las notificaciones se restauran, y los cambios del extender como `setChannelId()` también se aplican a las restauraciones, lo que puede hacer que alerten de forma sonora. Diseñe su extensión para que las opciones de alerta solo se apliquen a las notificaciones recién entregadas.
</Warning>

***

## Preguntas frecuentes

### ¿Por qué reaparecen notificaciones antiguas cuando la aplicación se abre en Android?

El SDK de Android restaura las notificaciones que fueron eliminadas forzosamente de la bandeja, como después de un reinicio del dispositivo, una actualización de la aplicación o un cierre forzado. Las notificaciones que el usuario descartó o clicó no se restauran. Consulte [Notificaciones restauradas (Android)](./osnotification-payload#restored-notifications-android) para las reglas de elegibilidad y los controles.

### ¿El TTL elimina una notificación de la bandeja después de que expira?

No. El TTL controla cuánto tiempo espera un mensaje no entregado a un dispositivo sin conexión, y en Android también delimita qué notificaciones pueden restaurarse. Nunca elimina una notificación ya mostrada en la bandeja. Para eliminar notificaciones mostradas, use los [métodos de borrado](#borrar-notificaciones-programáticamente). Para eliminarlas después de un tiempo determinado en Android, consulte [Descartar notificaciones automáticamente después de un retraso](#descartar-notificaciones-automáticamente-después-de-un-retraso).

### ¿Puedo borrar la insignia sin borrar la bandeja?

Sí en iOS: la insignia se borra automáticamente cuando la aplicación se abre (a menos que esté deshabilitado), dejando el contenido de la bandeja intacto. En Android, la insignia refleja las notificaciones activas en la bandeja, por lo que no puede establecerse independientemente de ellas. Consulte [Insignias](./badges).

### ¿Existe un listener para cuando un usuario descarta una notificación?

No. El SDK rastrea el descarte internamente para evitar restaurar notificaciones descartadas, pero no expone un evento de descarte. El [listener de clic](./mobile-sdk-reference#addclicklistener-push) cubre solo los clics.

***

<Columns cols={3}>
  <Card title="Referencia del SDK móvil" icon="code" href="./mobile-sdk-reference">
    Referencia completa de los métodos y listeners de notificaciones.
  </Card>

  <Card title="Payload OSNotification" icon="brackets-curly" href="./osnotification-payload">
    Campos del payload y reglas de notificaciones restauradas.
  </Card>

  <Card title="Extensiones de servicio móvil" icon="puzzle-piece" href="./service-extensions">
    Intercepte y personalice notificaciones antes de mostrarlas.
  </Card>
</Columns>
