人と会話

「人」と「会話」の取り組みは、スマートフォンのシステム上で人と会話を強調することを目的とした Android の複数年にわたる取り組みです。人と会話を優先する理由は、他のユーザーとのコミュニケーションや対話が、あらゆるユーザー層にわたる大多数のユーザーにとって、依然として最も価値のある重要な機能分野であるからです。

Android 11 には、人と会話の取り組みをサポートするさまざまな機能が導入されました。

会話スペース


会話スペースは、人間同士がリアルタイムに行う会話専用の通知領域です。
図 1: 会話スペース

ハンドヘルド デバイスでは、通知シェードの一番上に別個のセクションが設けられ、人とのリアルタイムの会話だけが表示されます(グループ チャットを含む、通話やチャット メッセージなど)。多くのスマートフォンで、このスペース内の通知は、会話以外の通知とは表示や動作が異なります。

  • 他とは異なるデザインで、会話を管理するアプリに参加している人を表すアバターが強調されて表示されます。
  • 通知をタップすると、アプリ(前にバブルで表示されていた会話の場合は、バブル)に会話が表示されます。カーソルをタップすると、新着メッセージがシェード内に最大限展開され、オプションがすべて表示されます。
  • 会話固有の操作が提供されます(長押しが必要なものもあります)。
    • この会話を優先としてマークする
    • この会話をバブルにする(アプリがバブルに対応している場合にのみ表示されます)
    • この会話の通知をミュートする
    • この会話にカスタムの音やバイブレーションを設定する

バブルでの会話

会話の要件を満たしている通知は、プラットフォームで通知ドロワーからバブルとして起動されます。
図 2: 通知ドロワーからバブルとして起動される通知

Android 11 以降、会話セクションの通知からバブルを開始できるようになりました。ショートカットに関連付けられている通知のみをバブルに表示できます。重要としてマークされた会話、または通知シェード内でバブルとしてトリガーされた会話は自動的にバブルになります。

会話ショートカット

会話へのショートカットがランチャーに表示され、共有シートの長期の共有ショートカットもともに表示されます。

API ガイドライン

ここでは、人と会話が表示されるシステム提供スペース向けのサポートをアプリに追加するための API について説明します。

会話へのショートカット

この会話中心の取り組みに参加するには、アプリからシステムに長期のショートカットを提供する必要があります。長期の共有ショートカットを使用することを強くおすすめします。Android 11 では必要に応じて動的ショートカットを使用できますが、今後、このオプションは削除される可能性があります。

会話へのショートカットを公開するには、ShortcutManagerCompat のメソッドのうち、setDynamicShortcuts()addDynamicShortcuts()pushDynamicShortcut() のいずれかを呼び出します(デベロッパーのためにショートカットの制限を自動的に管理します)。このショートカットは長期間保持され、会話の相手を識別する 1 人以上の人の Person データがアタッチされている必要があります。LocusIdCompat を設定することもおすすめします。

会話が終わったら、アプリは removeLongLivedShortcuts() を使ってショートカットを削除できます。これにより、その会話に関連付けられたすべてのデータが削除されます。ショートカットは削除可能ですが、絶対に削除する必要がある場合を除き、キャッシュに保存されたショートカットは削除しないでください。ショートカットがキャッシュに保存されるのは、おそらくユーザーが設定を変更する操作を行ったためであり、ショートカットを削除するとその変更が元に戻るので、ユーザーの不満を招きます。

会話の通知

次の条件に該当する場合、通知は会話の通知と見なされます。

  • 通知で MessagingStyle が使用されている。

  • (アプリが Android 11 以上をターゲットとする場合のみ)有効な長期の動的ショートカットまたはキャッシュに保存された共有ショートカットに通知が関連付けられている。通知でこの関連付けを設定するには、setShortcutId() または setShortcutInfo() を呼び出します。Android 10 以前をターゲットとするアプリの場合、フォールバック オプションのセクションで説明したように、通知にショートカットを関連付ける必要はありません。

  • ユーザーが投稿時に、通知チャンネルの設定で会話セクションから会話の順位を下げていない。

LocusIdCompat の使用

