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 di 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ù avanzate create utilizzando la libreria di app Android for Cars.

Supporta le esperienze di messaggistica basate sulle notifiche

Tutte le app che supportano le 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.

Crea un'esperienza di messaggistica basata su modelli

Per iniziare a creare l'esperienza basata su modelli della tua app, 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. 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 manifest

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

Imposta il livello API minimo dell'app per auto

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

<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 sia le funzionalità notification sia template:

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

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

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

Visualizza le conversazioni

Per visualizzare una panoramica delle conversazioni di un utente, puoi mostrare un elenco di ConversationItem oggetti 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. In questo modo, le prestazioni di caricamento migliorano, gli utenti vedono i contenuti più pertinenti e il tempo di interazione si riduce.

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, nonché per rispondere. Queste azioni vengono gestite da ConversationCallbackDelegate che fornisci durante la creazione di 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.

Aggiorna le conversazioni

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

Per una 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.

Imposta 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 utilizzando la visualizzazione di una conversazione corrispondente, in modo che le notifiche non vengano visualizzate come notifiche heads-up (HUN).

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

Per impedire la visualizzazione di una notifica come HUN, imposta la priorità su IMPORTANCE_DEFAULT o un valore inferiore.

Distribuisci app di messaggistica basate su modelli

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