Criar um grupo de notificações

No Android 7.0 (nível 24 da API) e versões mais recentes, é possível mostrar notificações relacionadas em um grupo. Por exemplo, se o app mostrar notificações de 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 apareça sozinha para resumir todas as notificações separadas. Uma notificação no estilo de caixa de entrada é a maneira mais comum de fazer isso.

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

Se todas as condições a seguir forem verdadeiras para seu caso de uso, use grupos de notificações:

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

  • Há um benefício em mostrar as notificações filhas individualmente. Por exemplo:

    • Elas têm ações específicas para cada notificação.

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

Se as notificações não atenderem aos critérios anteriores, considere atualizar uma notificação atual 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 exclusiva para o grupo. Em seguida, para cada notificação que você quiser no grupo, chame setGroup, transmitindo o nome do grupo. Exemplo:

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()

Por padrão, as notificações são classificadas de acordo com o momento em que são postadas, mas você pode mudar a ordem chamando setSortKey.

Se os alertas de um grupo de notificações precisarem ser processados por uma notificação diferente notificação, chame setGroupAlertBehavior. Por exemplo, se você quiser que apenas o resumo do grupo faça barulho, todos os filhos do grupo precisam ter o comportamento de alerta do 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 funcione como o resumo do grupo. Para ativar as notificações agrupadas, defina um resumo do grupo. Esse resumo precisa incluir parte do texto de cada uma das outras notificações do 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:

  • As versões do Android anteriores à 7.0 (nível 24 da API) não podem mostrar um grupo aninhado de notificações. Portanto, 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, rotulado com snippets de texto de cada notificação agrupada. Ele não mostra o texto definido 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 que você cria, é 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, isso é melhor feito com a notificação no estilo de caixa de entrada.

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

  3. Especifique que ela precisa ser usada como o resumo do grupo chamando setGroupSummary(true).

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

// 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)
}

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

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 de grupo ou um resumo do grupo, o sistema poderá agrupá-las automaticamente. As notificações agrupadas automaticamente aparecem 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 ver cada notificação individual, como acontece com as notificações agrupadas manualmente.

O comportamento de 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 do grupo para garantir que elas sejam agrupadas.