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: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 callbackaddClickListener() 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 unttl 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.
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 conremoveDeliveredNotifications(withIdentifiers:)de Apple cuando llega un push posterior.
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
INotificationServiceExtensiony usesetExtender()para cambiar las opciones deNotificationCompat, o llame aevent.preventDefault()para suprimir la visualización. - En iOS, use una
UNNotificationServiceExtension(laOneSignalNotificationServiceExtensioncreada durante la configuración) para contenido multimedia enriquecido, incrementos de insignia y entrega confirmada.
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.