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 sul Play Store. La pubblicazione nei canali di test aperti e di produzione sarà consentita in un secondo momento.

Oltre all'esperienza di messaggistica di base basata su notifiche per la lettura e la risposta ai messaggi, Android Auto supporta esperienze di messaggistica più complete create utilizzando la libreria di app Android for Cars.

Supportare esperienze di messaggistica basate su notifiche

Tutte le app che supportano esperienze di messaggistica basate su modelli devono anche estendere le notifiche di messaggistica per Android Auto. In questo modo, gli utenti possono 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. Poi, consulta le indicazioni riportate in questa pagina per comprendere i requisiti specifici per le app di messaggistica basate su modelli.

Configura i file manifest dell'app

Per informare Android Auto delle funzionalità della tua app, quest'ultima deve:

Dichiarare il supporto delle categorie nel file manifest

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

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

Dichiarare il supporto di Android Auto

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

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

Se la tua app può essere impostata come gestitore SMS predefinito, assicurati di includere il seguente elemento <uses>. In caso contrario, per gestire i messaggi SMS/MMS in arrivo verrà utilizzato un gestore predefinito integrato in Android Auto, il che può comportare 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 la migliore 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. In questo modo, puoi migliorare le prestazioni di caricamento, assicurarti che gli utenti visualizzino i contenuti più pertinenti e ridurre 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, contrassegnarlo come letto e rispondere. Queste azioni vengono gestite dal ConversationCallbackDelegate che fornisci durante la creazione del ConversationItem.

Se la tua app fornisce scorciatoie per le conversazioni, assicurati che l'ID fornito durante la creazione del ConversationItem sia uguale all'ID della scorciatoia della conversazione.

Aggiornare le conversazioni

Quando 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 un'esperienza utente ottimale, ti consigliamo di mantenere i tempi di aggiornamento pari o inferiori a 500 millisecondi. 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, l'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 in primo piano.

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 impedire 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 interno e chiuso su Google Play, non dovresti promuovere build che includono il supporto per i canali di test aperto o di produzione, in quanto i contenuti inviati contenenti build in questi canali verranno rifiutati.