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

As atualizações em tempo real fornecem um resumo de 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, mas os usuários podem dispensar ou rebaixar temporariamente uma notificação desse tipo para uma notificação padrão. As notificações promovidas aparecem com mais destaque nas superfícies 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. As notificações de atualização em tempo real precisam seguir os princípios de notificação para fornecer informações breves, oportunas e relevantes.

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:

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.

Figura 2. Uma atualização dinâmica na tela inicial e de bloqueio e como um chip.

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 das Configurações rápidas.

  • Usos adequados:navegação ativa, chamadas telefônicas em andamento, acompanhamento ativo de caronas e acompanhamento ativo de entrega 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 deve representar atividades 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 próximos eventos do usuário, em uma atualização dinâmica. Não permita que atividades acionadas 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 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ê pode começar a postar atualizações em tempo real sobre ele. No entanto, também é necessário incluir uma ação de Remover fixação 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.

Práticas de UX

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

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

Quando um ETA 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 "Redirecionando...", para indicar que o sistema está funcionando, como 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

Com os chips 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 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 tempo absoluto.
ícone de status com informações
Figura 7. 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. Os marcadores a seguir descrevem como quando o tempo funciona em várias situações:

  • O horário está pelo menos 2 minutos no futuro: se o horário atual for 10h05 e o horário de lembrete for 10h10, o ícone vai mostrar 5 min.
  • Quando o horário é no passado: o texto não é mostrado.
  • Um timer no ícone pode ser mostrado ao usar o cronômetro para quando o tempo. Consulte setUsesChronometer e setChronometerCountdown. O cronômetro é mostrado no ícone enquanto o tempo estiver positivo.
  • Você não quer que a hora 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, um texto. O ícone tem uma largura máxima de 96 dp. O texto só vai aparecer se couber inteiro no ícone. O texto é exibido de acordo com os 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.

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 fim da jornada

Resposta:o ponto branco no final da barra de progresso indica visualmente o fim dela.

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

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