Tích hợp Trình quản lý thông tin xác thực với tính năng tự động điền

Kể từ Android 15 Beta 2, khi kết hợp với androidx.credentials:1.5.0-alpha01, nhà phát triển có thể liên kết các thành phần hiển thị cụ thể như trường tên người dùng hoặc mật khẩu với các yêu cầu của Trình quản lý thông tin xác thực. Khi người dùng tập trung vào một trong các chế độ xem này, yêu cầu tương ứng sẽ được gửi đến Trình quản lý thông tin xác thực. Thông tin xác thực thu được được tổng hợp trên các nhà cung cấp và hiển thị trong giao diện người dùng tự động điền, chẳng hạn như đề xuất cùng dòng trên bàn phím hoặc đề xuất trong trình đơn thả xuống. Bạn có thể sử dụng tính năng này làm phương án dự phòng khi người dùng vô tình đóng bộ chọn tài khoản Trình quản lý thông tin xác thực, sau đó nhấn vào các trường có liên quan.

Thư viện androidx.credentials của Jetpack là điểm cuối ưu tiên mà nhà phát triển nên sử dụng cho tính năng này.

Hình minh hoạ thông tin xác thực trong kết quả tự động điền
Hình 1: Kết quả tự động điền thông tin xác thực bằng mật khẩu, khoá truy cập và tính năng Đăng nhập bằng Google.

Triển khai

Để sử dụng Trình quản lý thông tin xác thực nhằm hiển thị thông tin xác thực trong kết quả tự động điền, hãy sử dụng phương thức triển khai tiêu chuẩn để tạo GetCredentialRequest, sau đó đặt GetCredentialRequest đó thành các thành phần hiển thị có liên quan. Cách xử lý phản hồi cũng giống nhau, cho dù phản hồi đến từ lệnh gọi API getCredential hay PendingGetCredentialRequest, như minh hoạ trong ví dụ sau.

Trước tiên, hãy tạo một 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)
);

Tiếp theo, hãy gọi API getCredential. Thao tác này sẽ hiển thị bộ chọn Trình quản lý thông tin xác thực.

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

Cuối cùng, hãy bật trải nghiệm tự động điền. Đặt getCredRequest thành các thành phần hiển thị liên quan (chẳng hạn như username, password) để bật kết quả thông tin xác thực trong tính năng tự động điền khi người dùng tương tác với các thành phần hiển thị này.

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