デバイス上の高度な機能によって、ユーザーが関心を持つ可能性が高い会話が判定されます。最も重要なシグナルには、各会話におけるセッションの「新しさ」と「頻度」があります。適切にタグ付けされていれば、ランチャーのショートカットからの会話や通知内での会話に対する操作を、システムが認識できます。ただし、完全にアプリ内で発生した会話の場合、それに対する操作についてもタグ付けされていない限り、システムは認識できません。そのため、LocusIdCompat をショートカットにアタッチし、アプリ内アクティビティまたはフラグメントに、関連する LocusIdCompat のアノテーションを付けることを強くおすすめします。LocusIdCompat を使用すると、候補を提示するシステムが会話を適切にランク付けしたり、会話に対するユーザーの最後の操作(アプリ内操作を含む)の正しい時刻をシステムが表示したりできるようになります。setShortcutInfo() を使用して会話にショートカットを関連付けると、会話システムが自動的に適切な LocusIdCompat をアタッチします。

Android 10 以下をターゲットとするアプリの会話スペースの要件

Android 11 をターゲットとしないアプリの場合でも、アプリのメッセージは会話スペースに表示されることがあります。ただし、アプリは特定の要件を満たす必要があります。このセクションでは、こうしたアプリの要件と、アプリが要件を満たしていない場合のフォールバック動作について説明します。

メッセージ スペースに参加するための主要な要件は、アプリが MessagingStyle 通知を実装することと、通知の投稿時に公開される通知の長期のショートカットをその通知が参照することです。これらの要件を満たす会話は、以下のように会話スペースに表示されます。

  • 通知は会話スタイルで表示されます
  • 実装されている場合はバブルボタンが提供されます
  • 会話固有の機能がインラインで提供されます

通知が上記の要件を満たしていない場合、プラットフォームはフォールバック オプションを使用して通知をフォーマットします。フォールバックのどちらかの要件を満たす通知は、会話スペースに特別なフォーマットで表示されます。フォールバック オプションのどちらにも適合しない通知は、会話スペースに表示されません。

フォールバック: MessagingStyle が使用されているが、ショートカットが提供されていない場合

Android 10 以下をターゲットとしているアプリで、通知が MessagingStyle を使用していても、メッセージがショートカットに関連付けられていない場合、通知は会話スペースに以下のように表示されます。

  • 通知は会話スタイルで表示されます
  • 提供されるバブルボタンはありません
  • インラインで提供される会話固有の機能はありません

フォールバック: MessagingStyle が使用されていないが、アプリがメッセージ アプリと認識されている場合

通知が MessagingStyle を使用していなくても、アプリがメッセージ アプリとしてプラットフォームに認識されており、通知の category パラメータが msg に設定されている場合、通知は以下のように会話スペースに表示されます。

  • 通知は Android 11 より前の古いスタイルで表示されます
  • 提供されるバブルボタンはありません
  • インラインで提供される会話固有の機能はありません

ガイダンス、使用方法、テスト

このセクションでは、会話機能の使用方法とテスト方法に関する一般的なガイダンスを示します。

会話を使用するタイミング

会話の通知と関連ショートカットの目的は、リアルタイムの会話のユーザー エクスペリエンスを向上させることです。たとえば、SMS、テキスト チャット、通話は、ユーザーがすぐにコミュニケーションをとることができるリアルタイムの会話です。ユーザーは、会話に関係のないメールやアクティビティは期待していません。

ユーザーが適切な場所にないと感じた会話を、会話セクションから削除する機能を Google は提供しています。

おすすめの方法

