アシスタント用にコンテキスト コンテンツを最適化する

Android 6.0 Marshmallow では、アシスタントを通じてアプリを操作できる新しい方法が導入されています たとえば、 Google アシスタント。アシスタントは、ユーザーがコンテキストから情報を確認するための最上位のウィンドウ 現在のアクティビティに関連するアクションを選択できます。これらのアクションには、Google Chat 上の他のアプリへのディープリンクが クリックします。

アシスタントを起動するには、ホームボタンを長押しするか、 keyphrase。 すると、最上位ウィンドウが開き、コンテキストに基づいて 向上します

Google アシスタントなどのアシスタント アプリは、API を介してアシスタント オーバーレイ ウィンドウを実装します。 これは、Android プラットフォーム レベルの機能と連動する Now on Tap です。システム を使用すると、ユーザーがアシスタント アプリを選択できます。アシスタント アプリは、 Android の Assist API。

このガイドでは、Android アプリで Android の Assist API を使用してアシスタントを改善する仕組みについて説明します 向上させることができますアシスタントを起動できるようにメディアアプリを作成する方法 と操作方法については、Google アシスタントとメディアアプリをご覧ください。

アシスタントの使用

アシスタントの標準的なユーザー操作を図 1 に示します。ユーザーが長押ししたとき ホームボタンを押すと、Assist API コールバックが ソースアプリにインストールする必要があります(ステップ 1)。アシスタントがオーバーレイ ウィンドウをレンダリングします(ステップ 2 と 3)。 ユーザーが実行するアクションを選択します。選択したアクションをアシスタントが実行し たとえば、(destination)レストラン アプリへのディープリンクを含むインテントを起動します(ステップ 4)。

図 1. 以下の Now on Tap 機能を使用したアシスタント操作の例 Google アプリ

