Android Auto용 템플릿 메시지 환경 빌드

템플릿 메시지 환경이 베타 버전으로 제공됩니다.
현재 누구나 템플릿 메시지 환경이 포함된 커뮤니케이션 앱을 Play 스토어의 내부 테스트 및 비공개 테스트 트랙에 게시할 수 있습니다. 공개 테스트 및 프로덕션 트랙에 게시하는 기능은 추후에 허용될 예정입니다.

Android Auto는 메시지 읽기 및 답장을 위한 기본 알림 기반 메시지 환경 외에도 자동차용 Android 앱 라이브러리를 사용하여 빌드된 더 풍부한 메시지 환경을 지원합니다.

알림 기반 메시지 환경 지원

템플릿 메시지 환경을 지원하는 모든 앱은 Android Auto용 메시지 알림을 확장해야 합니다. 이렇게 하면 사용자가 템플릿 앱을 열지 않고도 메시지를 읽고 답장할 수 있습니다.

템플릿 메시지 환경 빌드

자동차용 Android 앱 라이브러리 사용템플릿 형식 앱에 Android Auto 지원 추가의 안내에 따라 앱의 템플릿 형식 환경 빌드를 시작합니다. 그런 다음 이 페이지의 안내를 참고하여 템플릿 메시지 앱의 구체적인 요구사항을 알아보세요.

앱의 매니페스트 파일 구성

Android Auto에 앱의 기능을 알리려면 앱에서 다음을 실행해야 합니다.

매니페스트에서 카테고리 지원 선언

앱은 CarAppService의 인텐트 필터에서 androidx.car.app.category.MESSAGING 자동차 앱 카테고리를 선언해야 합니다.

<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 수준 설정

ConversationItem API는 Car API 7 이상에서만 지원되므로 minCarApiLevel 메타데이터도 이 값으로 설정해야 합니다. 자세한 내용은 자동차 앱 API 수준을 참고하세요.

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

Android Auto 지원 선언

Android Auto 지원을 선언하는 데 사용하는 automotive_app_desc.xml 파일에서 notificationtemplate 기능이 모두 선언되어 있는지 확인합니다.

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

앱을 기본 SMS 핸들러로 설정할 수 있다면 다음 <uses> 요소를 포함해야 합니다. 포함하지 않으면 Android Auto에 내장된 기본 핸들러가 수신 SMS/MMS 메시지를 처리하는 데 사용되며 이로 인해 중복 알림이 발생할 수 있습니다.

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

대화 표시

사용자의 대화 개요를 표시하려면 ListTemplate 또는 SectionedItemTemplateConversationItem 객체 목록을 표시하면 됩니다.

최상의 사용자 환경을 위해 가장 최근 또는 가장 중요한 대화 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는 메시지를 재생하고, 읽은 것으로 표시하고, 답장하는 작업을 자동으로 표시합니다. 이러한 작업은 ConversationItem를 빌드할 때 제공하는 ConversationCallbackDelegate에서 처리합니다.

앱에서 대화 바로가기를 제공하는 경우 ConversationItem를 빌드할 때 제공된 ID가 해당 대화의 바로가기 ID와 동일한지 확인합니다.

대화 업데이트

사용자가 메시지를 주고받을 때 invalidate()를 호출하여 새 메시지를 포함하도록 앱의 화면을 새로고침해야 합니다. 템플릿 콘텐츠 새로고침을 참고하세요.

최상의 사용자 환경을 위해 새로고침 시간을 500밀리초 이하로 유지하는 것이 좋습니다. 새로고침하는 데 시간이 오래 걸리는 경우 수신 메시지를 로드하는 동안 로드 상태를 표시할 수 있습니다.

알림 중요도 적절하게 설정

방해를 줄이기 위해 앱은 사용자가 상응하는 대화를 보고 있을 때 수신 알림의 중요도를 낮춰야 하므로 알림이 팝업 알림 (HUN)으로 표시되지 않습니다.

대화를 표시하는 Screen의 수명 주기를 관찰하여 대화가 표시되는지 추적할 수 있습니다. 화면의 수명 주기를 참고하세요.

알림이 HUN으로 표시되지 않도록 하려면 우선순위를 IMPORTANCE_DEFAULT 이하로 설정하세요.

템플릿 메시지 앱 배포

템플릿 메시지 환경을 지원하는 앱은 Google Play의 내부 테스트 및 비공개 테스트 트랙에만 게시할 수 있으므로 공개 테스트 또는 프로덕션 트랙에 대한 지원이 포함된 빌드는 프로모션해서는 안 됩니다. 이러한 트랙의 빌드가 포함된 제출물은 거부되기 때문입니다.