Tworzenie szablonów wiadomości dla Androida Auto

Szablony wiadomości są dostępne w wersji beta
Obecnie każdy może opublikować aplikację do komunikacji z możliwością wysyłania wiadomości z wykorzystaniem szablonów na ścieżkach testów wewnętrznych i zamkniętych w Sklepie Play. Publikowanie na ścieżkach testów otwartych i produkcyjnych będzie możliwe w późniejszym terminie.

Oprócz podstawowej obsługi wiadomości opartej na powiadomieniach, która umożliwia czytanie i odpowiadanie na wiadomości, Android Auto obsługuje też bardziej zaawansowane funkcje wiadomości stworzone za pomocą biblioteki aplikacji Android for Cars.

Obsługa wysyłania wiadomości z powiadomieniami

Wszystkie aplikacje, które obsługują wiadomości w ramach szablonów, muszą też rozszerzać powiadomienia o wiadomościach w Androidzie Auto. Dzięki temu użytkownicy mogą czytać i odpowiadać na wiadomości bez otwierania aplikacji z szablonem.

Tworzenie szablonów wiadomości

Aby rozpocząć tworzenie aplikacji opartej na szablonach, postępuj zgodnie z instrukcjami w artykułach Korzystanie z biblioteki aplikacji Android for CarsDodawanie obsługi Androida Auto do aplikacji opartej na szablonach. Następnie zapoznaj się ze wskazówkami na tej stronie, aby poznać wymagania dotyczące aplikacji do przesyłania wiadomości z użyciem szablonów.

Konfigurowanie plików manifestu aplikacji

Aby poinformować Androida Auto o możliwościach aplikacji, aplikacja musi:

Zadeklaruj obsługę kategorii w pliku manifestu

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

Ustawianie minimalnego poziomu interfejsu API aplikacji do samochodu

Interfejs API ConversationItem jest obsługiwany tylko w wersji Car API 7 lub nowszej, dlatego wartość metadanych minCarApiLevel powinna być taka sama. Więcej informacji znajdziesz w artykule dotyczącym poziomu interfejsu API aplikacji samochodowej.

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

Zadeklarowanie obsługi Androida Auto

W pliku automotive_app_desc.xml, który służy do deklarowania obsługi Androida Auto, sprawdź, czy zadeklarowane są funkcje notificationtemplate:

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

Jeśli aplikacja może być ustawiona jako domyślny menedżer SMS-ów, uwzględnij element <uses>. Jeśli tego nie zrobisz, do obsługi przychodzących SMS-ów i MMS-ów będzie używany domyślny moduł obsługi wbudowany w Androida Auto, co może spowodować zduplikowanie 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 ConversationItem w ListTemplate lub SectionedItemTemplate.

Ze względu na wygodę użytkowników zalecamy wyświetlanie maksymalnie 5–10 najnowszych lub najważniejszych rozmów, z maksymalnie 5 najnowszymi wiadomościami w każdej z nich. Pomaga to w zwiększeniu szybkości wczytywania, zapewnia użytkownikom wyświetlanie najbardziej odpowiednich treści i skraca czas interakcji.

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

Każdy ConversationItem automatycznie wyświetla opcje odtwarzania wiadomości, oznaczania jej jako przeczytanej oraz odpowiadania. Te działania są obsługiwane przez ConversationCallbackDelegate podany podczas tworzenia ConversationItem.

Jeśli Twoja aplikacja udostępnia skróty rozmów, upewnij się, że identyfikator podany podczas tworzenia ConversationItem jest taki sam jak identyfikator skrótu tej rozmowy.

Aktualizowanie rozmów

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

Dla wygody użytkowników zalecamy, aby czas odświeżania nie przekraczał 500 milisekund. Jeśli odświeżanie trwa dłużej, możesz wyświetlić stan wczytywania podczas wczytywania przychodzących wiadomości.

Odpowiednio ustawiaj ważność powiadomień

Aby zmniejszyć rozproszenie uwagi, aplikacja powinna obniżać ważność przychodzących powiadomień, gdy użytkownik przegląda odpowiednią rozmowę, tak aby powiadomienia nie były wyświetlane jako powiadomienia typu heads up (HUN).

Aby sprawdzić, czy rozmowa jest widoczna, możesz śledzić cykl życia Screen, który ją wyświetla. Zobacz Cykl życia ekranu.

Aby powiadomienie nie wyświetlało się jako powiadomienie o wysokiej ważności, ustaw priorytet na IMPORTANCE_DEFAULT lub mniejszy.

Rozpowszechnianie aplikacji do obsługi wiadomości z wykorzystaniem szablonów

Aplikacje obsługujące szablony wiadomości mogą być publikowane w Google Play tylko na ścieżkach testów wewnętrznych i zamkniętych, dlatego nie promuj wersji, które obsługują ścieżki testów otwartych ani produkcyjnych, ponieważ przesłane wersje zawierające wersje z tych ścieżek zostaną odrzucone.