Criar uma notificação de atualização em tempo real

O sistema promove notificações de atualizações dinâmicas. As notificações promovidas aparecem com mais destaque nas interfaces do sistema, incluindo na parte de cima da gaveta de notificações e da tela de bloqueio, e como um ícone na barra de status.

Figura 1. Exemplo de uma notificação de atualização em tempo real.

Os cards de notificação promovidos têm as seguintes características de aparência:

  • Expandido por padrão
  • Não recolhível

Sua notificação precisa atender aos seguintes requisitos para se qualificar como uma atualização ao vivo:

  • Precisa ser "Padrão/Sem estilo", BigTextStyle, CallStyle ou ProgressStyle.
  • É necessário solicitar a seguinte permissão não de execução no manifesto do Android: android.permission.POST_PROMOTED_NOTIFICATIONS.
  • É necessário solicitar a promoção usando EXTRA_REQUEST_PROMOTED_ONGOING ou NotificationCompat.Builder#requestPromotedOngoing.
  • Precisa ser ongoing (defina FLAG_ONGOING_EVENT).
  • Precisa ter um contentTitle definido.
  • NÃO pode ter nenhum customContentView definido (sem RemoteViews).
  • NÃO pode ser o resumo de um grupo usando setGroupSummary.
  • Não setColorized para TRUE.
  • O canal de notificação NÃO pode ter IMPORTANCE_MIN.

Características da promoção

As APIs a seguir ajudam a determinar se o sistema vai promover sua notificação:

  • Notification.FLAG_PROMOTED_ONGOING indica se a notificação é promovida.
  • Notification.hasPromotableCharacteristics() valida se o sistema pode promover a notificação. Esse método não considera se o usuário desativou as atualizações dinâmicas para o app nas configurações.
  • O NotificationManager.canPostPromotedNotifications() verifica se o app pode postar uma notificação promovida, por exemplo, se o usuário ativou ou desativou nas configurações.
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS é a ação de intent que permite que os apps enviem os usuários para as configurações e ativem esse recurso.

Critérios de uso

Use as atualizações em tempo real para atividades em andamento, iniciadas pelo usuário e sensíveis ao tempo.

Em andamento

Uma atualização em tempo real precisa representar uma atividade em andamento, com um início e um fim distintos. Se uma atividade ocorrer no passado, não use uma atualização em tempo real. Em vez disso, use uma notificação padrão. Isso também é válido para eventos que ainda não começaram, mas os que estão prestes a começar podem usar uma atualização ao vivo.

As atualizações em tempo real representam atividades em andamento. Não use as atualizações dinâmicas para oferecer acesso acelerado à funcionalidade do app. Se quiser fazer isso, use um widget de app ou um bloco personalizado de Configurações rápidas.

  • Usos adequados:navegação ativa, chamadas telefônicas em andamento, acompanhamento ativo de caronas e de entregas de comida.
  • Usos inadequados:anúncios, promoções, mensagens de chat, alertas, próximos eventos do calendário e acesso rápido aos recursos do app.

Iniciado pelo usuário

A maioria das atualizações dinâmicas representa atividades que são explicitamente acionadas pelo usuário, como iniciar um treino, iniciar a navegação de carro ou chamar um transporte por aplicativo. Não mostre informações ambientais, como o ambiente, os interesses ou os eventos futuros do usuário, em uma atualização dinâmica. Não permita que atividades iniciadas por terceiros gerem atualizações em tempo real.

Às vezes, um usuário pode realizar uma ação que inicia uma atividade por algum tempo no futuro. Por exemplo, se o usuário comprar passagens aéreas ou ingressos para um show, se inscrever em um torneio ou indicar de outra forma a participação em um evento com prazo determinado. Nesses casos, pode ser adequado mostrar automaticamente uma atualização em tempo real quando o evento programado começar. No entanto, os apps precisam ajustar os acionadores para aparecer apenas quando a atividade for iminente. Se o usuário indicar explicitamente que quer começar a monitorar um evento em segundo plano como uma partida de futebol, você pode começar a postar atualizações em tempo real sobre esse evento. No entanto, também é necessário incluir uma ação de desafixar na notificação associada.

Sensível ao tempo

Mostre uma atualização dinâmica apenas se ela exigir a atenção do usuário durante toda a atividade. Um caso de uso importante para as atualizações dinâmicas é o monitoramento, quando o usuário se beneficia significativamente ao dar uma olhada na atualização dinâmica para acompanhar o estado em evolução da atividade.

Uma atualização dinâmica geralmente é adequada para atividades que fazem a transição entre atualizações dinâmicas e notificações normais. Por exemplo, mostrar uma notificação de cartão de embarque é adequado muitas horas antes do voo de um usuário, mas a notificação só deve se tornar uma atualização em tempo real quando o usuário tiver uma necessidade urgente, como quando ele chegar ao aeroporto ou local ou quando o embarque tiver começado. Por outro lado, uma atualização dinâmica não é adequada para rastrear um pacote, já que o usuário não precisa monitorar isso constantemente.

Ícones de status

Com os ícones de status, os usuários podem acompanhar as atualizações em tempo real quando a notificação não está visível. Use setShortCriticalText ou setWhen para transmitir informações importantes sobre o estado da sua notificação centrada no progresso.

ícone de status com ícone
Figura 2. O estado indeterminado mostra o ícone pequeno, Notification.Builder#setSmallIcon.
ícone de status com hora
Figura 3. Use Notification.Builder#setShortCriticalText para mostrar o tempo absoluto.
ícone de status com informações
Figura 4. Use Notification.Builder#setShortCriticalText para transmitir informações importantes.

Quando o tempo

O tempo "when" aciona uma contagem regressiva para a longevidade da notificação, a menos que ela seja dispensada ou atualizada.

  • O horário de quando é pelo menos 2 minutos no futuro: se o horário atual for 10h05 e o horário de quando for definido como 10h10, o ícone vai mostrar "5 min".
  • Se o horário for mais de um minuto no passado, a notificação não será mostrada.
  • Use setShowWhen para FALSE se você não quiser que a notificação mostrada na aba tenha um horário.

Aparência do ícone de status

O ícone de status sempre inclui um ícone e, opcionalmente, um texto. O ícone tem uma largura máxima de 96 dp. Mostre o texto dependendo dos seguintes critérios:

  • Se tiver menos de sete caracteres, mostre o texto inteiro.
  • Se menos da metade do texto for exibida, mostre apenas o ícone.
  • Se mais da metade do texto for exibida, mostre o máximo possível.

Dismissal

Os usuários podem controlar a visibilidade das notificações na bandeja de notificações. A publicação de atualizações em tempo real indesejadas pode fazer com que os usuários revoguem a permissão de postagem de um app.

Para impedir que os usuários desativem completamente as atualizações em tempo real, evite postar atualizações que eles possam dispensar. Não poste novamente atualizações em tempo real que o usuário dispensou. Use setDeleteIntent para detectar atualizações dispensadas.

Consulte o app de exemplo para testar essas APIs.