Vorlagen für Messaging-Apps für Android Auto erstellen

Templated Messaging befindet sich in der Betaphase
Derzeit kann jeder Kommunikations-Apps mit Vorlagen für Nachrichten in den Tracks für interne Tests und geschlossene Tests im Google Play Store veröffentlichen. Die Veröffentlichung in Tracks für offene Tests und Produktions-Tracks wird zu einem späteren Zeitpunkt zugelassen.

Neben der grundlegenden Messaging-Funktion, die auf Benachrichtigungen basiert und mit der Nachrichten gelesen und beantwortet werden können, unterstützt Android Auto auch umfangreichere Messaging-Funktionen, die mit der Android for Cars-App-Bibliothek entwickelt wurden.

Unterstützung von Messaging-Funktionen, die auf Benachrichtigungen basieren

Alle Apps, die Vorlagen für Messaging unterstützen, müssen auch Messaging-Benachrichtigungen für Android Auto erweitern. Mit dieser Integration können Nutzer Nachrichten lesen und darauf antworten, ohne die Vorlagen-App öffnen zu müssen.

Nachrichtenvorlagen erstellen

Folgen der Anleitung unter Android for Cars-App-Bibliothek verwenden und Unterstützung von Android Auto zu Ihrer Vorlagen-App hinzufügen, um mit der Entwicklung der Vorlagen-App zu beginnen. Auf dieser Seite finden Sie dann Informationen zu den spezifischen Anforderungen für Messaging-Apps mit Vorlagen.

Manifestdateien der App konfigurieren

Damit Android Auto die Funktionen Ihrer App kennt, muss Ihre App Folgendes tun:

Kategoriensupport im Manifest deklarieren

Ihre App muss die androidx.car.app.category.MESSAGING-Kategorie für Auto-Apps im Intent-Filter ihres CarAppService deklarieren.

<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>

Mindest-API-Level für Car-Apps festlegen

Da die ConversationItem API nur in Car API 7 oder höher unterstützt wird, sollten Sie die minCarApiLevel-Metadaten auf diesen Wert festlegen. Weitere Informationen finden Sie unter Car App API Level.

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

Android Auto-Unterstützung deklarieren

Prüfen Sie in der automotive_app_desc.xml-Datei, mit der Sie Android Auto-Unterstützung deklarieren, ob sowohl die notification- als auch die template-Funktionen deklariert sind:

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

Wenn Ihre App als Standard-SMS-Handler festgelegt werden kann, müssen Sie das folgende <uses>-Element einfügen. Andernfalls wird ein in Android Auto integrierter Standard-Handler verwendet, um eingehende SMS-/MMS-Nachrichten zu verarbeiten, was zu doppelten Benachrichtigungen führen kann.

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

Unterhaltungen anzeigen

Wenn Sie eine Übersicht über die Konversationen eines Nutzers anzeigen möchten, können Sie eine Liste von ConversationItem-Objekten in einem ListTemplate oder SectionedItemTemplate anzeigen.

Für eine gute Nutzererfahrung empfehlen wir, maximal die 5–10 letzten oder wichtigsten Unterhaltungen mit jeweils maximal den 5 letzten Nachrichten bereitzustellen. So wird die Ladeleistung verbessert, Nutzer sehen die relevantesten Inhalte und die Interaktionszeit wird verkürzt.

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

Für jede ConversationItem werden automatisch Aktionen zum Abspielen einer Nachricht, zum Markieren als gelesen und zum Antworten angezeigt. Diese Aktionen werden von der ConversationCallbackDelegate ausgeführt, die Sie beim Erstellen des ConversationItem angeben.

Wenn Ihre App Unterhaltungsverknüpfungen bereitstellt, prüfen Sie, ob die ID, die beim Erstellen von ConversationItem angegeben wurde, mit der ID für die Verknüpfung der Unterhaltung übereinstimmt.

Unterhaltungen aktualisieren

Wenn Nutzer Nachrichten senden und empfangen, sollten Sie die Bildschirme Ihrer App aktualisieren, um die neuen Nachrichten einzublenden. Rufen Sie dazu invalidate() auf. Inhalt einer Vorlage aktualisieren

Für eine optimale Nutzererfahrung empfehlen wir, Aktualisierungszeiten von höchstens 500 Millisekunden einzuhalten. Wenn das häufige Aktualisieren länger dauert, können Sie einen Ladestatus anzeigen, während Sie die eingehenden Nachrichten laden.

Wichtigkeit von Benachrichtigungen richtig festlegen

Um Ablenkungen zu vermeiden, sollte Ihre App die Wichtigkeit eingehender Benachrichtigungen verringern, wenn ein Nutzer eine entsprechende Unterhaltung ansieht, damit die Benachrichtigungen nicht als wichtige Benachrichtigung angezeigt werden.

Sie können nachvollziehen, ob eine Unterhaltung sichtbar ist, indem Sie den Lebenszyklus des Screen beobachten, in dem sie angezeigt wird. Weitere Informationen finden Sie unter Lebenszyklus eines Bildschirms.

Wenn Sie verhindern möchten, dass eine Benachrichtigung als HUN angezeigt wird, legen Sie die Priorität auf IMPORTANCE_DEFAULT oder niedriger fest.

Messaging-Apps mit Vorlagen bereitstellen

Da Apps, die Vorlagen für Messaging unterstützen, nur in Tracks für interne und geschlossene Tests bei Google Play veröffentlicht werden können, sollten Sie keine Builds bewerben, die Tracks for offene Tests oder Produktions-Tracks unterstützen, da Einreichungen mit Builds in diesen Tracks abgelehnt werden.