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.