アプリのユーザー エンゲージメントを高め、アプリを使ったユーザー同士の交流や会話を容易にするためのおすすめの方法を以下に示します。

  • 不在着信が優先度の高い会話のシェードに表示され、会話ウィジェットに正しく表示されるようにするには、不在着信通知を conversations(カテゴリが CATEGORY_MISSED_CALL に設定されている)としてフォーマットします。
  • ユーザーに高画質のアバター(104 dp)を提供します。提供しないと、ユーザーのイニシャルが使用されるためユーザー エクスペリエンスが低下します。
  • ユーザーがメッセージを表示する前に会話通知を cancel しないでください。この場合の例として、ユーザーがメッセージの表示や処理を行えないビュー内でアプリを開いたときに、通知がキャンセルされることが挙げられます。ユーザーがメッセージを読んだり操作したりするタイミングがない場合、キャンセルされた通知とそれに関連するバブルが削除され、会話の内容が失われます。
  • メッセージに関連付けられた MIME 関連メタデータの data URI を指定することで、より豊かな通知エクスペリエンスが得られます。
  • Android 12 status API を使用すると、会話ウィジェットの操作性が向上します。
  • 会話のショートカットに関する以下のベスト プラクティスを実践します。
    • プッシュ通知を行わないアプリ内の会話の受信メッセージと送信メッセージのショートカットを公開します。同じ会話の受信メッセージと送信メッセージには、同じショートカット ID を指定する必要があります。pushDynamicShortcut() を使用して、ショートカットを公開し、使用状況を報告します。
    • ショートカットのアイコンには AdaptiveIconDrawable を指定します。指定しないと、ショートカットのアバターが意図に反してクリップされることがあります。詳しくは、ショートカット画像を提供するをご覧ください。
    • システムでショートカットの順位を上げるには、最高のランキングを取得するためのガイドラインに従ってください。共有ショートカットの場合は、Android Sharesheet など、さまざまなシステム サーフェスでランク付けされます。
    • 会話のショートカット intents によって該当する会話が直接起動されるようにします。
    • compat lib を使用して、ショートカットを conversation 関連として簡単に設定します。

会話の通知とショートカットのテスト

会話を長押しすると、会話に関する操作のメニューが開きます。
図 3: 会話の通知が適切に設定されているかどうかを確認するには、長押しして表示される会話メニューを確認します

会話スペースのガイドラインを遵守していれば、会話は自動的に会話スペースに表示されます。通知を長押しすると、ショートカットが正しく統合されているかどうかを確認できます。適切に統合されていると、UI に会話に関連する操作が表示されます。通知がショートカットにリンクされていない場合、アプリが会話機能をサポートしていないというメッセージが UI に表示されます。

追加されているショートカットは、アプリ ランチャーで長押しすると表示されます。ショートカットからアプリ内の正しい場所に移動できるかどうか確認してください。

追加されている共有ショートカットは、共有ショートカットが受け取ることができるコンテンツを共有したときに、共有シートの直接共有の行に表示されます。

会話ウィジェット

会話ウィジェットに表示される会話
図 1: 会話ウィジェットに表示される会話

Android 12 の会話ウィジェット機能は、Android 11 で導入された「人」と「会話」の機能をベースに、アプリが会話ステータスを会話ウィジェットに表示できるようにしたものです。

会話ウィジェットは、ホーム画面でチャットを簡単に開けるようにして、ユーザーの操作を促します。これらのウィジェットは拡張ショートカットであり、ユーザーの会話ステータスのスニペットやその他の関連情報を表示しながらユーザーが会話に効率的に戻ることができるようにします。

アプリが会話ウィジェットをサポートしていることを確認する

アプリが会話ウィジェットをサポートしていることを確認するには、少なくとも 2 つの Android デバイス(両方とも Android 12 を搭載)と、メッセージをやり取りするための 2 つのユーザー アカウント(各デバイスに 1 つ)が必要です。この手順では、アカウントをそれぞれ「ユーザー A」と「ユーザー B」と呼びます。

新しい会話ウィジェットを追加するためのウィジェット選択ツール UI
図 2: 新しい会話ウィジェットを追加するためのウィジェット選択ツール UI

以下の手順を行います。

  1. ユーザー A のデバイスで、ランチャーを長押しします。ウィジェット選択ツールで、図 2 に示すように会話の新しいウィジェットをタップします。
  2. ウィジェットをホーム画面にドラッグします。ユーザー A のアプリからのアクティブな会話または最近の会話のリストを選択できます。
  3. ここで、ユーザー B のデバイスでユーザー A にテスト メッセージを送信します。
  4. ユーザー A のデバイスに戻り、ユーザー B からのメッセージの通知を反映するようウィジェットが更新されていることを確認します。
  5. 省略可: ユーザー A とユーザー B が会話ごとに異なるステータス値を設定し、その値がウィジェットに適切に反映されるようにします。ステータス値のリストについては、ConversationStatus をご覧ください。