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

Android 15 ベータ版 2 以降では、androidx.credentials:1.5.0-alpha01 と組み合わせて、ユーザー名やパスワード フィールドなどの特定のビューを認証情報マネージャーのリクエストにリンクできます。ユーザーがこれらのビューのいずれかにフォーカスすると、対応するリクエストが認証情報マネージャーに送信されます。結果の認証情報はプロバイダ間で集約され、キーボードのインライン候補やプルダウン候補などの自動入力 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)
}