Tworzenie szablonów wiadomości dla Androida Auto

Szablonowe usługi przesyłania 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 na ścieżkach testów otwartych i wersji produkcyjnej będzie możliwe w późniejszym terminie.

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

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

Wszystkie aplikacje, które obsługują wiadomości oparte na szablonach, muszą też rozszerzać powiadomienia o wiadomościach w Androidzie 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 aplikacji z użyciem szablonów, postępuj zgodnie z instrukcjami w artykułach Korzystanie z biblioteki aplikacji Android do samochoduDodawanie obsługi Androida Auto do aplikacji z użyciem szablonów. Następnie zapoznaj się ze wskazówkami na tej stronie, aby poznać konkretne wymagania dotyczące aplikacji do przesyłania wiadomości z szablonami.

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 samochodowej w filtrze intencji w pliku 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 samochodowej

Interfejs ConversationItem API jest obsługiwany tylko w przypadku Car API 7 lub nowszego, 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 funkcje: 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 ConversationItem w komponencie ListTemplate lub SectionedItemTemplate.

Aby zapewnić użytkownikom wygodę, zalecamy udostępnianie co najwyżej 5–10 najnowszych lub najważniejszych rozmów, a w przypadku 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() : 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ż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 elementu 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.

Z myślą o wygodzie użytkowników zalecamy, aby czas odświeżania nie przekraczał 500 milisekund. Jeśli częste odświeżanie trwa dłużej, możesz wyświetlać stan ładowania podczas wczytywania przychodzących wiadomości.

Odpowiednio ustaw ważność powiadomień

Aby ograniczyć rozpraszanie uwagi, aplikacja powinna obniżać 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 śledzić, 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 obsługują te ścieżki, na ścieżkach testów otwartych ani produkcyjnych, ponieważ zgłoszenia zawierające wersje na tych ścieżkach zostaną odrzucone.