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

Vorlagenbasierte Messaging-Funktionen sind in der Betaversion verfügbar
Derzeit kann jeder Kommunikations-Apps mit vorlagenbasierten Messaging-Funktionen 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 mit Benachrichtigungen zum Lesen und Beantworten von Nachrichten unterstützt Android Auto auch umfangreichere Messaging-Funktionen, die mit der Android for Cars App Library erstellt wurden.

Messaging-Funktionen mit Benachrichtigungen unterstützen

Alle Apps, die vorlagenbasierte Messaging-Funktionen unterstützen, müssen auch Messaging-Benachrichtigungen für Android Auto erweitern. Durch diese Integration können Nutzer Nachrichten lesen und beantworten, ohne die vorlagenbasierte App öffnen zu müssen.

Vorlagenbasierte Messaging-Funktion 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. Beachten Sie dann die Anleitung auf dieser Seite, um die spezifischen Anforderungen an vorlagenbasierte Messaging-Apps zu verstehen.

Manifestdateien der App konfigurieren

Damit Android Auto über die Funktionen Ihrer App informiert wird, muss Ihre App Folgendes tun:

Kategorieunterstützung im Manifest deklarieren

Ihre App muss die androidx.car.app.category.MESSAGING Kategorie für Car-Apps im Intent-Filter von 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 unter Car API 7 oder höher unterstützt wird, sollten Sie die Metadaten minCarApiLevel 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>

Unterstützung von Android Auto deklarieren

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

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

Wenn Ihre App als der Standard-SMS-Handler festgelegt werden kann, fügen Sie das folgende <uses> Element ein. 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 der Unterhaltungen eines Nutzers anzeigen möchten, können Sie eine Liste von ConversationItem-Objekten in einer ListTemplate oder SectionedItemTemplate anzeigen.

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

class MyMessagingScreen(carContext: CarContext) : Screen(carContext) {
    override fun onGetTemplate(): Template {
        val itemListBuilder = ItemList.Builder()
        val conversations: List<MyConversation> = getConversations() // 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(
                    conversation.id,
                    CarText.create(conversation.title),
                    Person.Builder()
                        .setName("Me")
                        .setKey("self_id")
                        .build(),
                    carMessages,
                    myConversationCallback
                )
                    .build()
            )
        }

        val header = Header.Builder()
            .setStartHeaderAction(Action.APP_ICON)
            .setTitle("Conversations")
            .build()

        return ListTemplate.Builder()
            .setHeader(header)
            .setSingleList(itemListBuilder.build())
            .build()
    }
}

In jedem ConversationItem werden automatisch Aktionen zum Abspielen einer Nachricht, zum Markieren als gelesen und zum Antworten angezeigt. Diese Aktionen werden vom ConversationCallbackDelegate verarbeitet, den Sie beim Erstellen von ConversationItem angeben.

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

Unterhaltungen aktualisieren

Wenn Nutzer Nachrichten senden und empfangen, sollten Sie die Bildschirme Ihrer App aktualisieren, um die neuen Nachrichten einzufügen. Rufen Sie dazu invalidate() auf. Weitere Informationen finden Sie unter Inhalte einer Vorlage aktualisieren.

Für eine optimale Nutzererfahrung empfehlen wir, die Aktualisierungszeiten auf 500 Millisekunden oder weniger zu beschränken. Wenn die Aktualisierung häufig 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. So werden die Benachrichtigungen nicht als Heads-up-Benachrichtigungen (HUNs) angezeigt.

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

Damit eine Benachrichtigung nicht als HUN angezeigt wird, legen Sie die Priorität auf IMPORTANCE_DEFAULT oder niedriger fest.

Vorlagenbasierte Messaging-Apps bereitstellen

Da Apps, die vorlagenbasierte Messaging-Funktionen 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.