Membangun pengalaman pesan dengan template untuk Android Auto

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

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

Mendukung pengalaman fitur pesan yang didukung notifikasi

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

Membuat pengalaman fitur pesan dengan template

Ikuti panduan di Menggunakan Library Aplikasi Android untuk Mobil dan Menambahkan dukungan untuk Android Auto ke aplikasi dengan template untuk mulai membuat pengalaman dengan template aplikasi Anda. Kemudian, lihat panduan di halaman ini untuk memahami persyaratan khusus aplikasi pesan dengan 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 ConversationItem API 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

Di file automotive_app_desc.xml yang Anda gunakan untuk mendeklarasikan dukungan Android Auto, pastikan 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 di 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 telah dibaca serta untuk membalas. Tindakan tersebut ditangani oleh ConversationCallbackDelegate yang Anda berikan saat membuat ConversationItem.

Jika aplikasi Anda menyediakan pintasan percakapan, pastikan 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 muat ulang hingga 500 milidetik atau kurang. Jika pemuatan ulang sering kali memerlukan waktu lebih lama, Anda dapat menampilkan status pemuatan saat memuat pesan yang masuk.

Menetapkan tingkat kepentingan notifikasi dengan tepat

Untuk mengurangi gangguan, aplikasi Anda harus menurunkan tingkat kepentingan notifikasi yang masuk saat pengguna menggunakan 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 dengan template

Karena aplikasi yang mendukung pengalaman fitur pesan dengan 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.