Skip to main content
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.

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:
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.

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() 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, 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 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). 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. 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. 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.

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.
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.

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.

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 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, o eliminarla desde una Notification Service Extension con removeDeliveredNotifications(withIdentifiers:) de Apple cuando llega un push posterior.
Para que el tiempo de espera sea por mensaje en lugar de fijo en el código, envíe la duración en additionalData y léala del evento en su extensión de servicio.
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.

Personalizar notificaciones con extensiones de servicio

Las extensiones de servicio 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.
En Android, su extensión de servicio también se ejecuta para las notificaciones restauradas. 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.

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) 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. Para eliminarlas después de un tiempo determinado en Android, consulte 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.

¿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 cubre solo los clics.

Referencia del SDK móvil

Referencia completa de los métodos y listeners de notificaciones.

Payload OSNotification

Campos del payload y reglas de notificaciones restauradas.

Extensiones de servicio móvil

Intercepte y personalice notificaciones antes de mostrarlas.