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

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

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

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

実装

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

まず、GetCredentialRequest を作成します。

Kotlin

// 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)
)

Java

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

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

GetCredentialRequest getCredRequest = new GetCredentialRequest(
    Arrays.asList(getPasswordOption, getPublicKeyCredentialOption)
);

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

Kotlin

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

Java

coroutineScope.launch(new CoroutineScopeRunnable() {
    @Override
    public void run(@NonNull CoroutineScope scope) {
        try {
            GetCredentialResponse result = credentialManager.getCredential(
                activityContext, // Use an activity-based context.
                getCredRequest
            );
            handleSignIn(result);
        } catch (GetCredentialException e) {
            handleFailure(e);
        }
    }
});

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

Kotlin

import androidx.credentials.PendingGetCredentialRequest

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

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

Java

import androidx.credentials.CredentialManagerViewHandler;
import androidx.credentials.PendingGetCredentialRequest;

CredentialManagerViewHandler.setPendingGetCredentialRequest(
               usernameEditText, new PendingGetCredentialRequest(
                       getCredRequest, result -> {
                           handleSignIn(result);
                           return null;
                       }
               )

CredentialManagerViewHandler.setPendingGetCredentialRequest(
               passwordEditText, new PendingGetCredentialRequest(
                       getCredRequest, result -> {
                           handleSignIn(result);
                           return null;
                       }
               )