Además de la experiencia de mensajería básica potenciada por notificaciones para leer y responder mensajes, Android Auto admite experiencias de mensajería más enriquecidas compiladas con la Biblioteca de apps de Android para vehículos.
Compatibilidad con experiencias de mensajería potenciadas por notificaciones
Todas las apps que admiten experiencias de mensajería con plantillas también deben extender las notificaciones de mensajería para Android Auto. Esto garantiza que los usuarios puedan leer y responder mensajes sin tener que abrir la app con plantillas.
Crea una experiencia de mensajería con plantillas
Sigue las instrucciones de Cómo usar la Biblioteca de apps de Android para vehículos y Cómo agregar compatibilidad con Android Auto a tu app basada en plantilla para comenzar a compilar la experiencia basada en plantillas de tu app. Luego, consulta la guía de esta página para comprender los requisitos específicos de las apps de mensajería con plantillas.
Cómo configurar los archivos del manifiesto de tu app
Para informar a Android Auto sobre las capacidades de tu app, esta debe hacer lo siguiente:
Declara la compatibilidad de categoría en tu manifiesto
Tu app debe declarar la categoría de app para vehículos androidx.car.app.category.MESSAGING
en el filtro de intents de su 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>
Cómo establecer el nivel mínimo de API de la app para vehículos
Debido a que la API de ConversationItem
solo es compatible con la API de Car 7 o versiones posteriores, también debes establecer los metadatos de minCarApiLevel
en ese valor. Consulta Nivel de API de la app para vehículos para obtener más información.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Declara la compatibilidad con Android Auto
En el archivo automotive_app_desc.xml
que usas para declarar la compatibilidad con Android Auto, asegúrate de que se declaren las capacidades de notification
y template
:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
Si tu app se puede configurar como el controlador de SMS predeterminado, asegúrate de incluir el siguiente elemento <uses>
. Si no lo haces, se usará un controlador predeterminado integrado en Android Auto para controlar los mensajes SMS/MMS entrantes, lo que puede generar la duplicación de notificaciones.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
Cómo mostrar conversaciones
Para mostrar una descripción general de las conversaciones de un usuario, puedes mostrar una lista de objetos ConversationItem
en un ListTemplate
o SectionedItemTemplate
.
Para brindar la mejor experiencia del usuario, te recomendamos que proporciones entre 5 y 10 conversaciones más recientes o más importantes, con no más de 5 mensajes más recientes para cada conversación. Esto ayuda a mejorar el rendimiento de carga, garantiza que los usuarios vean el contenido más relevante y reduce el tiempo de interacción.
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
muestra automáticamente acciones para reproducir un mensaje, marcarlo como leído y responderlo. Esas acciones las controla el ConversationCallbackDelegate
que proporcionas cuando compilas el ConversationItem
.
Si tu app proporciona atajos de conversación, asegúrate de que el ID proporcionado cuando se compila el ConversationItem
sea el mismo que el ID del atajo de esa conversación.
Actualiza conversaciones
A medida que los usuarios envían y reciben mensajes, debes actualizar las pantallas de tu app para incluir los mensajes nuevos llamando a invalidate()
. Consulta Cómo actualizar el contenido de una plantilla.
Para brindar la mejor experiencia del usuario, recomendamos mantener los tiempos de actualización en 500 milisegundos o menos. Si la actualización frecuente tarda más, puedes mostrar un estado de carga mientras cargas los mensajes entrantes.
Establece la importancia de las notificaciones de forma adecuada
Para reducir las distracciones, tu app debe disminuir la importancia de las notificaciones entrantes cuando un usuario está usando tu app para ver una conversación correspondiente, de modo que las notificaciones no aparezcan como notificaciones de alerta (HUN).
Para hacer un seguimiento de si una conversación es visible, observa el ciclo de vida del Screen
que la muestra. Consulta Ciclo de vida de una pantalla.
Para evitar que una notificación aparezca como HUN, establece la prioridad en IMPORTANCE_DEFAULT
o menos.
Cómo distribuir apps de mensajería con plantillas
Debido a que las apps que admiten experiencias de mensajería con plantillas solo se pueden publicar en los segmentos de pruebas internas y cerradas en Google Play, no debes promocionar compilaciones que incluyan compatibilidad con los segmentos de pruebas abiertas o de producción, ya que se rechazarán los envíos que contengan compilaciones en esos segmentos.