読み上げ

読み上げは Android デバイスで利用できる Google アシスタントの機能であり、ニュース記事やブログ投稿のような長文のウェブ コンテンツを読むための代替手段をユーザーに提供します。「OK Google, 読み上げて」などと話しかけると、アプリがウェブベースのコンテンツを読み上げ、読み上げ中の単語をハイライト表示して、ページを自動スクロールできます。この機能について詳しくは、読み上げプロダクトの最新情報に関する投稿もご覧ください。

プロンプトが表示されたら、アプリは Google アシスタントの助けを借りて画面上のウェブ コンテンツを読み上げます。
図 1. アプリの音声による読み上げでは、ウェブ コンテンツが読み上げられます。

ウェブベースのコンテンツを含む Android アプリで読み上げをサポートするには、onProvideAssistContent() メソッドを使用してアシスタントに情報を提供します。

このプロセスは、アシスタントと共有されるデータの構造を維持するために役立ちます。共有されたアプリ コンテンツを受け取るユーザーは、ディープリンクされたり、コンテンツをテキストまたはスクリーンショットとしてではなく直接受け取ったりします。

アプリ内のウェブベースのコンテンツおよび共有可能な entityonProvideAssistContent() を実装します。

アシスタントにコンテンツを提供する

読み上げ機能でコンテンツにアクセスするには、コンテンツに関する情報(ウェブ URI や基本的なコンテキストなど)をアプリからアシスタントに提供する必要があります。それから、アシスタントがコンテンツを取得してユーザーに読み上げます。

WebView または Chrome カスタムタブを使用してウェブベースのコンテンツをすでに実装している Android アプリでは、出発点として、読み上げ機能と同じウェブ URI を使用します。

Read It 機能と組み込みインテントを組み合わせる場合、App Action の呼び出し後に、ユーザーのタスクフローで最終的なアプリ アクティビティに onProvideAssistContent() を実装するだけで済みます。

たとえば、アプリでニュース記事を表示する場合、記事を表示する最後の画面に onProvideAssistContent() を実装します。進行中の画面やプレビュー画面に実装する必要はありません。

AssistContenturi フィールドで、コンテンツのウェブ URI を指定します。structuredData フィールドで、schema.org ボキャブラリを使用する JSON-LD オブジェクトとして、コンテキスト情報を指定します。

次のコード スニペットは、アシスタントにコンテンツを提供する例を示しています。

Kotlin

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

    // Set the web URI for content to be read from a
    // WebView, Chrome Custom Tab, or other source
    val urlString = url.toString()
    outContent.setWebUri(Uri.parse(urlString))

    // Create JSON-LD object based on schema.org structured data
    val structuredData = JSONObject()
        .put("@type", "Article")
        .put("name", "ExampleName of blog post")
        .put("url", outContent.getWebUri())
        .toString()
    outContent.setStructuredData(structuredData)
}

Java

@Override
public void onProvideAssistContent(AssistContent outContent) {

  // Set the web URI for content to be read from a
  // WebView, Chrome Custom Tab, or other source
  String urlString = url.toString();
  outContent.setWebUri(Uri.parse(urlString));

  try {
      // Create JSON-LD object based on schema.org structured data
      String structuredData = new JSONObject()
          .put("@type", "Article")
          .put("name", "ExampleName of blog post")
          .put("url", outContent.getWebUri())
          .toString();
      outContent.setStructuredData(structuredData);
  } catch (JSONException ex) {
      // Handle exception
      Log.e(TAG, ex.getMessage());
  }

  super.onProvideAssistContent(outContent);
}

onProvideAssistContent() を実装する際は、各 entity についてできるだけ多くのデータを提供します。次のフィールドは必須です。

  • @type
  • .name
  • .url(コンテンツが URL アドレス指定可能な場合のみ必須)

onProvideAssistContent() の使用方法について詳しくは、Android デベロッパー向けドキュメントのアシスタント用にコンテキスト コンテンツを最適化するガイドをご覧ください。