Kimlik Bilgisi Yöneticisi'ni otomatik doldurma özelliğiyle entegre etme

Android 15 Beta 2'den itibaren, androidx.credentials:1.5.0-alpha01 ile birlikte geliştiriciler kullanıcı adı veya şifre alanları gibi belirli görünümleri Kimlik Bilgisi Yöneticisi istekleriyle bağlayabilir. Kullanıcı bu görünümlerden birine odaklandığında ilgili istek Kimlik Bilgisi Yöneticisi'ne gönderilir. Oluşturulan kimlik bilgileri sağlayıcılar arasında toplanır ve klavye satır içi önerileri veya açılır menü önerileri gibi otomatik doldurma kullanıcı arayüzlerinde gösterilir. Bu özellik, kullanıcılar kimlik bilgisi yöneticisi hesap seçicisini yanlışlıkla kapatıp ilgili alanlara dokunduğunda yedek olarak kullanılabilir.

Geliştiricilerin bu özellik için tercih ettiği uç nokta, Jetpack androidx.credentials kitaplığıdır.

Otomatik doldurma sonuçlarındaki kimlik bilgilerini gösteren görsel
Şekil 1: Şifre, geçiş anahtarı ve Google ile oturum açma bilgilerini kullanarak sonuçları otomatik doldurma.

Uygulama

Kimlik Bilgisi Yöneticisi'ni, otomatik doldurma sonuçlarında kimlik bilgilerini göstermek için kullanmak istiyorsanız standart uygulamayı kullanarak bir GetCredentialRequest oluşturun ve ardından ilgili görünümlere ayarlayın. Yanıtın getCredential API çağrısından mı yoksa PendingGetCredentialRequest'ten mi geldiğine bakılmaksızın yanıt işleme aynıdır (aşağıdaki örnekte gösterildiği gibi).

Öncelikle bir GetCredentialRequest oluşturun:

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

Ardından getCredential API'yi çağırın. Kimlik Bilgisi Yöneticisi seçicisi görüntülenir.

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

Son olarak, otomatik doldurma deneyimini etkinleştirin. Kullanıcı bu görünümlerle etkileşime geçtiğinde kimlik bilgisi sonuçlarını otomatik doldurma özelliğini etkinleştirmek için getCredRequest'ü alakalı görünümlere (ör. username, password) ayarlayın.

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