1. 概要
1 つ目の App Actions Codelab では、Fitness BII カテゴリの組み込みインテント(BII: Built-In Intent)を実装し、サンプル フィットネス アプリを Google アシスタントに拡張する方法を学びました。
App Actions を使用すると、「OK Google, ExampleApp でランニングを開始」のように話しかけるだけで、アプリの特定の機能をアシスタントから直接起動できます。アプリを起動するだけでなく、ユーザーに対してインタラクティブな Android ウィジェットを表示し、使用可能な BII のリクエストに対応することもできます。
目標
この Codelab では、アシスタントのユーザーからのリクエストに応じて Android ウィジェットを返す方法を学びます。以下についても学習します。
- BII パラメータを使用してウィジェットをカスタマイズする方法。
- アシスタントが読み上げる案内用の TTS(テキスト読み上げ)をウィジェットに提供する方法。
- 組み込みインテントのリファレンスを使用して、ウィジェットのフルフィルメントをサポートする BII を特定する方法。
前提条件
先に進む前に、App Actions の開発環境が整っていることを確認してください。以下が必要です。
- シェルコマンドを実行するためのターミナル(git がインストールされていること)。
- Android Studio の最新の安定版。
- インターネットにアクセスできる Android デバイス(実機または仮想デバイス)。
- Android Studio、Google アプリ、Google アシスタント アプリにログインしている Google アカウント。
実機を使用する場合は、ローカルの開発マシンに接続します。
2. 仕組みを理解する
Google アシスタントは、自然言語理解(NLU)によってユーザーのリクエストを読み取り、アシスタントの組み込みインテント(BII)と照合します。一致する BII が見つかると、その BII を実装するケーパビリティにインテントをマッピングします。このケーパビリティは、そのインテント用にアプリに登録したものです。最後に、このケーパビリティ内の詳細情報に基づいて生成された Android ウィジェットを表示し、ユーザーからのリクエストに対応します。
この Codelab では、GET_EXERCISE_OBSERVATION
BII のサポートを登録するケーパビリティを定義します。このケーパビリティでは、FitActions
ウィジェット クラスに対する Android インテントを生成し、この BII のリクエストに対応するようアシスタントに指示します。このクラスを更新すると、ユーザーに対して表示するカスタマイズされたウィジェットと、アシスタントが読み上げる案内用の TTS が生成されます。
下の図に一連の流れを示します。
FitActions ウィジェット
FitActions サンプルアプリには、ユーザーがホーム画面に追加できるエクササイズ情報ウィジェットが含まれています。ここでは、このウィジェットを使用して、GET_EXERCISE_OBSERVATION
BII をトリガーするユーザークエリに対応します。
ウィジェットの仕組み
ユーザーがホーム画面にウィジェットを追加すると、ウィジェットがデバイスのブロードキャスト レシーバに対して ping を実行します。このサービスにより、アプリの AndroidManifest.xml
リソース内のウィジェットのレシーバの定義から、ウィジェットに関する情報が取得されます。この情報は、ウィジェットを表す RemoteViews
オブジェクトを生成する際に使用します。
サンプルアプリでは、StatsWidgetProvider
クラスに対応するレシーバ widgets.StatsWidgetProvider
を定義しています。
<!-- app/src/main/AndroidManifest.xml -->
<receiver
android:name=".widgets.StatsWidgetProvider"
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/stats_widget" />
</receiver>
StatsWidgetProvider
クラス(StatsWidgetProvider.kt
)は、StatsWidget
オブジェクトの作成フローを管理します。以下の役割を担います。
- ウィジェットのインスタンスを作成し、アプリ データベースから取得したエクササイズ データを入力する。
formatDataAndSetWidget()
でエクササイズ データをフォーマットして読みやすくする。- エクササイズ データを取得できない場合は、
setNoActivityDataWidget()
を使用してデフォルト値を提供する。
アシスタントのサポートを追加する
この Codelab では、サンプルアプリを更新して App Actions 機能を処理できるようにします。変更する点は以下のとおりです。
GET_EXERCISE_OBSERVATION
BII ケーパビリティを構成し、StatsWidget
オブジェクトのインスタンスが返されるようにする。StatsWidget
クラスを更新し、以下のような App Actions 機能を使用できるようにする。- ユーザーが「OK Google, ExampleApp にランニングの統計情報を表示」と話しかけたら、BII パラメータを使用して特定のエクササイズの統計情報を表示する。
- 案内用の TTS 文字列を提供する。
- ユーザークエリにエクササイズの種類を表すパラメータが含まれていない場合など、特殊なケースに対応する。
3. 開発環境を準備する
ベースファイルをダウンロードする
次のコマンドを実行して、サンプルアプリの GitHub リポジトリのクローンを作成します。
git clone --branch start-widget-codelab https://github.com/actions-on-google/appactions-fitness-kotlin.git
リポジトリのクローンが作成されたら、Android Studio でリポジトリを開きます。手順は次のとおりです。
- [Welcome to Android Studio] ダイアログで、[Import project] をクリックします。
- リポジトリのクローンを作成したフォルダを探して選択します。
この Codelab のアプリの完成版を確認するには、--branch master
フラグを使用してサンプルアプリのリポジトリのクローンを作成します。
Android アプリケーション ID を変更する
この Codelab では、Google アシスタント プラグインを使用し、実機または仮想デバイスでアクションをテストします。このテストツールを実行するには、Google Play Console のプロジェクトにアプリをアップロードしておく必要があります。Google Play Console にアプリをアップロードする際は、パッケージ名の重複によるエラーを回避するため、サンプルアプリの applicationId
を固有の ID に変更してください(Google Play に複数のアプリを同じ applicationId
でアップロードすることはできないため)。
app/build.gradle
で、applicationId
の値PUT_YOUR_APPLICATION_ID_HERE
を固有の ID(例:com.codelabs.myname
)に変更します。Android アプリケーション ID について詳しくは、アプリケーション ID を設定するをご覧ください。app/src/res/xml/shortcuts.xml
を開き、android:targetPackage
の 2 つのインスタンスを固有のapplicationId
に変更します。
Google Play Console にアップロードする
Android Studio の Google アシスタント プラグインを使用するには、Google Play Console 内のプロジェクトにアプリをアップロードする必要があります。Android Studio でアプリをビルドし、内部リリースのドラフトとして Google Play Console にアップロードします。
Android Studio でアプリをビルドする手順は次のとおりです。
- [Build] > [Generate Signed Bundle / APK] に移動します。
- [Android App Bundle] を選択し、[Next] をクリックします。
- アプリに署名するための詳細を入力し、[Next] をクリックします。[Destination Folder] セクションで、生成されたバンドルへのパスを確認します。
- ビルド バリアントとして
prodRelease
またはrelease
を選択し、[Finish] をクリックします。
前の手順で作成した App Bundle を、新しいアプリとして Google Play Console にアップロードします。
- [すべてのアプリ] ページで、[アプリを作成] をクリックします。
- [アプリ名] ボックスにアプリの名前(例:「ウィジェット Codelab」)を入力します。
- [アプリ / ゲーム] で [アプリ] を選択します。
- [無料 / 有料] で [無料] を選択します。
- 表示された [申告] に同意します。
- [アプリを作成] をクリックします。
- Google Play Console のサイドメニューから [テスト] に移動し、[内部テスト] ページに移動します。
- このページで [新しいリリースを作成] をクリックします。
- Google Play アプリ署名への同意を求められたら [次へ] をクリックします。
- [App Bundle と APK] パネルで、前の手順で生成した AAB ファイルをアップロードします。このファイルは、通常であればプロジェクトの
app/prod/release
またはapp/release
ディレクトリにあります。[保存] をクリックします。
テスト プラグインをインストールする
Google アシスタント プラグインを使用すると、テストデバイスで App Actions をテストできます。テストでは、Android デバイスの Google アプリからアシスタントに情報を送信します。プラグインをまだインストールしていない場合は、次の手順でインストールします。
- [File] > [Settings](MacOS では [Android Studio] > [Preferences])に移動します。
- [Plugins] セクションで [Marketplace] に移動し、「Google Assistant」を検索します。手動でテストツールをダウンロードしてインストールすることもできます。
- ツールをインストールして Android Studio を再起動します。
デバイスでアプリをテストする
アプリに変更を加える前に、サンプルアプリで何ができるか確認しておくことをおすすめします。
テストデバイスでアプリを実行する手順は次のとおりです。
- Android Studio で実機または仮想デバイスを選択し、[Run] > [Run app] を選択するか、ツールバーの実行アイコン をクリックします。
- ホームボタンを長押ししてアシスタントをセットアップし、正常に動作することを確認します。デバイスでアシスタントにログインしていない場合はログインする必要があります。
Android Virtual Device の詳細については、仮想デバイスを作成して管理するをご覧ください。
アプリを動作させてみて、何ができるかを確認してください。最初の画面には、事前設定されている 10 種類のエクササイズ アクティビティが表示されます。
既存のウィジェットを試す
- [Home] ボタンをタップすると、テストデバイスのホーム画面に移動します。
- ホーム画面の空いているスペースを長押しして [Widgets] を選択します。
- ウィジェットのリストを下にスクロールして [FitActions] を探します。
- FitActions アイコンを長押しし、そのウィジェットをホーム画面に配置します。
4. App Action を追加する
このステップでは、GET_EXERCISE_OBSERVATION
BII ケーパビリティを追加します。そのためには、shortcuts.xml
に新しい capability
要素を追加する必要があります。このケーパビリティで、ケーパビリティをトリガーする方法、BII パラメータの使用方法、リクエストに対応するためにどの Android インテントを呼び出すかを指定します。
- サンプル プロジェクトの
shortcuts.xml
リソースに新しいcapability
要素を追加し、次のように構成します。<!-- fitnessactions/app/src/main/res/xml/shortcuts.xml --> <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION"> <app-widget android:identifier="GET_EXERCISE_OBSERVATION" android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider" android:targetPackage="PUT_YOUR_APPLICATION_ID_HERE"> <parameter android:name="exerciseObservation.aboutExercise.name" android:key="aboutExerciseName" android:required="true"> </parameter> <extra android:name="hasTts" android:value="true"/> </app-widget> <!-- Add Fallback Intent--> </capability>
android:targetPackage
の値PUT_YOUR_APPLICATION_ID_HERE
は、固有のapplicationId
で置き換えます。
このケーパビリティは、GET_EXERCISE_OBSERVATION
BII を app-widget
インテントにマッピングします。これで、BII がトリガーされるとウィジェットがインスタンス化されてユーザーに表示されます。
アシスタントは、ウィジェットをトリガーする前に、サポートされている BII パラメータをユーザークエリから抽出します。この Codelab では、ユーザーがリクエストしたエクササイズの種類を表す BII パラメータ exerciseObservation.aboutExercise.name
が必要になります。アプリでサポートされているエクササイズは、「running」、「walking」、「cycling」の 3 種類です。サポートされている値をアシスタントに伝えるため、インライン インベントリを指定します。
- これらのインベントリ要素を定義するには、
shortcuts.xml
のGET_EXERCISE_OBSERVATION
ケーパビリティの上に次の構成を追加します。<!-- shortcuts.xml --> <!-- shortcuts are bound to the GET_EXERCISE_OBSERVATION capability and represent the types of exercises supported by the app. --> <shortcut android:shortcutId="running" android:shortcutShortLabel="@string/activity_running"> <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION"> <parameter-binding android:key="exerciseObservation.aboutExercise.name" android:value="@array/runningSynonyms"/> </capability-binding> </shortcut> <shortcut android:shortcutId="walking" android:shortcutShortLabel="@string/activity_walking"> <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION"> <parameter-binding android:key="exerciseObservation.aboutExercise.name" android:value="@array/walkingSynonyms"/> </capability-binding> </shortcut> <shortcut android:shortcutId="cycling" android:shortcutShortLabel="@string/activity_cycling"> <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION"> <parameter-binding android:key="exerciseObservation.aboutExercise.name" android:value="@array/cyclingSynonyms"/> </capability-binding> </shortcut> <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION"> <!-- ... --> </capability>
フォールバック インテントを追加する
フォールバック インテントは、ケーパビリティに必要なパラメータがユーザークエリに含まれておらず、クエリを実行できない場合に対処するためのものです。GET_EXERCISE_OBSERVATION
ケーパビリティには、属性 android:required="true"
で指定された exerciseObservation.aboutExercise.name
パラメータが必要です。そこで、フォールバック インテントを定義して、クエリにパラメータが指定されていなくてもリクエストに対応できるようにしておく必要があります。
- 次の構成を使用して、
shortcuts.xml
のGET_EXERCISE_OBSERVATION
ケーパビリティにフォールバック インテントを追加します。<!-- shortcuts.xml --> <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION"> <app-widget> <!-- ... --> </app-widget> <!-- Fallback intent with no parameters needed to successfully execute.--> <intent android:identifier="GET_EXERCISE_OBSERVATION_FALLBACK" android:action="android.intent.action.VIEW" android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider"> </intent> </capability>
このサンプル構成では、フォールバック フルフィルメントが Extra
データにパラメータのない Android インテントとして指定されています。
5. アシスタントのウィジェットを有効にする
GET_EXERCISE_OBSERVATION
ケーパビリティが確立されたら、ウィジェット クラスを更新して App Actions の音声呼び出しがサポートされるようにします。
Widgets Extension ライブラリを追加する
App Actions の Widgets Extension ライブラリを使用すると、音声を主体とするアシスタントに対応できるようウィジェットを拡張できます。たとえば、この場合であれば案内用のカスタム TTS をウィジェットに提供できます。
- サンプルアプリの
/app/build.gradle
リソースに、Widgets Extension ライブラリの依存関係を追加します。
Android Studio に警告が表示されたら、[Sync Now] をクリックします。// app/build.gradle dependencies { //... implementation "com.google.assistant.appactions:widgets:0.0.1" }
build.gradle
を変更するたびに同期しておくことで、アプリをビルドする際のエラーを回避できます。
ウィジェット サービスを追加する
サービスは、長時間実行オペレーションをバックグラウンドで実行できるアプリケーション コンポーネントです。アプリでは、ウィジェット リクエストを処理するサービスを提供する必要があります。
- サンプルアプリの
AndroidManifest.xml
リソースにサービスを追加し、次のように構成します。<!-- AndroidManifest.xml --> <service android:name=".widgets.StatsWidgetProvider" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.google.assistant.appactions.widgets.PIN_APP_WIDGET" /> </intent-filter> </service>
アシスタントは、ウィジェットのフルフィルメントをトリガーする音声クエリ中に、このサービスを使用してアプリにリクエストを送信します。サービスは、リクエストと一緒に受信した BII データを使用して、アシスタント内でレンダリングする RemoteView
ウィジェット オブジェクトを生成します。
ウィジェット クラスを更新する
これで、GET_EXERCISE_OBSERVATION
ケーパビリティのリクエストがウィジェット クラスにルーティングされるようにアプリを構成できました。次は StatsWidget.kt
クラスを更新し、BII パラメータの値を使用して、ユーザー リクエストに応じてカスタマイズされたウィジェット インスタンスが生成されるようにします。
StatsWidget.kt
クラスを開き、App Actions の Widget Extension ライブラリをインポートします。// StatsWidget.kt // ... Other import statements import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
- 以下のプライベート変数を追加します。これらの変数は、ウィジェットに入力すべき情報を確認するときに使用します。
// StatsWidget.kt private val hasBii: Boolean private val isFallbackIntent: Boolean private val aboutExerciseName: String private val exerciseType: FitActivity.Type
init
関数を追加して、アシスタントから渡されたウィジェット オプション データをクラスで使用できるようにします。// StatsWidget.kt init { val optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId) val bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII) hasBii = !bii.isNullOrBlank() val params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS) if (params != null) { isFallbackIntent = params.isEmpty if (isFallbackIntent) { aboutExerciseName = context.resources.getString(R.string.activity_unknown) } else { aboutExerciseName = params.get("aboutExerciseName") as String } } else { isFallbackIntent = false aboutExerciseName = context.resources.getString(R.string.activity_unknown) } exerciseType = FitActivity.Type.find(aboutExerciseName) }
これらの変更を加えることで、GET_EXERCISE_OBSERVATION
ケーパビリティによって生成された Android インテントに StatsWidget.kt
クラスが応答できるようになります。この仕組みについて順番に見ていきましょう。
optionsBundle
= Bundle- Bundle は、プロセス境界(インテントのあるアクティビティ間)で使用し、構成変更前後の一時的な状態を格納することを目的とするオブジェクトです。アシスタントは、
Bundle
オブジェクトを使用して構成データをウィジェットに渡します。
- Bundle は、プロセス境界(インテントのあるアクティビティ間)で使用し、構成変更前後の一時的な状態を格納することを目的とするオブジェクトです。アシスタントは、
bii
=actions.intent.GET_EXERCISE_OBSERVATION
- BII の名前は、
AppActionsWidgetExtension
を使用して Bundle から取得できます。
- BII の名前は、
hasBii
=true
- BII があるかどうかをチェックします。
params
=Bundle[{aboutExerciseName=running}]
- App Actions によって生成された特別な Bundle は、ウィジェット オプションの
Bundle
内にネストされています。Bundle には、BII の Key-Value ペアが格納されます。この例では、サンプルクエリ「OK Google, ExampleApp でランニングの統計情報を表示」から値running
が抽出されています。
- App Actions によって生成された特別な Bundle は、ウィジェット オプションの
isFallbackIntent
=false
- インテント
Extras
に必要な BII パラメータが存在するかどうかをチェックします。
- インテント
aboutExerciseName
=running
aboutExerciseName
のインテントExtras
の値を取得します。
exerciseType
=RUNNING
aboutExerciseName
を使用して、対応するデータベース タイプ オブジェクトを検索します。
これで、App Actions の Android インテント データの受信を StatsWidget
クラスで処理できるようになりました。ウィジェットの作成フローのロジックを更新して、ウィジェットが App Actions によってトリガーされたかどうかを確認します。
StatsWidget.kt
で、updateAppWidget()
関数を次のコードで置き換えます。// StatsWidget.kt fun updateAppWidget() { /** * Checks for App Actions BII invocation and if BII parameter data is present. * If parameter data is missing, use data from last exercise recorded to the * fitness tracking database. */ if (hasBii && !isFallbackIntent) { observeAndUpdateRequestedExercise() } else observeAndUpdateLastExercise() }
上のコードでは、新しい関数 observeAndUpdateRequestedExercise
を参照しています。この関数は、App Actions の Android インテントから渡された exerciseType
パラメータ データを使用してウィジェット データを生成します。
- 次のコードを使用して
observeAndUpdateRequestedExercise
関数を追加します。// StatsWidget.kt /** * Create and observe the last exerciseType activity LiveData. */ private fun observeAndUpdateRequestedExercise() { val activityData = repository.getLastActivities(1, exerciseType) activityData.observeOnce { activitiesStat -> if (activitiesStat.isNotEmpty()) { formatDataAndSetWidget(activitiesStat[0]) updateWidget() } else { setNoActivityDataWidget() updateWidget() } } }
上のコードでは、アプリ内で見つかった既存のリポジトリ クラスを使用して、アプリのローカル データベースからフィットネス データを取得しています。このクラスは、データベースへのアクセスを簡素化する API を提供します。リポジトリを使用するには、データベースに対してクエリを実行するときに、LiveData オブジェクトを公開する必要があります。コードでこの LiveData
を監視することで、最新のフィットネス アクティビティを取得できます。
TTS を有効にする
ウィジェットを表示する際にアシスタントが読み上げる TTS 文字列を提供できます。この TTS を含めて、ウィジェットについて音声で案内できるようにすることをおすすめします。この機能は、App Actions の Widgets Extension ライブラリによって提供されます。このライブラリを使用して、アシスタント内でウィジェットと一緒に使用する案内用のテキストと TTS を設定できます。
案内用の TTS は、formatDataAndSetWidget
関数を使用して設定することをおすすめします。この関数を使用すると、アプリ データベースから返されたアクティビティ データをフォーマットできます。
StatsWidget.kt
で、formatDataAndSetWidget
関数に次のコードを追加します。// StatsWidget.kt private fun formatDataAndSetWidget( activityStat: FitActivity, ) { // ... // Add conditional for hasBii for widget with data if (hasBii) { // Formats TTS speech and display text for Assistant val speechText = context.getString( R.string.widget_activity_speech, activityExerciseTypeFormatted, formattedDate, durationInMin, distanceInKm ) val displayText = context.getString( R.string.widget_activity_text, activityExerciseTypeFormatted, formattedDate ) setTts(speechText, displayText) } }
上のコードでは、2 つの文字列リソース(音声用とテキスト用)を参照しています。TTS の推奨事項については、ウィジェットに関する動画の Text-to-Speech style recommendation をご覧ください。このサンプルでは、ウィジェット インスタンスに TTS 情報を提供する新しい関数 setTts
も参照しています。
- 次のコードを使用して、
setTts
関数をStatsWidget.kt
に追加します。// StatsWidget.kt /** * Sets TTS to widget */ private fun setTts( speechText: String, displayText: String, ) { val appActionsWidgetExtension: AppActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager) .setResponseSpeech(speechText) // TTS to be played back to the user .setResponseText(displayText) // Response text to be displayed in Assistant .build() // Update widget with TTS appActionsWidgetExtension.updateWidget(appWidgetId) }
最後に、エクササイズの種類のリクエストに対し、エクササイズ データベースからリクエスト空のデータが返された場合の TTS 情報を設定します。
- 次のコードを使用して、
StatsWidget.kt
のsetNoActivityDataWidget()
関数を更新します。// StatsWidget.kt private fun setNoActivityDataWidget() { // ... // Add conditional for hasBii for widget without data if (hasBii) { // formats speech and display text for Assistant // https://developers.google.com/assistant/app/widgets#library val speechText = context.getString(R.string.widget_no_activity_speech, aboutExerciseName) val displayText = context.getString(R.string.widget_no_activity_text) setTts(speechText, displayText) } }
6. App Actions をテストする
開発中は、Google アシスタント プラグインを使用することで、アシスタントの App Actions をテストデバイスでプレビューできます。このツールで App Actions のインテント パラメータを調整し、ユーザーからアシスタントへのさまざまなリクエストをアクションがどう実行するかをテストできます。
プレビューを作成する
プラグインで App Actions をテストする手順は次のとおりです。
- [Tools] > [Google Assistant] > [App Actions Test Tool] に移動します。Android Studio へのログインを求められる場合があります。その場合は、前の手順で Google Play Console に使用したのと同じアカウントを使用してください。
- [Create Preview] をクリックしてプレビューを作成します。
想定されるエクササイズの種類をテストする
アプリで最後に完了したランニングの情報を表示するウィジェットを返すには、テストツールで次の手順を行います。
- ツールを開き、最初の手順で BII の選択と構成を求められたら
actions.intent.GET_EXERCISE_OBSERVATION
を選択します。 - [exerciseObservation] ボックスで、デフォルトのエクササイズ名を
climbing
からrun
に変更します。 - [Run App Action] をクリックします。
想定外のエクササイズの種類をテストする
テストツールで、想定されていないエクササイズの種類をテストする手順は次のとおりです。
- [exerciseObservation] ボックスで、
name
の値をRun
からClimbing
に変更します。 - [Run App Action] をクリックします。
アシスタントから、「No activity found」という情報を含むウィジェットが返されるはずです。
フォールバック インテントをテストする
フォールバック インテントをトリガーするクエリは、エクササイズの種類に関係なく、最後に記録されたアクティビティの情報を表示するウィジェットを返します。
フォールバック インテントをテストする手順は次のとおりです。
- [exerciseObservation] ボックスで、
aboutExercise
オブジェクトを削除します。 - [Run App Action] をクリックします。
アシスタントによって、最後に完了したエクササイズの情報を表示するウィジェットが返されるはずです。
7. 次のステップ
これで完了です。
アシスタントと Android ウィジェットを使用してユーザーのクエリに対応できるようになりました。
学習した内容
この Codelab では、以下について学びました。
- BII にアプリ ウィジェットを追加する。
- ウィジェットを変更し、Android の Extras からパラメータにアクセスできるようする。
次のステップ
ここで作成したフィットネス アプリをさらに改良できます。完成版のプロジェクトは、GitHub のメイン リポジトリで見ることができます。
App Actions を使用したアプリの拡張について詳しくは、以下を参照してください。
- アプリをアシスタントに拡張する方法について詳しくは、App Actions の組み込みインテントのリファレンスをご覧ください。
Actions on Google についてさらに詳しく知りたい場合は、以下のリソースをご覧ください。
- developers.google.com/assistant/app: Google アシスタント公式ドキュメント サイトの App Actions のページ。
- App Actions のサンプル インデックス: App Actions の機能を検討するためのサンプルアプリとサンプルコード。
- Actions on Google GitHub リポジトリ: サンプルコードとサンプル ライブラリ。
- r/GoogleAssistantDev: Google アシスタントに取り組むデベロッパーを対象とした Reddit 公式コミュニティ。
Twitter で @ActionsOnGoogle をフォローして最新情報をチェックしてください。また、作成したアクションについて、ハッシュタグ #appactions でツイートしてください。
フィードバック アンケート
最後に、こちらのアンケートにご回答いただき、この Codelab に関するフィードバックをお送りください。