App Actions を使用すると、ユーザーは Google アシスタントに話しかけて、特定のタスクに直接移動できます ユーザーが「OK Google, 配車を依頼して」 サンプルアプリ」フォアグラウンド アプリ呼び出しを使用すると、ユーザーがすでにアプリを開いている場合のエクスペリエンスをさらに向上させることができます。
フォアグラウンド アプリ呼び出しを使用すると、組み込みインテント(BII)を 特定のアクティビティが 使用します。
たとえば、ユーザーがライドシェア アプリをフォアグラウンドで実行し、Google アシスタントに「マウンテン ビューへの乗車を予約して」と話しかけるか入力したとします。アプリは、この入力を使用して、目的地フィールドをマウンテン ビューに設定します。こうしてユーザーがこう言ったり、 「SFO から配車を注文して」と検索し アプリの状態を維持したままで、
制限事項
フォアグラウンド アプリ呼び出しは、次の BII でのみ使用できます。
actions.intent.CREATE_MONEY_TRANSFER
actions.intent.CREATE_TAXI_RESERVATION
actions.intent.OPEN_APP_FEATURE
actions.intent.ORDER_MENU_ITEM
actions.intent.PAUSE_EXERCISE
actions.intent.RECORD_EXERCISE
actions.intent.RECORD_FOOD_OBSERVATION
actions.intent.RESUME_EXERCISE
actions.intent.START_EXERCISE
actions.intent.STOP_EXERCISE
ロケールのサポートと、特定の BII のフォアグラウンド アプリ呼び出しに関連するサンプルクエリについては、組み込みインテント リファレンスをご覧ください。
フォアグラウンド アプリ呼び出しをサポートする
フォアグラウンド アプリ呼び出しに対するサポートを追加するには、目的のフォアグラウンド アクティビティに基づいて、フルフィルメントの動作を追加します。目的のアクティビティがフォアグラウンドで実行されているときに App Action が呼び出されると、アシスタントはそのアクティビティにフラグを追加してディープリンク インテントを渡し、アプリがその状態を更新できるようにします。
BII のフォアグラウンド アプリ呼び出しを実装する手順は次のとおりです。
shortcuts.xml
ファイルで、<intent>
タグを BII に追加します。 フォアグラウンド アプリの呼び出しをサポートする<capability>
。<intent>
タグ内に<extra>
タグを追加します。<extra>
タグで、android:key
を"requiredForegroundActivity"
に設定し、android:value
を、フォアグラウンドで実行する必要があるアクティビティに設定します。クラスなしでアクティビティを指定する (アプリのパッケージ名に続けてスラッシュ(/)を付けたもの) その後にアクティビティ名APP_PACKAGE_NAME/ACTIVITY_NAME
を続けます。"requiredForegroundActivity"
に指定したフォアグラウンド アクティビティで、SINGLE_TOP
フラグが設定されたディープリンク インテントを処理するonNewIntent()
メソッドを実装します。指定したアクティビティがフォアグラウンドで実行されているとき、アシスタントは、このフラグを含むディープリンク インテントをフルフィルメントとして渡します。onNewIntent()
の呼び出しをフォアグラウンド アクティビティに対する更新として扱い、ディープリンクから抽出されたパラメータを使用して、そのアクティビティ内で状態を管理します。
アプリでルーター アクティビティを使用して、すべての外部ディープリンクが ルーター アクティビティの詳細については、以下をご覧ください。 ルーターのアクティビティを処理する
例
サンプル shortcuts.xml
ファイルからの以下のスニペットは、
requiredForegroundActivity
属性:
<capability name="actions.intent.CREATE_TAXI_RESERVATION"> <!-- Trigger with foreground app invocation if MainActivity is in the foreground. --> <intent android:targetClass="com.example.app.MainActivity" android:targetPackage="com.example.app"> <parameter android:name="taxiReservation.dropoffLocation.name" android:key="dropoff" /> <extra android:key="requiredForegroundActivity" android:value="com.example.app/com.example.app.MainActivity" /> </intent> <!-- This won't trigger if MainActivity is in the foreground. --> <intent android:targetClass="com.example.app.MainActivity" android:targetPackage="com.example.app"> <parameter android:name="taxiReservation.dropoffLocation.name" android:key="dropoff" /> </intent> </capability>
ユーザー権限
![フォアグラウンド アプリ呼び出しが機能するには、ユーザーがデバイス設定で [画面のテキストを使用] を有効にする必要があります。](https://developer.android.com/static/guide/app-actions/images/device-setting-assist-screen.png?authuser=9&hl=ja)
フォアグラウンド アプリの呼び出しをユーザーが機能させるには、ユーザーが以下を行う必要があります。 [画面のテキストを使用] デバイス設定が有効になっている。この設定の場所と正確な名前は、OEM とデバイス メーカーによって異なります。たとえば、ユーザーのデバイスでは、このデバイス設定が [画面のコンテキストを使用] と呼ばれている場合があります。
Google Pixel でこの Android 設定にアクセスするには、まず [設定] >アプリと 通知 >デフォルトのアプリ >Assist アプリ。次に、[アシストと音声] で 入力画面で [画面のテキストを使用] を有効にします。
呼び出しをテストする
フォアグラウンド アプリの呼び出しを試すには、以下の手順を行います。
- ユーザー権限セクションの手順に沿って、デバイス設定で [画面のテキストを使用] を有効にします。
- アプリを開き、必要なフォアグラウンド アクティビティとしてリストしたアクティビティにアクセスします。
- & を押すホームボタンを長押しして、現在の画面上にオーバーレイとしてアシスタントを開く 。実装した BII に対応するクエリを指定してください アプリ名を記載する必要はありません問題がなければ、アプリは状態を維持したままで、アクティビティを再起動することなく、クエリに基づいて自動的に更新されます。
ルーター アクティビティを処理する
一部のアプリは、単一のゲートキーピング ルーター アクティビティを使用して、すべての外部ディープリンクを処理します。ルーター アクティビティは、適切なビジネス ロジック アクティビティを(なんらかのチェックと検証を行った後で)開始し、ビジネス ロジック アクティビティをフォアグラウンドに戻します。
ディープリンクをトリガーすると、ルーターのアクティビティが タスクスタック、フォアグラウンド アクティビティの上にあります。ルーター アクティビティを使用するアプリでは、ルーター アクティビティが、Google アシスタントから送信されたインテントを、現在のフォアグラウンド アクティビティ インスタンスに配信する必要があります。この要件を満たす方法は、ルーター アクティビティが開始される場所によって異なります。
ルーターがビジネス ロジック アクティビティと同じタスクスタックで開始される場合は、SINGLE_TOP
、CLEAR_TOP
、NEW_TASK
のビット演算 OR を使用してインテントを転送します。
Kotlin
Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
Java
Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
ルーターがビジネス ロジックとは別のタスクスタックで開始される場合
アクティビティの場合は、SINGLE_TOP
フラグを使用してインテントをビジネスに転送します。
ロジック アクティビティを使用します。