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(...)
:
val newMessageNotification1 = NotificationCompat.Builder(applicationContext, ...)
...
.setGroup("group_messages")
.build()
A medida que agrupa las notificaciones por la misma identificación ("group_messages") , ahora puede crear notificaciones de resumen con diferentes propósitos:
val notifyIntent = Intent(this, ResultActivity::class.java).apply {
val notifyIntent = Intent(this, ResultActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val notifyPendingIntent = PendingIntent.getActivity(
this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT
)
val summaryNotification = NotificationCompat.Builder(applicationContext, ...)
.setSmallIcon(android.R.drawable.ic_btn_speak_now)
.setContentIntent(notifyPendingIntent)
.setContentTitle("Grouped notification title")
.setContentText("Grouped notification text")
.setGroup("group_messages")
.setGroupSummary(true)
.build()
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:
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationManagerCompat = NotificationManagerCompat.from(applicationContext)
notificationManagerCompat.notify(ID, newMessageNotification1)
val amountOfNotificationsInSameGroup = notificationManager.activeNotifications
// Here we filter notifications that are under same group
.filter { it.notification.group == "group_messages" }
.size
if (amountOfNotificationsInSameGroup >= 2) {
// if we already have minimum of 2 notifications, we'll group them under summary notification
notificationManagerCompat.notify(SUMMARY_NOTIFICATION_ID, summaryNotification)
}
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:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val notificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (notificationManager.activeNotifications.size >= 4) {
// Notifications are grouped
// Put your logic here
// Do not forget to clear notifications
NotificationManagerCompat.from(this).cancelAll()
}
}
}
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.