Creare esperienze di messaggistica basate su modelli per Android Auto

Le esperienze di messaggistica basate su modelli sono in versione beta
Al momento, chiunque può pubblicare app di comunicazione con esperienze di messaggistica basate su modelli nei canali di test interni e chiusi del Play Store. La pubblicazione nei canali di test aperti e produzione sarà consentita in un secondo momento.

Oltre all'esperienza di messaggistica di base basata sulle notifiche per leggere e rispondere ai messaggi, Android Auto supporta esperienze di messaggistica più ricche create utilizzando la libreria di app Android for Cars.

Supportare esperienze di messaggistica basate sulle notifiche

Tutte le app che supportano esperienze di messaggistica basate su modelli devono anche estendere le notifiche di messaggistica per Android Auto. Questa integrazione consente agli utenti di leggere e rispondere ai messaggi senza dover aprire l'app basata su modelli.

Creare un'esperienza di messaggistica basata su modelli

Segui le indicazioni riportate in Utilizzare la libreria di app Android for Cars e Aggiungere il supporto di Android Auto all'app basata su modelli per iniziare a creare l'esperienza basata su modelli della tua app. Quindi, consulta le indicazioni riportate in questa pagina per comprendere i requisiti specifici per le app di messaggistica con modelli.

Configurare i file manifest dell'app

Per comunicare ad Android Auto le funzionalità della tua app, quest'ultima deve svolgere le seguenti operazioni:

Dichiarare il supporto delle categorie nel manifest

La tua app deve dichiarare la androidx.car.app.category.MESSAGING categoria di app per auto nel filtro per intent del 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>

Impostare il livello API minimo dell'app per auto

Poiché l'API ConversationItem è supportata solo su Car API 7 o versioni successive, devi impostare anche i metadati minCarApiLevel su questo valore. Per ulteriori informazioni, consulta Livello API Car App.

<application ...>
    ...
    <meta-data
        android:name="androidx.car.app.minCarApiLevel"
        android:value="7"/>
    ...
</application>

Dichiara il supporto di Android Auto

Nel file automotive_app_desc.xml che utilizzi per dichiarare il supporto di Android Auto, verifica che siano dichiarate le funzionalità notification e template:

<automotiveApp>
    <uses name="notification" />
    <uses name="template" />
</automotiveApp>

Se la tua app può essere impostata come gestore SMS predefinito, assicurati di includere il seguente elemento <uses>. In caso contrario, verrà utilizzato un gestore predefinito integrato in Android Auto per gestire gli SMS/MMS in arrivo, il che può portare a notifiche duplicate.

<automotiveApp>
    ...
    <uses name="sms" />
</automotiveApp>

Visualizzare le conversazioni

Per visualizzare una panoramica delle conversazioni di un utente, puoi mostrare un elenco di oggetti ConversationItem in un ListTemplate o SectionedItemTemplate.

Per una buona esperienza utente, ti consigliamo di fornire al massimo le 5-10 conversazioni più recenti o più importanti, con non più di 5 messaggi più recenti per ogni conversazione. Ciò contribuisce a migliorare le prestazioni di caricamento, consente agli utenti di visualizzare i contenuti più pertinenti e riduce il tempo di interazione.

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()
    }
}

Ogni ConversationItem mostra automaticamente le azioni per riprodurre un messaggio e contrassegnarlo come letto e per rispondere. Queste azioni vengono gestite dall'ConversationCallbackDelegate che fornisci durante la creazione dell'ConversationItem.

Se la tua app fornisce scorciatoie per le conversazioni, verifica che l'ID fornito durante la creazione di ConversationItem sia lo stesso dell'ID della scorciatoia della conversazione.

Aggiornare le conversazioni

Man mano che gli utenti inviano e ricevono messaggi, devi aggiornare le schermate dell'app per includere i nuovi messaggi chiamando invalidate(). Consulta Aggiornare i contenuti di un modello.

Per garantire la migliore esperienza utente, ti consigliamo di mantenere i tempi di aggiornamento a 500 millisecondi o meno. Se l'aggiornamento frequente richiede più tempo, puoi visualizzare uno stato di caricamento durante il caricamento dei messaggi in arrivo.

Impostare l'importanza delle notifiche in modo appropriato

Per ridurre le distrazioni, la tua app deve ridurre l'importanza delle notifiche in arrivo quando un utente sta visualizzando una conversazione corrispondente, in modo che le notifiche non vengano visualizzate come notifiche di avviso.

Puoi monitorare se una conversazione è visibile osservando il ciclo di vita del Screen che la mostra. Consulta la sezione Il ciclo di vita di una schermata.

Per evitare che una notifica venga visualizzata come HUN, imposta la priorità su IMPORTANCE_DEFAULT o inferiore.

Distribuire app di messaggistica basate su modelli

Poiché le app che supportano esperienze di messaggistica basate su modelli possono essere pubblicate solo nei canali di test interni e chiusi su Google Play, non devi promuovere build che includono il supporto per i canali di test aperti o produzione, in quanto gli invii contenenti build in questi canali verranno rifiutati.