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

Trải nghiệm nhắn tin dựa trên mẫu đang ở giai đoạn thử nghiệm beta
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 dựa trên mẫu cho các kênh kiểm thử nội bộ và kiểm thử khép kín trên Cửa hàng Play. Bạn sẽ được phép xuất bản lên kênh kiểm thử công khai và kênh phát hành công khai vào một thời điểm khác.

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 tạo 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. Việc 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 dựa trên mẫu.

Tạo trải nghiệm nhắn tin dựa trên mẫu

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

Đặt cấp độ Car App API tối thiểu

Vì API ConversationItem chỉ được hỗ trợ trên Car API 7 trở lên, nên bạn cũng phải đặ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 tính 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ị 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 thị 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() : 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()
    }
}

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

Nếu ứng dụng của bạn cung cấp lối tắt 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 cho 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 để đưa tin nhắn mới vào bằng cách gọi invalidate(). Xem phần Làm mới nội dung của 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 việc làm mới thường xuyên mất nhiều thời gian hơn, bạn có thể hiển thị trạng thái tải trong khi tải các thông báo đến.

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

Để giảm phiền toái, ứng dụng của bạn nên giảm mức độ quan trọng của các thông báo đến khi người dùng đang xem một cuộc trò chuyện tương ứng để các thông báo không xuất hiện dưới dạng thông báo dạng nổi (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 thị cuộc trò chuyện đó. Xem phần 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 dựa trên mẫu

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