En plus de l'expérience de messagerie de base basée sur les notifications pour lire et répondre aux messages, Android Auto prend en charge des expériences de messagerie plus riches créées à l'aide de la bibliothèque d'applications Android for Cars.
Prendre en charge les expériences de messagerie basées sur les notifications
Toutes les applications compatibles avec les expériences de messagerie basées sur des modèles doivent également étendre les notifications de messagerie pour Android Auto. Cela garantit que les utilisateurs peuvent lire et répondre aux messages sans avoir à ouvrir l'application basée sur un modèle.
Créer une expérience de messagerie basée sur des modèles
Suivez les conseils de Utiliser la bibliothèque d'applications Android for Cars et Ajouter la prise en charge d'Android Auto à votre application conçue à partir d'un modèle pour commencer à créer l'expérience modélisée de votre application. Consultez ensuite les conseils de cette page pour connaître les exigences spécifiques aux applications de messagerie avec modèles.
Configurer les fichiers manifestes de votre application
Pour informer Android Auto des fonctionnalités de votre application, celle-ci doit effectuer les opérations suivantes:
Déclarer la catégorie compatible dans votre fichier manifeste
Votre application doit déclarer la catégorie d'applications automobiles androidx.car.app.category.MESSAGING
dans le filtre d'intent de son 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>
Définir le niveau d'API de l'application pour voitures minimal
Étant donné que l'API ConversationItem
n'est compatible qu'avec l'API Car 7 ou version ultérieure, vous devez également définir les métadonnées minCarApiLevel
sur cette valeur. Pour en savoir plus, consultez la section Niveau d'API de l'application pour voitures.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Déclarer la prise en charge d'Android Auto
Dans le fichier automotive_app_desc.xml
que vous utilisez pour déclarer la prise en charge d'Android Auto, assurez-vous que les fonctionnalités notification
et template
sont déclarées:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
Si votre application peut être définie en tant que gestionnaire de SMS par défaut, veillez à inclure l'élément <uses>
suivant. Si vous ne le faites pas, un gestionnaire par défaut intégré à Android Auto sera utilisé pour gérer les SMS/MMS entrants, ce qui peut entraîner des notifications en double.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
Afficher les conversations
Pour afficher un aperçu des conversations d'un utilisateur, vous pouvez afficher une liste d'objets ConversationItem
dans un ListTemplate
ou un SectionedItemTemplate
.
Pour une expérience utilisateur optimale, nous vous recommandons de fournir au maximum cinq à dix conversations les plus récentes ou les plus importantes, avec cinq messages au plus pour chaque conversation. Cela permet d'améliorer les performances de chargement, de s'assurer que les utilisateurs voient les contenus les plus pertinents et de réduire le temps d'interaction.
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()
}
}
Chaque ConversationItem
affiche automatiquement les actions permettant de lire un message, de le marquer comme lu et de répondre. Ces actions sont gérées par le ConversationCallbackDelegate
que vous fournissez lors de la création de l'ConversationItem
.
Si votre application fournit des raccourcis de conversation, assurez-vous que l'ID fourni lors de la création de ConversationItem
est identique à celui du raccourci de cette conversation.
Mettre à jour les conversations
Lorsque les utilisateurs envoient et reçoivent des messages, vous devez actualiser les écrans de votre application pour inclure les nouveaux messages en appelant invalidate()
. Consultez la section Actualiser le contenu d'un modèle.
Pour une expérience utilisateur optimale, nous vous recommandons de limiter les temps d'actualisation à 500 millisecondes ou moins. Si l'actualisation prend souvent plus de temps, vous pouvez afficher un état de chargement pendant que vous chargez les messages entrants.
Définir correctement l'importance des notifications
Pour réduire les distractions, votre application doit réduire l'importance des notifications entrantes lorsqu'un utilisateur consulte une conversation correspondante afin qu'elles ne s'affichent pas en tant que notifications heads-up (HUN).
Vous pouvez savoir si une conversation est visible en observant le cycle de vie du Screen
qui l'affiche. Consultez la section Cycle de vie d'un écran.
Pour empêcher une notification d'apparaître en tant que notification non urgente, définissez la priorité sur IMPORTANCE_DEFAULT
ou moins.
Distribuer des applications de chat basées sur des modèles
Étant donné que les applications compatibles avec les expériences de messagerie avec modèles ne peuvent être publiées que sur les canaux de test interne et de test fermé sur Google Play, vous ne devez pas promouvoir les builds qui incluent la prise en charge des canaux de test ouvert ou de production, car les envois contenant des builds sur ces canaux seront refusés.