Criar notificações de atualização em tempo real

As atualizações em tempo real oferecem um resumo das atualizações importantes para que os usuários possam acompanhar o progresso sem abrir o app. O sistema promove notificações de atualizações em tempo real, embora os usuários possam dispensar ou rebaixar temporariamente uma notificação de atualização em tempo real para uma notificação padrão. As notificações promovidas aparecem com mais destaque nas superfícies do sistema, incluindo a parte de cima da gaveta de notificações e a tela de bloqueio, e como um ícone na barra de status. As notificações de atualizações em tempo real precisam seguir os princípios de notificação para fornecer informações breves, oportunas e relevantes.

Figura 1. Um exemplo de 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 pode ser recolhido

Sua notificação precisa atender aos seguintes requisitos para se qualificar como uma atualização em tempo real:

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 em tempo real para o app nas configurações.
  • NotificationManager.canPostPromotedNotifications() verifica se o app pode postar uma notificação promovida, por exemplo, se o usuário a ativou ou desativou nas configurações.
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS é a ação da intent que permite que os apps enviem os usuários para as configurações para ativar esse recurso.

Critérios de uso

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

Figura 2. Uma atualização em tempo real na tela inicial e de bloqueio e como um ícone.

Em andamento

Uma atualização em tempo real precisa representar uma atividade que está 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, embora eventos que estão prestes a começar possam usar uma atualização em tempo real.

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

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

Iniciado pelo usuário

A maioria das atualizações em tempo real precisa representar atividades que são acionadas explicitamente pelo usuário, como iniciar um treino, iniciar o trajeto de carro ou chamar um transporte por aplicativo. Não mostre informações ambientais, como sobre o ambiente, os interesses ou os eventos futuros do usuário, em uma atualização em tempo real. Não permita que atividades acionadas por outras partes 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 para um voo ou show, se inscrever em um torneio ou indicar de outra forma a participação futura em um evento sensível ao tempo. Nesses casos, pode ser apropriado 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 um jogo esportivo, você poderá começar a postar atualizações em tempo real para esse evento. No entanto, você também precisa incluir uma ação de desafixar na notificação associada.

Sensível ao tempo

Mostre uma atualização em tempo real apenas se ela exigir a atenção do usuário durante toda a atividade. Um caso de uso importante para atualizações em tempo real é o monitoramento, quando o usuário se beneficia significativamente ao olhar a atualização em tempo real 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 é adequado muitas horas antes do voo de um usuário, mas a notificação só precisa se tornar uma atualização em tempo real quando o usuário tiver uma necessidade urgente, como quando chegar ao aeroporto ou 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.

Práticas de UX

Use o ícone do rastreador para visualizar o estado. Ele pode ser atualizado dinamicamente.

rastreador personalizado em uma barra de progresso
Figura 3. Um ícone de rastreador personalizado.

Quando um horário de chegada previsto estiver sendo calculado ou ainda não estiver disponível, não mostre um estado vazio. Forneça um texto de marcador de posição ativo, como "Pensando..." ou "Traçando novo trajeto...", para indicar que o sistema está funcionando, conforme mostrado no exemplo.

estado não vazio para mostrar o pensamento
Figura 4. Um estado não vazio para sua atualização em tempo real.

Í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 centrada no progresso.

ícone de status com ícone
Figura 5. O estado indeterminado mostra o ícone pequeno, Notification.Builder#setSmallIcon.
ícone de status com hora
Figura 6. Use Notification.Builder#setShortCriticalText para mostrar o horário absoluto.
ícone de status com informações
Figura 7. Use Notification.Builder#setShortCriticalText para transmitir informações importantes.

Quando o tempo

O horário de início aciona uma contagem regressiva para a longevidade da notificação, a menos que ela seja dispensada ou atualizada. Os marcadores a seguir descrevem como o horário de início funciona em várias situações:

  • O horário de início é de pelo menos 2 minutos no futuro: se o horário atual for 10h05 e o horário de início estiver definido como 10h10, o ícone vai mostrar 5 min.
  • O horário de início está no passado: o texto não é mostrado.
  • Um timer no ícone pode ser mostrado ao usar o cronômetro para o horário de início. Consulte setUsesChronometer e setChronometerCountdown. O timer do cronômetro é mostrado no ícone enquanto for positivo.
  • Você não quer que o horário de início apareça na notificação: use setShowWhen para FALSE.

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. O texto só será mostrado se puder caber inteiro no ícone. O texto é mostrado dependendo dos seguintes critérios:

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

Dispensa

Os usuários podem controlar a visibilidade das notificações na gaveta de notificações. A postagem 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 os usuários possam dispensar. Não reposte 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.

Perguntas frequentes

Pergunta:o que é o ponto branco no final da barra de progresso?

fim do indicador de visualização de acessibilidade do progresso
Figura 8. Visualização de acessibilidade do final da jornada

Resposta:o ponto branco no final da barra de progresso sinaliza visualmente o final da barra de progresso.

Pergunta:por que as notificações personalizadas não são compatíveis com atualizações em tempo real?

Resposta:as notificações personalizadas dificultam os testes consistentes e a UX, já que o comportamento delas varia significativamente entre as versões do Android e os fabricantes de dispositivos. Evite notificações personalizadas usando RemoteViews.