通知ベースのメッセージング エクスペリエンスをサポートする
テンプレートに基づくメッセージング エクスペリエンスをサポートするすべてのアプリは、Android Auto のメッセージ通知も拡張 する必要があります。この統合により、ユーザーはテンプレートに基づくアプリを開かずにメッセージを読み取って返信できます。
テンプレートに基づくメッセージング エクスペリエンスを構築する
自動車向け Android アプリのライブラリを使用するとテンプレートに基づくアプリに Android Auto のサポートを追加するに記載されているガイダンスに沿って操作して、アプリのテンプレートに基づく体験の構築に取りかかリましょう。次に、このページのガイダンスを参照して、テンプレートに基づくメッセージング アプリの具体的な要件を確認します。
アプリのマニフェスト ファイルを構成する
アプリで次のことを行うと、アプリの機能を Android Auto に通知できます。
マニフェストでカテゴリのサポートを宣言する
アプリでは、androidx.car.app.category.MESSAGING 自動車アプリ
カテゴリを
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 レベルを設定する
ConversationItem API は Car
API 7 以降でのみサポートされているため、minCarApiLevel メタデータもその
値に設定する必要があります。詳しくは、自動車アプリの API レベルをご覧ください。
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Android Auto のサポートを宣言する
<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 の作成時に指定した ID が、その会話のショートカットの ID と同じであることを確認します。
会話を更新する
ユーザーがメッセージを送信または受信したら、アプリの画面を更新して
新しいメッセージを含める必要があります。invalidate()テンプレートのコンテンツを更新するをご覧ください。
最適なユーザー エクスペリエンスを実現するため、更新時間は 500 ミリ秒以下にすることをおすすめします。頻繁な更新に時間がかかる場合は、着信メッセージの読み込み中に読み込み中状態を表示できます。
通知の重要度を適切に設定する
ユーザーが対応する会話を表示しているときに通知がヘッドアップ通知(HUN)として表示されないように、アプリは通知の重要度を下げる必要があります。
会話が表示されているかどうかは、会話を表示する Screen のライフサイクルを監視することで確認できます。画面のライフサイクルをご覧ください。
通知が HUN として表示されないようにするには、優先度を
IMPORTANCE_DEFAULT 以下に設定します。
テンプレートに基づくメッセージング アプリを配信する
テンプレートに基づくメッセージング エクスペリエンスをサポートするアプリは Google Play の内部テスト トラックとクローズド テスト トラックにのみ公開できます。そのため、通話機能を含むビルドをオープンテスト トラックや製品版トラックに昇格させないようにしてください。これらのトラックに含まれるビルドを送信すると拒否されます。