Membangun pengalaman pesan dengan template untuk Android Auto

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

Selain pengalaman pesan yang didukung notifikasi dasar 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. Hal ini memastikan bahwa pengguna dapat membaca dan membalas pesan tanpa harus membuka aplikasi dengan template.

Membuat pengalaman pesan dengan template

Ikuti panduan di Menggunakan Library Aplikasi Android untuk Mobil dan Menambahkan dukungan untuk Android Auto ke aplikasi dengan template untuk mulai mem-build pengalaman template aplikasi Anda. Kemudian, lihat panduan di halaman ini untuk memahami persyaratan khusus bagi 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 kategori aplikasi mobil androidx.car.app.category.MESSAGING 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 API Level 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, 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 terbaik, sebaiknya sediakan maksimal 5-10 percakapan terbaru atau terpenting, dengan tidak lebih dari 5 pesan terbaru untuk setiap percakapan. Hal ini membantu meningkatkan performa pemuatan, memastikan 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 mem-build ConversationItem.

Jika aplikasi Anda menyediakan pintasan percakapan, pastikan ID yang diberikan saat mem-build 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 hingga 500 milidetik atau kurang. Jika refresh sering kali 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 tingkat kepentingan notifikasi yang masuk saat pengguna menggunakan aplikasi Anda untuk melihat percakapan yang sesuai sehingga notifikasi tidak muncul sebagai notifikasi peringatan (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 yang lebih rendah.

Mendistribusikan aplikasi pesan dengan template

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