En Android Nougat y versiones posteriores, las notificaciones push para su aplicación se agrupan automáticamente después del # 4to.
El problema en Android es que al hacer clic en el paquete no se expande la lista de notificaciones push, se abre la aplicación.
Tengo un requisito para identificar a los usuarios que abrieron la aplicación a través de una notificación push. Para notificaciones individuales, esto es fácil ya que puedo explorar intentos adicionales. El problema con el paquete es que los extras son nulos y la intención se ve exactamente igual que si el usuario hiciera clic en el icono del iniciador. No tengo forma de detectar que la navegación se realizó desde una notificación push :(
En caso de que no esté claro: no estoy usando grupos de notificaciones push explícitamente, esto lo hace automáticamente Android. No he configurado ninguna clave de grupo para las notificaciones.
Estoy usando Firebase. Solo construyo la notificación push NotificationCompat
cuando la aplicación está en primer plano, esta lógica no se ejecuta cuando la aplicación está en segundo plano o cerrada ( OnMessageReceived
solo se ejecuta con la aplicación en primer plano).
EDITAR
Sé que podría cambiar la carga útil de PN para el evento que OnMessageReceived
se ejecuta incluso en segundo plano o cerrado. Me gustaría evitar esto, ya que he encontrado muchas personas quejándose de problemas con PN que no llegan en este caso.
http://github.com/firebase/quickstart-android/issues/368
http://github.com/firebase/quickstart-android/issues/219
Quiero detectar a un usuario tocando una PN agrupada incluso si la aplicación no la creó.
fuente
Respuestas:
Solución 1: si maneja la creación de las notificaciones, puede intentar los siguientes pasos:
En primer lugar, cada vez que crea una nueva notificación, puede agruparlos por la misma clave usando
setGroup(...)
:A medida que agrupa las notificaciones por la misma identificación ("group_messages") , ahora puede crear notificaciones de resumen con diferentes propósitos:
Como último paso, puede hacer una
if
verificación para asegurarse de que tiene más de 1 notificaciones con el mismo grupo y luego notificar con una notificación grupal:Puedes combinar el código en tu
onMessageReceived
método. Como puede ver, ahora puede tener una intención personalizada para manejar notificaciones agrupadas. Puede leer más sobre las notificaciones agrupadas aquí .Solución 2: si no desea manejar la creación de notificaciones y aún quiere saber si las notificaciones están agrupadas, puede intentar la siguiente solución:
NotificationManager
tiene la función getActiveNotifications () que devolverá las notificaciones que la aplicación de llamada haya publicado y que el usuario aún no haya descartado. Cuando haces clic en notificaciones agrupadas en Android, las notificaciones no se descartarán. Por lo tanto, puede verificar el tamaño de las notificaciones activas en su actividad de iniciador para detectar si la aplicación se inició haciendo clic en notificaciones agrupadas / agrupadas:Personalmente, preferiría la primera solución, pero de acuerdo con los problemas que haya publicado, también puede usar la segunda opción, pero tenga en cuenta que no podrá diferenciar si la aplicación se inició desde el iniciador o haciendo clic en notificación agrupada.
Con la segunda solución puede haber las siguientes preguntas:
P1: ¿Cómo puedo diferenciar el clic normal de notificación del grupo uno en la misma actividad?
- Simplemente puede definir
click_action
y reenviar clics de notificación normales a diferentes actividades. Revisa los documentos .Si desea reemplazar las notificaciones anteriores, también puede definir lo mismo
tag
en su JSON de notificaciones en el lado del backend. De esta manera, las notificaciones no se agruparán porque las notificaciones más nuevas reemplazarán a las antiguas con la misma etiqueta. Revisa los documentos .Espero que mi respuesta ayude.
fuente
OnMessageReceived
no se ejecuta cuando la aplicación está cerrada. He visto documentación que dice que incluso si logro hacer que la aplicación maneje PN cuando la aplicación está cerrada o en segundo plano, eso no funciona muy bien.La respuesta de @Natig Babayev está bien explicada. Sin embargo, en la segunda parte no ha explicado la forma de distinguir si la aplicación se abrió haciendo clic en el ícono del iniciador o haciendo clic en Push Notification Bundle (considere el caso cuando hay 5 notificaciones que se agrupan automáticamente, pero el usuario inicia el aplicación haciendo clic en el iniciador de aplicaciones y no en el paquete de notificaciones).
Una solución podría ser desactivar las notificaciones de agrupación automática . Sin embargo, esto no es posible . Consulte esta pregunta y esta también
Investigué muchas opciones diferentes y descubrí que la mejor solución sería agrupar las notificaciones usted mismo antes de que lo haga el sistema Android o limitar la cantidad de notificaciones para maximizar las notificaciones desagrupadas al eliminar las notificaciones más antiguas o agruparlas en un paquete separado.
También puede referirse a lo siguiente
fuente