認証情報マネージャーを自動入力と統合する

Android 15 ベータ版 2 以降では、androidx.credentials:1.5.0-alpha01 と組み合わせることで、デベロッパーはユーザー名やパスワード フィールドなどの特定のビューを Credential Manager リクエストにリンクできます。ユーザーがこれらのビューのいずれかにフォーカスすると、対応するリクエストが認証情報マネージャーに送信されます。結果の認証情報はプロバイダ間で集約され、キーボードのインライン候補やプルダウン候補などの自動入力 UI に表示されます。この機能は、ユーザーが誤って認証情報マネージャーのアカウント選択ツールを閉じ、関連するフィールドをタップした場合のフォールバックとして使用できます。

この機能でデベロッパーが使用するエンドポイントとしては、Jetpack androidx.credentials ライブラリが推奨されます。

自動入力の結果に認証情報が表示されているイラスト
図 1: パスワード、パスキー、Google でログインを使用して認証情報で自動入力した結果。

実装

認証情報マネージャーを使用して自動入力の結果に認証情報を表示するには、標準実装を使用して GetCredentialRequest を作成し、関連するビューに設定します。次の例に示すように、レスポンスが getCredential API 呼び出しから返されたか、PendingGetCredentialRequest から返されたかに関係なく、レスポンス処理は同じです。

まず、GetCredentialRequest を構築します。

// Retrieves the user's saved password for your app.
val getPasswordOption = GetPasswordOption()

// Get a passkey from the user's public key credential provider.
val getPublicKeyCredentialOption = GetPublicKeyCredentialOption(
  requestJson = requestJson
)

val getCredRequest = GetCredentialRequest(
  listOf(getPasswordOption, getPublicKeyCredentialOption)
)

次に、getCredential API を呼び出します。認証情報マネージャーのセレクタが表示されます。

coroutineScope {
  try {
    val result = credentialManager.getCredential(
      context = activityContext, // Use an activity-based context.
      request = getCredRequest
    )
    handleSignIn(result);
  } catch (e: GetCredentialException) {
    handleFailure(e);
  }
}

最後に、自動入力機能を有効にします。ユーザーがこれらのビューを操作したときに自動入力で認証情報の結果を表示できるようにするには、getCredRequest を関連するビュー(username, password など)に設定します。

usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
  getCredRequest) { response -> handleSignIn(response)
}

passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
  getCredRequest) { response -> handleSignIn(response)
}