自動入力を IME および自動入力サービスと統合する

Android 11 以降では、キーボードやその他のインプット メソッド エディタ(IME)で、自動入力候補をインライン、候補領域、または同様の場所に表示できます。システムがメニューに候補を表示するわけではありません。これらの自動入力候補には、パスワードやクレジット カード情報などの個人データが含まれる可能性があるため、ユーザーが選択するまで IME には表示されません。この機能を利用するには、IME と自動入力サービス(パスワード マネージャーなど)を更新します。IME または自動入力サービスがインライン自動入力をサポートしていない場合、Android 11 より前のバージョンと同様に、候補はメニューに表示されます。

ワークフロー

このフローでは、IME は現在のキーボードまたはその他の入力エディタを意味し、候補プロバイダは自動入力候補の適切なプロバイダを意味します。入力フィールドとユーザーの設定に応じて、候補プロバイダはプラットフォームまたは自動入力サービスになります。

  1. ユーザーが、自動入力をトリガーする入力フィールド(パスワードやクレジット カードの入力フィールドなど)にフォーカスします。

  2. プラットフォームは、現在の IME と適切な候補プロバイダにクエリを実行して、インライン自動入力をサポートしているかどうかを確認します。IME または候補プロバイダがインライン自動入力をサポートしていない場合、Android 10 以前と同様に、候補はメニューに表示されます。

  3. プラットフォームが IME に対し、「候補リクエスト」を提供するよう求めます。この候補リクエストでは、表示する候補の最大数を指定し、各候補のプレゼンテーション仕様も指定します。プレゼンテーション仕様では、最大サイズ、テキストサイズ、色、フォントデータなどを指定して、候補プロバイダが IME のデザインに合わせられるようにします。

  4. プラットフォームが候補プロバイダに対し、リクエストされた候補数まで候補を提供するよう求めます。各候補には、候補の UI を含む View をインフレートするためのコールバックが含まれます。

  5. プラットフォームは、候補の準備ができたことを IME に通知します。IME は、コールバック メソッドを呼び出して各候補の View をインフレートすることで候補を表示します。ユーザーの個人情報を保護するため、この段階では IME に候補は表示されません。

  6. ユーザーが候補のいずれかを選択すると、ユーザーがシステム メニューから候補を選択した場合と同じ方法で IME に通知されます。

以降のセクションでは、インライン自動入力に対応するように IME または自動入力サービスを構成する方法について説明します。

インライン自動入力をサポートするように IME を構成する

このセクションでは、インライン自動入力をサポートするように IME を構成する方法について説明します。IME がインライン自動入力をサポートしていない場合、プラットフォームはデフォルトでメニューに自動入力候補を表示します。

IME は、supportsInlinedSuggestions 属性を true に設定する必要があります。

<input-method
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

プラットフォームは、自動入力候補が必要になると、IME の InputMethodService.onCreateInlineSuggestionsRequest() メソッドを呼び出します。このメソッドを実装する必要があります。以下を指定する InlineSuggestionsRequest を返します。

  • IME が必要とする候補の数。
  • **各候補の InlinePresentationSpec。候補の表示方法を定義します。

プラットフォームに候補がある場合、プラットフォームは IME の onInlineSuggestionsResponse() メソッドを呼び出し、候補を含む InlineSuggestionsResponse を渡します。このメソッドを実装する必要があります。実装で InlineSuggestionsResponse.getInlineSuggestions() を呼び出して候補のリストを取得し、InlineSuggestion.inflate() メソッドを呼び出して各候補をインフレートします。

インライン自動入力をサポートするように自動入力サービスを構成する

このセクションでは、インライン自動入力をサポートするように自動入力サービスを構成する方法について説明します。アプリがインライン自動入力に対応していない場合、プラットフォームはデフォルトで自動入力候補をメニューに表示します。

自動入力サービスでは、supportsInlinedSuggestions 属性を true に設定する必要があります。

<autofill-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

IME が自動入力候補を必要とする場合、プラットフォームは、Android 11 より前のバージョンと同様に、自動入力サービスの onFillRequest() メソッドを呼び出します。ただし、サービスは、渡された FillRequest オブジェクトの getInlineSuggestionsRequest() メソッドを呼び出す必要があります。これにより、IME によって作成された InlineSuggestionsRequest が取得されます。InlineSuggestionsRequest は、必要なインライン候補の数と、それぞれの表示方法を指定します。IME がインライン予測をサポートしていない場合、このメソッドは null を返します。

自動入力サービスは、InlineSuggestionsRequest でリクエストされた最大数まで InlinePresentation オブジェクトを作成します。プレゼンテーションは、InlineSuggestionsRequest で指定されたサイズ制約に従う必要があります。IME に候補を返すには、候補ごとに Dataset.Builder.setValue() を 1 回呼び出します。Android 11 では、インライン予測をサポートする Dataset.Builder.setValue() のバージョンが提供されています。