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는 자동차 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 파일에서 notification 및 template 기능이 모두 선언되어 있는지 확인합니다.
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
앱을 기본 SMS 핸들러로 설정할 수 있다면 다음 <uses> 요소를 포함해야 합니다. 포함하지 않으면 Android Auto에 내장된 기본 핸들러가 수신 SMS/MMS 메시지를 처리하는 데 사용되며 이로 인해 중복 알림이 발생할 수 있습니다.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
대화 표시
사용자의 대화 개요를 표시하려면 ListTemplate 또는 SectionedItemTemplate에 ConversationItem 객체 목록을 표시하면 됩니다.
우수한 사용자 환경을 위해 가장 최근 또는 가장 중요한 대화를 최대 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의 내부 테스트 및 비공개 테스트 트랙에만 게시할 수 있으므로 공개 테스트 또는 프로덕션 트랙에 지원이 포함된 빌드를 홍보해서는 안 됩니다. 이러한 트랙의 빌드가 포함된 제출은 거부됩니다.