자동 완성과 인증 관리자 통합

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

자바

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

자바

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;
                       }
               )