將自動填入功能與鍵盤整合

從 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

  • 輸入法編輯器要有多少條建議
  • 每項建議的 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 需要自動填入建議,平台會呼叫自動填入服務的 onFillRequest() 方法,就像 Android 11 版之前一樣。但是,您的服務必須呼叫已傳遞的 FillRequest 物件的 getInlineSuggestionsRequest() 方法,才能取得 IME 建立的 InlineSuggestionsRequestInlineSuggestionsRequest 指定需要多少條內嵌建議,以及應如何呈現每條建議。如果 IME 不支援內嵌建議,這個方法會傳回 null

自動填入服務會建立 InlinePresentation 物件 (不超過 InlineSuggestionsRequest 中所要求的數量上限)。呈現方式必須遵守 InlineSuggestionsRequest 所指定的大小限制。如要將建議傳回 IME,請針對每條建議呼叫 Dataset.Builder.setValue()。Android 11 版提供新版本的 Dataset.Builder.setValue(),以支援內嵌建議。

注意:雖然 IME 應採用服務提供的建議,但無法保證一定會這麼做。