Criar um grupo de notificações

A partir do Android 7.0 (nível 24 da API), é possível exibir notificações relacionadas em um grupo. Por exemplo, se o app mostrar notificações de e-mails recebidos, reúna todas as notificações de novas mensagens de e-mail no mesmo grupo.

Para oferecer suporte a versões mais antigas, adicione uma notificação de resumo que aparece sozinha para resumir todas as notificações separadas. Geralmente, a melhor opção para fazer isso é usar a notificação no estilo da caixa de entrada.

Figura 1. Um grupo de notificações recolhido (acima) e expandido (abaixo).

Use grupos de notificações se todas as condições a seguir forem verdadeiras para seu caso de uso:

  • As notificações filhas são completas e podem ser exibidas individualmente, sem a necessidade de um resumo do grupo.

  • A exibição individual de notificações filhas pode ser vantajosa. Por exemplo:

    • Elas são acionáveis, sem ações específicas para cada notificação.

    • Há mais informações em cada notificação para o usuário ver.

Se as notificações não atenderem aos critérios anteriores, considere atualizar uma notificação com novas informações ou criar uma notificação no estilo de mensagem para mostrar várias atualizações na mesma conversa.

Criar um grupo e adicionar uma notificação

Para criar um grupo de notificações, defina uma string de identificador exclusivo para o grupo. Em seguida, para cada notificação que você quer incluir no grupo, chame setGroup(), transmitindo o nome do grupo. Por exemplo:

Kotlin

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

Java

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Por padrão, as notificações são classificadas de acordo com o momento da postagem, mas é possível mudar essa ordem chamando setSortKey().

Se os alertas do grupo de uma notificação precisarem ser processados por uma notificação diferente, chame setGroupAlertBehavior(). Por exemplo, se você quiser que apenas o resumo do grupo faça ruído, todos os filhos do grupo precisarão ter o comportamento de alerta GROUP_ALERT_SUMMARY. As outras opções são GROUP_ALERT_ALL e GROUP_ALERT_CHILDREN.

Definir um resumo do grupo

As notificações agrupadas precisam ter uma notificação extra que funcione como o resumo do grupo. Para ativar as notificações agrupadas, defina um resumo do grupo. Esse resumo do grupo precisa incluir parte do texto de cada uma das outras notificações no grupo para ajudar o usuário a entender o que está no grupo. A forma como o resumo do grupo é exibido depende da versão do Android:

  • Nas versões do Android anteriores à 7.0 (API de nível 24), que não podem mostrar um grupo aninhado de notificações, o sistema mostra apenas a notificação de resumo do grupo e oculta todas as outras. O usuário pode tocar na notificação de resumo do grupo para abrir o app.

  • No Android 7.0 e versões mais recentes, o sistema mostra a notificação de resumo do grupo como um grupo aninhado de notificações, marcado com snippets de texto de cada notificação agrupada. Ele não mostra o texto que você definiu na notificação de resumo do grupo. O usuário pode expandir o grupo aninhado de notificações para ver as notificações individuais no grupo, conforme mostrado na Figura 1.

Mesmo que as versões mais recentes do Android não mostrem o texto de resumo do grupo projetado, sempre será necessário definir um resumo manualmente para ativar as notificações agrupadas. O comportamento do resumo do grupo pode variar em alguns tipos de dispositivos, como wearables. Definir conteúdo avançado no resumo do grupo ajuda a oferecer a melhor experiência em todos os dispositivos e versões.

Para adicionar um resumo do grupo, faça o seguinte:

  1. Crie uma nova notificação com uma descrição do grupo. Geralmente, a melhor opção é usar a notificação no estilo de caixa de entrada.

  2. Adicione a notificação de resumo ao grupo chamando setGroup().

  3. Para especificar que ele precisa ser usado como resumo do grupo, chame setGroupSummary(true).

O código a seguir mostra um exemplo de como criar um resumo de grupo:

Kotlin

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg Check this out")
                .addLine("Jeff Chang Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

Java

// Use constant ID for notifications used as group summary.
int SUMMARY_ID = 0;
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification1 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(new NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg  Check this out")
                .addLine("Jeff Chang    Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build();

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

O ID da notificação de resumo precisa permanecer o mesmo para que seja postado apenas uma vez e para que você possa atualizá-lo mais tarde se as informações do resumo mudarem. As adições subsequentes ao grupo precisam resultar na atualização do resumo existente.

Para ver um exemplo de código que usa notificações, consulte o Exemplo de notificações do Android (em inglês).

Agrupamento automático

No Android 7.0 (nível 24 da API) e versões mais recentes, se o app enviar quatro ou mais notificações e não especificar uma chave de grupo ou um resumo de grupo, o sistema poderá agrupá-las automaticamente. As notificações agrupadas aparecem automaticamente com uma notificação de resumo do grupo identificada com snippets de texto de algumas das notificações agrupadas. O usuário pode expandir essa notificação de resumo para ver cada notificação individual, como acontece com notificações agrupadas manualmente.

O comportamento do agrupamento automático pode variar em alguns tipos de dispositivos. Para oferecer a melhor experiência em todos os dispositivos e versões, se você sabe que as notificações precisam ser agrupadas, especifique uma chave e um resumo do grupo para garantir que elas estejam agrupadas.