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 plataformas do sistema, inclusive na parte de cima da gaveta de notificações e na tela de bloqueio, e como um ícone na barra de status.

Figura 1. Exemplo de notificação de atualização ao vivo.

Os cards de notificação promovida 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 que 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 (definir 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.
  • 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 é promovendo.
  • 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 ao vivo do app nas configurações.
  • 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 para ativar esse recurso.

Critérios de uso

Use as atualizações em tempo real para atividades contínuas, iniciadas pelo usuário e que dependem do tempo.

Em andamento

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

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

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

Iniciado pelo usuário

A maioria dos Atualizações ao vivo precisa representar atividades acionadas explicitamente pelo usuário, como iniciar um treino, iniciar a navegação no carro ou chamar um transporte compartilhado. Não mostre informações do ambiente, como informações sobre o ambiente, interesses ou eventos futuros do usuário, em uma atualização em tempo real. Não permita que atividades acionadas por terceiros gerem atualizações ao vivo.

À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 para um voo ou um show, se inscrever em um torneio ou indicar que vai participar de um evento com hora marcada. Nesses casos, pode ser apropriado mostrar automaticamente uma atualização ao vivo quando o evento programado começar. No entanto, os apps precisam ajustar os acionadores para que eles apareçam apenas quando a atividade for iminente. Se o usuário indicar explicitamente que quer começar a monitorar um evento em segundo plano, como um jogo de esporte, você poderá começar a postar atualizações ao vivo para esse evento. No entanto, você também precisa incluir uma ação Desfixar na notificação associada.

Sensível ao tempo

Mostre uma atualização em tempo real somente se ela exigir a atenção do usuário durante a atividade. Um caso de uso importante para as atualizações ao vivo é o monitoramento, quando o usuário recebe benefícios significativos ao dar uma olhada na atualização ao vivo para acompanhar o estado em evolução da atividade.

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

ícones de status

Os ícones de status permitem que os usuários acompanhem 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 notificação focada no progresso.

ícone do ícone de status
Figura 2. O estado indeterminado exibe 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 essenciais.

Quando o tempo

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

  • O horário "quando" é pelo menos dois minutos no futuro: se o horário atual for 10h05 e o horário "quando" estiver definido como 10h10, o ícone vai mostrar "5min".
  • Se o horário estiver há mais de um minuto, 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, texto. O ícone tem uma largura máxima de 96 dp. Mostre o texto de acordo com os seguintes critérios:

  • Se tiver menos de 7 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 sombra de notificações. Publicar atualizações em tempo real indesejadas pode fazer com que os usuários revoguem a permissão de publicação de um app.

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