ユーザーは、[Settings] >アプリ >デフォルトのアプリ > アシストと音声入力。ユーザーはシステム オプション( 画面コンテンツをテキストとして表示し、スクリーンショットにアクセスします。

図 2. アシストと音声入力の設定

ソースアプリ

アプリがユーザーの情報源としてアシスタントと連携できるようにするには、 ユーザー補助のベスト プラクティスに従うだけでよい プラクティスをご覧ください。このセクションでは、その他の情報を提供する方法について説明します。 ユーザーエクスペリエンスの向上に役立ち カスタムビューなど、特別な処理が必要な リソースを表示できます。

追加情報を共有する アシスタントを利用

テキストやスクリーンショットに加え、アプリは 情報を取得できます。たとえば、自分の音楽 アプリは現在のアルバム情報を渡すことで、アシスタントがその情報を 現在のアクティビティに適した、よりスマートなアクションを提案します。なお Assist API は メディア コントロールを提供していません。メディア コントロールを追加するには、以下をご覧ください。 Google アシスタントとメディアアプリ

アシスタントに追加情報を提供するために、アプリは以下を提供します。 グローバル アプリケーション コンテキストを提供するため、アプリリスナーを登録し、 以下に示すように、アクティビティ コールバックを使用してアクティビティ固有の情報を提供します。 図 3:

図 3. Assist API のライフサイクル シーケンス図

グローバル アプリケーション コンテキストを提供するため、アプリは次の実装を作成します。 Application.OnProvideAssistDataListener を実行して登録する registerOnProvideAssistDataListener() を使用します。 アクティビティ固有のコンテキスト情報を提供するため、アクティビティは、 onProvideAssistData() をオーバーライド および onProvideAssistContent()。 2 つのアクティビティ メソッドは、オプションのグローバル モードの後に呼び出されます。 コールバックが呼び出されます。コールバックはメインスレッドで実行されるため、 速やかに完了してください。 コールバックはアクティビティが実行中のときにのみ呼び出されます。

コンテキストを提供する

ユーザーがアシスタントを起動すると onProvideAssistData() が呼び出され、完全なイメージが ACTION_ASSIST インテントのコンテキストを AssistStructure のインスタンスとして表される現在のアプリケーション。このメソッドをオーバーライドして、 バンドルに自由に選択して EXTRA_ASSIST_CONTEXT の一部です。

コンテンツについて説明する

アプリに onProvideAssistContent() を実装できる コンテンツ関連の参照を提供してアシスタントのユーザー エクスペリエンスを向上させる 履歴が表示されます。アプリのコンテンツの説明は、 Schema.org で定義されている共通語彙 渡す必要があります以下の例では、音楽アプリが ユーザーが現在閲覧している音楽アルバムを説明する構造化データ 表示:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

また、カスタム実装を使用して、ユーザー エクスペリエンスを向上させることもできます。 onProvideAssistContent(), これには次のような利点があります

注: カスタムのテキスト選択を実装するアプリでは、 onProvideAssistContent() を実装する setClipData() を呼び出します。

デフォルト実装

onProvideAssistData()onProvideAssistContent() のどちらもない場合 コールバックが実装されていてもシステムは引き続き処理を進め、 アシスタントがユーザーに自動収集する情報で、 セキュアのフラグが付けられます。 図 3 に示すように、システムは onProvideStructure()onProvideVirtualStructure() のデフォルト実装を使用して、 テキストとビュー階層情報を収集できます。ビューにカスタム テキスト描画、onProvideStructure() をオーバーライドして setText(CharSequence) を呼び出して、ユーザーに表示するテキストをアシスタントに渡します。

ほとんどの場合、ユーザー補助サポートを実装すると、 必要な情報を取得できます。ユーザー補助サポートを実装するには 「アプリケーションの構築」に記載されている 以下を含む。

アシスタントによる視聴回数の除外

機密情報を処理するため、アプリは現在のビューをアシスタントから除外できます WindowManagerFLAG_SECURE レイアウト パラメータを設定します。FLAG_SECURE を明示的に設定する必要があります。 ダイアログを含め、アクティビティによって作成されたすべてのウィンドウ。アプリでは 除外するsetSecure() アシスタントからサーフェスを選択できます「 グローバル(アプリレベル)のメカニズムを使用して、アシスタントからすべてのビューを除外します。備考 FLAG_SECURE によって Assist API コールバックが停止しないこと 発生します。FLAG_SECURE を使用するアクティビティは、引き続き明示的に 前述のコールバックを使用して、アシスタント アプリに情報を提供する ご覧ください。

注: 企業アカウント(Android for Work)の場合、 管理者は DevicePolicyManager API の setScreenCaptureDisabled() メソッドを使用して、仕事用プロファイルのアシスタント データの収集。

音声操作

Assist API のコールバックは キーフレーズ 検出できます。詳しくは、 音声 アクションのドキュメントをご覧ください。

Z オーダーに関する注意事項

アシスタントは、画面上部に表示される軽量のオーバーレイ ウィンドウを使用します。 確認できます。ユーザーはいつでもアシスタントを起動できるため、 永続的な を作成しない システム アラート ウィンドウが表示されます。 図 4:

図 4. アシストレイヤの Z オーダー

アプリで を使用している場合 システム アラートのウィンドウが開いたら、すぐに削除してかまいません。 ユーザーエクスペリエンスが損なわれます

デスティネーション アプリ

アシスタント アプリは通常、リンク先のアプリを見つけるためにディープリンクを利用します。いつでも ディープリンクのサポートの追加を検討してください。照合 現在のユーザー コンテキストと、サイトに表示されるディープリンクなどの オーバーレイ ウィンドウ(図 1 のステップ 3)は、Google アシスタントの実装に固有のものです。 対象 たとえば、Google アシスタント アプリは、以下の目的のためにディープリンクとアプリリンクを使用します。 リンク先のアプリにトラフィックを誘導する

独自のアシスタントを実装する

独自のアシスタントを実装することも可能です。図 2 の場合、ユーザーはアクティブなアシスタント アプリを選択できます。「 アシスタント アプリは、に示すように VoiceInteractionSessionServiceVoiceInteractionSession の実装を提供する必要があります。 (こちらの VoiceInteraction の例をご覧ください)また、BIND_VOICE_INTERACTION パーミッションも必要です。すると、アシスタントは onHandleAssist()AssistStructure のインスタンスとして表されるテキストとビュー階層を受け取ります。 onHandleScreenshot() を介してスクリーンショットを受け取ります。