Além da experiência básica de mensagens com notificações para leitura e resposta a mensagens, o Android Auto oferece experiências de mensagens mais avançadas criadas com a biblioteca Android for Cars App.
Suporte a experiências de mensagens com notificações
Todos os apps que oferecem suporte a experiências de mensagens baseadas em modelos também precisam estender as notificações de mensagens para o Android Auto. Com essa integração, os usuários podem ler e responder mensagens sem precisar abrir o app com modelo.
Criar uma experiência de mensagens com modelo
Siga as orientações em Usar a biblioteca Android for Cars App e Adicionar suporte para Android Auto ao seu app baseado em modelo para começar a criar a experiência baseada em modelo do seu app. Em seguida, consulte as orientações nesta página para entender os requisitos específicos dos apps de mensagens com modelos.
Configurar os arquivos de manifesto do app
Para informar ao Android Auto sobre os recursos do app, ele precisa fazer o seguinte:
Declarar suporte à categoria no manifesto
Seu app precisa declarar a categoria de app para carros
androidx.car.app.category.MESSAGING no filtro de intent da classe
CarAppService dele.
<application>
...
<service
...
android:name=".MyCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.MESSAGING"/>
</intent-filter>
</service>
...
<application>
Definir o nível mínimo da API Car App
Como a API ConversationItem só é compatível com a API
Car 7 ou mais recente, defina os metadados minCarApiLevel com esse
valor. Consulte Nível da API Car App para mais informações.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Declarar compatibilidade com o Android Auto
No arquivo automotive_app_desc.xml que você usa para declarar suporte do Android
Auto, verifique se os recursos notification e
template estão declarados:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
Caso seu app possa ser definido como o gerenciador de SMS padrão,
inclua o elemento <uses> abaixo. Se você não fizer isso, um gerenciador padrão
integrado ao Android Auto será usado para processar mensagens SMS/MMS
recebidas, o que pode levar a notificações duplicadas.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
Mostrar conversas
Para mostrar uma visão geral das conversas de um usuário, exiba uma lista de objetos
ConversationItem em um
ListTemplate ou
SectionedItemTemplate.
Para uma boa experiência do usuário, recomendamos fornecer no máximo as 5 a 10 conversas mais recentes ou importantes, com não mais que as 5 mensagens mais recentes de cada conversa. Isso ajuda a melhorar o desempenho de carregamento, permite que os usuários vejam o conteúdo mais relevante e reduz o tempo de interação.
class MyMessagingScreen() : Screen() {
override fun onGetTemplate(): Template {
val itemListBuilder = ItemList.Builder()
val conversations: List<MyConversation> = // Retrieve conversations
for (conversation: MyConversation in conversations) {
val carMessages: List<CarMessage> = conversation.getMessages()
.map { message ->
// CarMessage supports additional fields such as MIME type and URI,
// which you should set if available
CarMessage.Builder()
.setSender(message.sender)
.setBody(message.body)
.setReceivedTimeEpochMillis(message.receivedTimeEpochMillis)
.setRead(message.isRead)
.build()
}
itemListBuilder.addItem(
ConversationItem.Builder()
.setConversationCallback { /* Implement your conversation callback logic here */ }
.setId(/* Set conversation ID */)
.setTitle(/* Set conversation title */)
.setIcon(/* Set conversation icon if available */)
.setMessages(carMessages)
/* When the sender of a CarMessage is equal to this Person,
message readout is adjusted to "you said" instead of "<person>
said" */
.setSelf(/* Set self-sender */)
.setGroupConversation(/* Set if the message contains more than 2 participants */)
.build()
)
}
return ListTemplate.Builder()
.setTitle("Conversations")
.setHeaderAction(Action.APP_ICON)
.setSingleList(itemListBuilder.build())
.build()
}
}
Cada ConversationItem mostra automaticamente ações para tocar uma mensagem
e marcá-la como lida e para responder. Essas ações são processadas pelo
ConversationCallbackDelegate fornecido ao
criar o ConversationItem.
Se o app fornecer atalhos de conversa, verifique
se o ID fornecido ao criar o ConversationItem é o mesmo do
atalho dessa conversa.
Atualizar conversas
À medida que os usuários enviam e recebem mensagens, atualize as telas do app para
incluir as novas mensagens chamando invalidate(). Consulte Atualizar
o conteúdo de um modelo.
Para garantir a melhor experiência do usuário, recomendamos manter os tempos de atualização em 500 milissegundos ou menos. Se a atualização frequente demorar mais, mostre um estado de carregamento enquanto carrega as mensagens recebidas.
Definir a importância da notificação adequadamente
Para reduzir as distrações, o app precisa diminuir a importância das notificações recebidas quando um usuário está usando ou visualizando uma conversa correspondente para que as notificações não apareçam como notificações de alerta (HUNs, na sigla em inglês).
Para saber se uma conversa está visível, observe o ciclo de vida do
Screen que a mostra. Consulte O ciclo de vida de uma tela.
Para evitar que uma notificação apareça como HUN, defina a prioridade como
IMPORTANCE_DEFAULT ou menor.
Distribuir apps de mensagens com modelos
Como os apps que oferecem suporte a experiências de mensagens com modelos só podem ser publicados nas faixas de teste interno e teste fechado do Google Play, não promova versões que incluam suporte a faixas de teste aberto ou produção, já que envios que contenham versões nessas faixas serão rejeitados.