Além da experiência de mensagens básica com notificações para ler e responder mensagens, o Android Auto oferece suporte a experiências de mensagens mais ricas criadas usando a biblioteca Android for Cars App.
Ofereça suporte a experiências de mensagens com notificações
Todos os apps que oferecem suporte a experiências de mensagens com modelos também precisam estender notificações de mensagens para o Android Auto. Isso garante que os usuários possam ler e responder a mensagens sem precisar abrir o app com modelo.
Criar uma experiência de mensagens com modelos
Siga as orientações em Usar a biblioteca Android for Cars App e Adicionar suporte para o 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 desta página para entender os requisitos específicos de apps de mensagens com modelos.
Configurar os arquivos de manifesto do app
Para informar o 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
.
<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
tem suporte apenas na API
Car 7 ou mais recente, também é necessário definir os metadados minCarApiLevel
para esse valor. Consulte Nível da API do app para carros 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
usado para declarar suporte ao
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, você pode exibir uma lista de
objetos ConversationItem
em um
ListTemplate
ou
SectionedItemTemplate
.
Para oferecer a melhor experiência do usuário, recomendamos fornecer no máximo de 5 a 10 conversas mais recentes ou mais importantes, com no máximo 5 mensagens mais recentes para cada conversa. Isso ajuda a melhorar o desempenho de carregamento, garante 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 tratadas pelo
ConversationCallbackDelegate
que você fornece ao
criar o ConversationItem
.
Se o app oferece atalhos de conversa, verifique
se o ID fornecido ao criar o ConversationItem
é o mesmo que o
ID do atalho da 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 oferecer 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, você pode mostrar um estado de carregamento enquanto carrega as mensagens recebidas.
Definir a importância da notificação de forma adequada
Para reduzir as distrações, o app precisa diminuir a importância das notificações recebidas quando um usuário está usando a visualização de uma conversa correspondente para que as notificações não apareçam como notificações de alerta (HUNs, na sigla em inglês).
É possível acompanhar se uma conversa está visível observando 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 fechado no Google Play, não promova builds que incluem suporte a faixas de teste aberto ou de produção, porque os envios que contêm builds nessas faixas serão rejeitados.