Tạo trải nghiệm nhắn tin theo mẫu cho Android Auto

Trải nghiệm nhắn tin theo mẫu đang ở giai đoạn thử nghiệm
Hiện tại, bất kỳ ai cũng có thể xuất bản ứng dụng giao tiếp có trải nghiệm nhắn tin theo mẫu lên các kênh thử nghiệm nội bộ và thử nghiệm khép kín trên Cửa hàng Play. Bạn sẽ được phép xuất bản lên các kênh thử nghiệm công khai và phát hành chính thức vào một ngày sau đó.

Ngoài trải nghiệm nhắn tin cơ bản dựa trên thông báo để đọc và trả lời tin nhắn, Android Auto còn hỗ trợ trải nghiệm nhắn tin phong phú hơn được xây dựng bằng Thư viện ứng dụng Android cho Ô tô.

Hỗ trợ trải nghiệm nhắn tin dựa trên thông báo

Tất cả ứng dụng hỗ trợ trải nghiệm nhắn tin theo mẫu cũng phải mở rộng thông báo nhắn tin cho Android Auto. Tính năng tích hợp này cho phép người dùng đọc và trả lời tin nhắn mà không cần mở ứng dụng theo mẫu.

Tạo trải nghiệm nhắn tin theo mẫu

Hãy làm theo hướng dẫn trong Sử dụng Thư viện ứng dụng Android cho Ô tôThêm tính năng hỗ trợ vào ứng dụng theo mẫu dành cho Android Auto để bắt đầu tạo trải nghiệm theo mẫu cho ứng dụng của bạn. Sau đó, hãy tham khảo hướng dẫn trên trang này để hiểu các yêu cầu cụ thể đối với ứng dụng nhắn tin theo mẫu.

Định cấu hình tệp kê khai của ứng dụng

Để thông báo cho Android Auto về các tính năng của ứng dụng, ứng dụng của bạn phải làm như sau:

Khai báo tính năng hỗ trợ danh mục trong tệp kê khai của bạn

Ứng dụng của bạn cần khai báo androidx.car.app.category.MESSAGING danh mục ứng dụng cho ô tô trong bộ lọc ý định của 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>

Đặt cấp độ API tối thiểu cho ứng dụng ô tô

Vì API ConversationItem chỉ được hỗ trợ trên Car API 7 trở lên, nên bạn cũng cần đặt siêu dữ liệu minCarApiLevel thành giá trị đó. Hãy xem bài viết Cấp độ Car App API để biết thêm thông tin.

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

Khai báo chức năng hỗ trợ Android Auto

Trong tệp automotive_app_desc.xml mà bạn dùng để khai báo chức năng hỗ trợ Android Auto, hãy xác minh rằng cả chức năng notificationtemplate đều được khai báo:

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

Nếu có thể đặt ứng dụng làm trình xử lý tin nhắn SMS mặc định, hãy nhớ thêm phần tử <uses> sau. Nếu không, trình xử lý mặc định tích hợp trong Android Auto sẽ xử lý tin nhắn SMS/MMS đến. Điều này có thể dẫn đến thông báo trùng lặp.

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

Hiện các cuộc trò chuyện

Để hiện thông tin tổng quan về các cuộc trò chuyện của người dùng, bạn có thể hiện danh sách các đối tượng ConversationItem trong ListTemplate hoặc SectionedItemTemplate.

Để mang lại trải nghiệm tốt cho người dùng, bạn nên cung cấp tối đa 5 đến 10 cuộc trò chuyện gần đây nhất hoặc quan trọng nhất, với không quá 5 tin nhắn gần đây nhất cho mỗi cuộc trò chuyện. Điều này giúp cải thiện hiệu suất tải, cho phép người dùng xem nội dung phù hợp nhất và giảm thời gian tương tác.

class MyMessagingScreen(carContext: CarContext) : Screen(carContext) {
    override fun onGetTemplate(): Template {
        val itemListBuilder = ItemList.Builder()
        val conversations: List<MyConversation> = getConversations() // 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(
                    conversation.id,
                    CarText.create(conversation.title),
                    Person.Builder()
                        .setName("Me")
                        .setKey("self_id")
                        .build(),
                    carMessages,
                    myConversationCallback
                )
                    .build()
            )
        }

        val header = Header.Builder()
            .setStartHeaderAction(Action.APP_ICON)
            .setTitle("Conversations")
            .build()

        return ListTemplate.Builder()
            .setHeader(header)
            .setSingleList(itemListBuilder.build())
            .build()
    }
}

Mỗi ConversationItem sẽ tự động hiện các thao tác để phát tin nhắn và đánh dấu là đã đọc cũng như để trả lời. Những thao tác đó được xử lý bởi ConversationCallbackDelegate mà bạn cung cấp khi tạo ConversationItem.

Nếu ứng dụng của bạn cung cấp lối tắt cuộc trò chuyện, hãy xác minh rằng mã nhận dạng được cung cấp khi tạo ConversationItem giống với mã nhận dạng của lối tắt cuộc trò chuyện đó.

Cập nhật cuộc trò chuyện

Khi người dùng gửi và nhận tin nhắn, bạn nên làm mới màn hình của ứng dụng để thêm tin nhắn mới bằng cách gọi invalidate(). Xem phần Làm mới nội dung của một mẫu.

Để mang lại trải nghiệm tốt nhất cho người dùng, bạn nên giữ thời gian làm mới ở mức 500 mili giây trở xuống. Nếu thời gian làm mới thường xuyên lâu hơn, bạn có thể hiện trạng thái tải trong khi tải tin nhắn đến.

Đặt mức độ quan trọng của thông báo một cách thích hợp

Để giảm phiền nhiễu, ứng dụng của bạn nên giảm mức độ quan trọng của thông báo đến khi người dùng đang sử dụng ứng dụng của bạn để xem cuộc trò chuyện tương ứng, để thông báo không xuất hiện dưới dạng thông báo dạng đầu (HUN).

Bạn có thể theo dõi xem một cuộc trò chuyện có hiển thị hay không bằng cách quan sát vòng đời của Screen hiện cuộc trò chuyện đó. Xem bài viết Vòng đời của màn hình.

Để ngăn thông báo xuất hiện dưới dạng HUN, hãy đặt mức độ ưu tiên thành IMPORTANCE_DEFAULT trở xuống.

Phân phối ứng dụng nhắn tin theo mẫu

Vì các ứng dụng hỗ trợ trải nghiệm nhắn tin theo mẫu chỉ có thể được xuất bản lên các kênh Thử nghiệm nội bộ và Thử nghiệm khép kín trên Google Play, nên bạn không được quảng bá bản dựng có hỗ trợ cho các kênh Thử nghiệm công khai hoặc Phát hành chính thức, vì các bản gửi có chứa bản dựng trên các kênh đó sẽ bị từ chối.