自動入力をキーボードと統合する

Android 11 以降、キーボードやその他のインプット メソッド エディタ(IME)は、自動入力候補をシステムがプルダウン メニューに表示するのではなく、候補領域またはそれに類似するものにインライン表示できます。こうした自動入力候補にはパスワードやクレジット カード情報などのプライベート データが含まれることがあるため、ユーザーが選択するまで、候補は IME に表示されません。この機能を使用するには、IME とパスワード マネージャーの両方を更新する必要があります。IME またはパスワード マネージャーがインライン自動入力をサポートしていない場合、Android 11 より前と同様に、候補はプルダウン メニューに表示されます。

ワークフロー

インライン自動入力の仕組みを理解するには、順を追ってプロセスを確認することをおすすめします。このフローで、「IME」は現在のキーボードまたは他の入力エディタを意味し、「候補プロバイダ」はその自動入力候補の該当するプロバイダを意味します。入力フィールドとユーザーの設定に応じて、候補プロバイダはプラットフォームか自動入力サービスになります。

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

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

  3. プラットフォームが IME に対し、「候補リクエスト」を提供するよう求めます。この候補リクエストは、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 に返すには、候補ごとに 1 回 Dataset.Builder.setValue() を呼び出します。Android 11 では、インライン候補をサポートする新しいバージョンの Dataset.Builder.setValue() が提供されています。

注: IME はサービスが提供する候補を使用することになっていますが、必ずしも使用するとは限りません。