สร้างประสบการณ์การรับส่งข้อความที่ใช้เทมเพลตสําหรับ Android Auto

ประสบการณ์การรับส่งข้อความที่ใช้เทมเพลตอยู่ในเวอร์ชันเบต้า
ในขณะนี้ ทุกคนสามารถเผยแพร่แอปการสื่อสารที่มีประสบการณ์การรับส่งข้อความแบบเทมเพลตไปยังแทร็กการทดสอบภายในและการทดสอบแบบปิดใน Play Store ได้ ระบบจะอนุญาตให้เผยแพร่ไปยังแทร็กการทดสอบแบบเปิดและเวอร์ชันที่ใช้งานจริงในภายหลัง

นอกเหนือจากประสบการณ์การรับส่งข้อความขั้นพื้นฐานที่ทำงานด้วยการแจ้งเตือนสำหรับการอ่าน และการตอบกลับข้อความแล้ว Android Auto ยังรองรับประสบการณ์การรับส่งข้อความที่ดียิ่งขึ้น ซึ่งสร้างขึ้นโดยใช้ไลบรารีแอป Android สำหรับรถยนต์

รองรับประสบการณ์การรับส่งข้อความที่ขับเคลื่อนด้วยการแจ้งเตือน

แอปทั้งหมดที่รองรับประสบการณ์การรับส่งข้อความแบบเทมเพลตต้องขยาย การแจ้งเตือนการรับส่งข้อความสำหรับ Android Auto ด้วย การผสานรวมนี้ช่วยให้ผู้ใช้อ่านและตอบกลับข้อความได้โดยไม่ต้องเปิดแอปที่ใช้เทมเพลต

สร้างประสบการณ์การรับส่งข้อความที่ใช้เทมเพลต

ทำตามคำแนะนำในใช้ไลบรารีแอป Android สำหรับรถยนต์และเพิ่ม การรองรับ Android Auto ลงในแอปที่ใช้เทมเพลตเพื่อเริ่มต้น สร้างประสบการณ์ที่ใช้เทมเพลตของแอป จากนั้นดูคำแนะนำในหน้านี้เพื่อทำความเข้าใจข้อกำหนดเฉพาะสำหรับแอปส่งข้อความที่ใช้เทมเพลต

กำหนดค่าไฟล์ Manifest ของแอป

หากต้องการแจ้งให้ Android Auto ทราบถึงความสามารถของแอป แอปของคุณต้องทำสิ่งต่อไปนี้

ประกาศการรองรับหมวดหมู่ในไฟล์ Manifest

แอปต้องประกาศandroidx.car.app.category.MESSAGING หมวดหมู่แอปในรถยนต์ในตัวกรอง 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>

ตั้งค่าระดับ API ขั้นต่ำของแอปในรถยนต์

เนื่องจาก API ConversationItem รองรับเฉพาะใน Car API 7 ขึ้นไป คุณจึงควรตั้งค่าข้อมูลเมตา minCarApiLevel เป็นค่าดังกล่าวด้วย ดูข้อมูลเพิ่มเติมได้ที่ระดับ API ของแอปในรถยนต์

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

ประกาศการรองรับ Android Auto

ในautomotive_app_desc.xmlไฟล์ที่คุณใช้ประกาศการรองรับ Android Auto ให้ตรวจสอบว่าได้ประกาศทั้งความสามารถ notification และ template แล้ว

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

หากตั้งค่าแอปเป็นตัวแฮนเดิล SMS เริ่มต้นได้ ให้ตรวจสอบว่าได้รวมองค์ประกอบ <uses> ต่อไปนี้ หากไม่ทำเช่นนั้น ระบบจะใช้ตัวแฮนเดิลเริ่มต้นที่สร้างไว้ใน Android Auto เพื่อจัดการข้อความ SMS/MMS ขาเข้า ซึ่งอาจทำให้เกิดการแจ้งเตือนซ้ำ

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

แสดงการสนทนา

หากต้องการแสดงภาพรวมของการสนทนาของผู้ใช้ คุณสามารถแสดงรายการออบเจ็กต์ ConversationItem ใน ListTemplate หรือ SectionedItemTemplate

เราขอแนะนำให้แสดงการสนทนาล่าสุดหรือสำคัญที่สุดไม่เกิน 5-10 รายการ และแสดงข้อความล่าสุดไม่เกิน 5 รายการสำหรับการสนทนาแต่ละรายการ เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดี ซึ่งจะช่วยปรับปรุงประสิทธิภาพการโหลด ช่วยให้ผู้ใช้เห็นเนื้อหาที่เกี่ยวข้องมากที่สุด และลดเวลาในการโต้ตอบ

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

แต่ละConversationItemจะแสดงการดำเนินการสำหรับเล่นข้อความ และทำเครื่องหมายว่าอ่านแล้ว รวมถึงการตอบกลับโดยอัตโนมัติ ConversationCallbackDelegate ที่คุณระบุเมื่อสร้าง ConversationItem จะเป็นตัวจัดการการดำเนินการเหล่านั้น

หากแอปมีทางลัดการสนทนา ให้ตรวจสอบว่า รหัสที่ระบุเมื่อสร้าง ConversationItem ตรงกับรหัสของทางลัดการสนทนานั้น

อัปเดตการสนทนา

เมื่อผู้ใช้ส่งและรับข้อความ คุณควรรีเฟรชหน้าจอของแอปเพื่อ รวมข้อความใหม่โดยเรียกใช้ invalidate() ดูรีเฟรช เนื้อหาของเทมเพลต

เราขอแนะนำให้ตั้งเวลาการรีเฟรชเป็น 500 มิลลิวินาทีหรือน้อยกว่าเพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด หากการรีเฟรชบ่อยๆ ใช้เวลานานขึ้น คุณจะแสดงสถานะการโหลดขณะโหลดข้อความที่เข้ามาได้

ตั้งค่าความสำคัญของการแจ้งเตือนอย่างเหมาะสม

เพื่อลดสิ่งรบกวน แอปของคุณควรลดความสำคัญของการแจ้งเตือนขาเข้าเมื่อผู้ใช้กำลังดูการสนทนาที่เกี่ยวข้อง เพื่อให้การแจ้งเตือนไม่ปรากฏเป็นการแจ้งเตือนแบบผุดขึ้น (HUN)

คุณสามารถติดตามได้ว่าการสนทนาแสดงอยู่หรือไม่โดยสังเกตวงจรการใช้งานของ Screen ที่แสดงการสนทนานั้น ดูวงจรของหน้าจอ

หากไม่ต้องการให้การแจ้งเตือนปรากฏเป็น HUN ให้ตั้งค่าลำดับความสำคัญเป็น IMPORTANCE_DEFAULT หรือต่ำกว่า

เผยแพร่แอปรับส่งข้อความที่ใช้เทมเพลต

เนื่องจากแอปที่รองรับประสบการณ์การรับส่งข้อความแบบเทมเพลตจะเผยแพร่ได้เฉพาะแทร็กการทดสอบภายในและการทดสอบแบบปิดใน Google Play คุณจึงไม่ควรโปรโมตบิลด์ที่รองรับแทร็กการทดสอบแบบเปิดหรือเวอร์ชันที่ใช้งานจริง เนื่องจากระบบจะปฏิเสธการส่งที่มีบิลด์ในแทร็กเหล่านั้น