Membangun pengalaman pesan dengan template untuk Android Auto

Pengalaman fitur pesan berbasis template masih dalam versi beta
Saat ini, siapa pun dapat memublikasikan aplikasi komunikasi dengan pengalaman pesan berbasis template ke jalur pengujian internal dan pengujian tertutup di Play Store. Publikasi ke jalur pengujian terbuka dan produksi akan diizinkan pada tanggal berikutnya.

Selain pengalaman pesan dasar yang didukung notifikasi untuk membaca dan membalas pesan, Android Auto mendukung pengalaman pesan yang lebih kaya yang dibuat menggunakan Library Aplikasi Android untuk Mobil.

Mendukung pengalaman fitur pesan yang didukung notifikasi

Semua aplikasi yang mendukung pengalaman pesan dengan template juga harus memperluas notifikasi pesan untuk Android Auto. Integrasi ini memungkinkan pengguna membaca dan membalas pesan tanpa harus membuka aplikasi yang dibuat dengan template.

Membangun pengalaman pesan berbasis template

Ikuti panduan di Menggunakan Library Aplikasi Android untuk Mobil dan Menambahkan dukungan untuk Android Auto ke aplikasi dengan template untuk mulai membangun pengalaman dengan template aplikasi Anda. Kemudian, lihat panduan di halaman ini untuk memahami persyaratan khusus aplikasi pesan ber-template.

Mengonfigurasi file manifes aplikasi Anda

Untuk memberi tahu Android Auto tentang kemampuan aplikasi Anda, aplikasi Anda harus melakukan hal berikut:

Mendeklarasikan dukungan kategori dalam manifes Anda

Aplikasi Anda harus mendeklarasikan androidx.car.app.category.MESSAGING kategori aplikasi mobil dalam filter intent 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>

Menetapkan level API aplikasi mobil minimum

Karena API ConversationItem hanya didukung di Car API 7 atau yang lebih tinggi, Anda juga harus menetapkan metadata minCarApiLevel ke nilai tersebut. Lihat Level API Aplikasi Mobil untuk mengetahui informasi selengkapnya.

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

Mendeklarasikan dukungan Android Auto

Dalam file automotive_app_desc.xml yang Anda gunakan untuk mendeklarasikan dukungan Android Auto, verifikasi bahwa kemampuan notification dan template dideklarasikan:

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

Jika aplikasi Anda dapat ditetapkan sebagai pengendali SMS default, pastikan untuk menyertakan elemen <uses> berikut. Jika tidak, pengendali default bawaan Android Auto akan digunakan untuk menangani pesan SMS/MMS yang masuk, yang dapat menyebabkan notifikasi duplikat.

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

Menampilkan percakapan

Untuk menampilkan ringkasan percakapan pengguna, Anda dapat menampilkan daftar objek ConversationItem dalam ListTemplate atau SectionedItemTemplate.

Untuk pengalaman pengguna yang baik, sebaiknya berikan maksimal 5-10 percakapan terbaru atau terpenting, dengan tidak lebih dari 5 pesan terbaru untuk setiap percakapan. Hal ini membantu meningkatkan performa pemuatan, memungkinkan pengguna melihat konten yang paling relevan, dan mengurangi waktu interaksi.

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

Setiap ConversationItem otomatis menampilkan tindakan untuk memutar pesan dan menandainya sebagai sudah dibaca serta untuk membalas. Tindakan tersebut ditangani oleh ConversationCallbackDelegate yang Anda berikan saat membuat ConversationItem.

Jika aplikasi Anda menyediakan pintasan percakapan, verifikasi bahwa ID yang diberikan saat membuat ConversationItem sama dengan ID untuk pintasan percakapan tersebut.

Memperbarui percakapan

Saat pengguna mengirim dan menerima pesan, Anda harus memuat ulang layar aplikasi untuk menyertakan pesan baru dengan memanggil invalidate(). Lihat Memuat ulang konten template.

Untuk pengalaman pengguna terbaik, sebaiknya pertahankan waktu refresh 500 milidetik atau kurang. Jika penyegaran sering memerlukan waktu lebih lama, Anda dapat menampilkan status pemuatan saat memuat pesan masuk.

Menetapkan nilai penting notifikasi dengan tepat

Untuk mengurangi gangguan, aplikasi Anda harus menurunkan nilai penting notifikasi masuk saat pengguna sedang melihat percakapan yang sesuai sehingga notifikasi tidak muncul sebagai notifikasi pop-up (HUN).

Anda dapat melacak apakah percakapan terlihat dengan mengamati siklus proses Screen yang menampilkannya. Lihat Siklus proses layar.

Untuk mencegah notifikasi muncul sebagai HUN, tetapkan prioritas ke IMPORTANCE_DEFAULT atau lebih rendah.

Mendistribusikan aplikasi pesan berbasis template

Karena aplikasi yang mendukung pengalaman pesan berbasis template hanya dapat dipublikasikan ke jalur Pengujian Internal dan Pengujian Tertutup di Google Play, Anda tidak boleh mempromosikan build yang menyertakan dukungan ke jalur Pengujian Terbuka atau Produksi, karena pengiriman yang berisi build di jalur tersebut akan ditolak.