Criar um grupo de notificações

A partir do Android 7.0 (nível 24 da API), você pode mostrar notificações relacionadas em um grupo. Por exemplo, se o app mostra notificações para e-mails recebidos, coloque todas as notificações de novas mensagens de e-mail no mesmo grupo para que elas sejam recolhidas juntas.

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 de caixa de entrada.

Figura 1. Um grupo de notificações recolhido (parte de cima) e expandido (parte de baixo).

Use grupos de notificações apenas quando 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.

Se suas notificações não atenderem aos critérios anteriores, atualize uma notificação existente com novas informações ou crie 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. 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 horário de postagem, mas é possível mudar essa ordem chamando setSortKey().

Se os alertas de um grupo de notificações precisarem ser gerenciados por outra notificação, 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 de grupo 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 atue como resumo do grupo. Para ativar as notificações agrupadas, é necessário definir um resumo de grupo. Esse resumo de 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 é mostrado depende da versão do Android:

  • Em versões do Android anteriores à 7.0 (nível 24 da API), 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, rotuladas com snippets de texto de cada notificação agrupada. Ele não exibe o texto definido na notificação de resumo do grupo. O usuário pode expandir o grupo aninhado de notificações para conferir 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 do resumo do grupo que você criar, é necessário definir manualmente um resumo para ativar as notificações agrupadas. O comportamento do resumo do grupo pode variar em alguns tipos de dispositivos, como wearables. A configuração de 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 a 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. Especifique que ele precisa ser usado como o resumo do grupo chamando 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 ser publicado apenas uma vez. Portanto, você poderá atualizá-lo mais tarde se as informações do resumo mudarem. As adições posteriores ao grupo precisam resultar na atualização do resumo atual.

Para conferir um exemplo de código que usa notificações, consulte o Exemplo de notificações do Android .

Agrupamento automático

No Android 7.0 (nível 24 da API) e versões mais recentes, se o app enviar notificações e não especificar uma chave 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 rotulada com snippets de texto de algumas das notificações agrupadas. O usuário pode expandir essa notificação de resumo para conferir cada notificação individual, como nas 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ê souber que as notificações precisam ser agrupadas, especifique uma chave de grupo e um resumo de grupo para garantir que elas sejam agrupadas.