Tworzenie szablonów wiadomości dla Androida Auto

Szablony wiadomości są w wersji beta
Obecnie każdy może publikować aplikacje do komunikacji z gotowymi szablonami wiadomości na ścieżkach testów wewnętrznych i zamkniętych w Sklepie Play. Publikowanie w ścieżkach testów otwartych i wersji produkcyjnej będzie możliwe w późniejszym terminie.

Oprócz podstawowego sposobu obsługi wiadomości opartego na powiadomieniach, który umożliwia odczytywanie wiadomości i odpowiadanie na nie, Android Auto obsługuje bardziej zaawansowane funkcje przesyłania wiadomości utworzone za pomocą biblioteki aplikacji Android do samochodu.

Obsługa funkcji przesyłania wiadomości opartej na powiadomieniach

Wszystkie aplikacje obsługujące wiadomości oparte na szablonach muszą też rozszerzać powiadomienia o wiadomościach na Androida Auto. Ta integracja umożliwia użytkownikom czytanie wiadomości i odpowiadanie na nie bez konieczności otwierania aplikacji opartej na szablonie.

Tworzenie wiadomości na podstawie szablonu

Aby rozpocząć tworzenie interfejsu aplikacji opartego na szablonie, postępuj zgodnie z instrukcjami w artykułach Korzystanie z biblioteki aplikacji Android do samochoduDodawanie obsługi Androida Auto do aplikacji opartej na szablonie. Następnie zapoznaj się ze wskazówkami na tej stronie, aby poznać szczegółowe wymagania dotyczące aplikacji do wysyłania wiadomości z gotowych szablonów.

Konfigurowanie plików manifestu aplikacji

Aby poinformować Androida Auto o możliwościach aplikacji, musi ona wykonać te czynności:

Deklarowanie obsługi kategorii w pliku manifestu

Aplikacja musi zadeklarować androidx.car.app.category.MESSAGING kategorię aplikacji na samochody w filtrze intencji w 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>
<category>

Ustawianie minimalnego poziomu interfejsu API aplikacji na samochody

Interfejs ConversationItem API jest obsługiwany tylko w przypadku interfejsu Car API w wersji 7 lub nowszej, dlatego w metadanych minCarApiLevel należy ustawić tę wartość. Więcej informacji znajdziesz w artykule Poziom interfejsu Car App API.

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

Deklarowanie obsługi Androida Auto

automotive_app_desc.xml pliku, którego używasz do deklarowania obsługi Androida Auto, sprawdź, czy zadeklarowane są obie te możliwości: notificationtemplate:

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

Jeśli aplikację można ustawić jako domyślną aplikację do obsługi SMS-ów, dodaj ten element <uses>. W przeciwnym razie do obsługi przychodzących wiadomości SMS/MMS będzie używany domyślny moduł obsługi wbudowany w Androida Auto, co może prowadzić do zduplikowanych powiadomień.

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

Wyświetlanie rozmów

Aby wyświetlić przegląd rozmów użytkownika, możesz wyświetlić listę obiektów ConversationItemListTemplate lub SectionedItemTemplate.

Aby zapewnić użytkownikom komfort, zalecamy udostępnianie co najwyżej 5–10 najnowszych lub najważniejszych rozmów, a w każdej z nich nie więcej niż 5 najnowszych wiadomości. Pomaga to zwiększyć wydajność wczytywania, wyświetlać użytkownikom najbardziej trafne treści i skracać czas interakcji.

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

Każda ConversationItem automatycznie wyświetla działania związane z odtwarzaniem wiadomości, oznaczaniem jej jako przeczytanej i odpowiadaniem na nią. Te działania są obsługiwane przez ConversationCallbackDelegate, który podajesz podczas tworzenia ConversationItem.

Jeśli Twoja aplikacja udostępnia skróty do rozmów, sprawdź, czy identyfikator podany podczas tworzenia ConversationItem jest taki sam jak identyfikator skrótu do tej rozmowy.

Aktualizowanie wątków

Gdy użytkownicy wysyłają i odbierają wiadomości, odświeżaj ekrany aplikacji, aby uwzględniać nowe wiadomości, wywołując funkcję invalidate(). Zobacz Odświeżanie zawartości szablonu.

Aby zapewnić użytkownikom jak największy komfort, zalecamy, aby czas odświeżania wynosił 500 milisekund lub mniej. Jeśli częste odświeżanie trwa dłużej, możesz wyświetlać stan ładowania podczas wczytywania przychodzących wiadomości.

Odpowiednie ustawienie ważności powiadomień

Aby ograniczyć rozpraszanie uwagi, aplikacja powinna zmniejszać ważność przychodzących powiadomień, gdy użytkownik korzysta z odpowiedniej rozmowy lub ją wyświetla, tak aby powiadomienia nie pojawiały się jako powiadomienia wyskakujące.

Możesz sprawdzić, czy rozmowa jest widoczna, obserwując cykl życia elementu Screen, który ją wyświetla. Zobacz Cykl życia ekranu.

Aby powiadomienie nie wyświetlało się jako powiadomienie o wysokim priorytecie, ustaw priorytet na IMPORTANCE_DEFAULT lub niższy.

Rozpowszechnianie aplikacji do obsługi wiadomości opartych na szablonach

Aplikacje obsługujące gotowe wiadomości można publikować tylko na ścieżkach testów wewnętrznych i zamkniętych w Google Play, dlatego nie należy promować wersji, które obejmują obsługę ścieżek testów otwartych lub produkcyjnych, ponieważ zgłoszenia zawierające wersje na tych ścieżkach zostaną odrzucone.