مدیریت اعتبار را با تکمیل خودکار ادغام کنید

با شروع Android 15 Beta 2، جفت‌شده با androidx.credentials:1.5.0-alpha01 ، توسعه‌دهندگان می‌توانند نماهای خاصی مانند فیلدهای نام کاربری یا رمز عبور را با درخواست‌های Credential Manager پیوند دهند. هنگامی که کاربر روی یکی از این نماها تمرکز می کند، درخواست مربوطه به Credential Manager ارسال می شود. اعتبارنامه‌های به‌دست‌آمده در بین ارائه‌دهندگان جمع‌آوری می‌شوند و در رابط‌های کاربری تکمیل خودکار، مانند پیشنهادات درون خطی صفحه‌کلید، یا پیشنهادات کشویی نمایش داده می‌شوند. هنگامی که کاربران به طور تصادفی انتخابگر حساب Credential Manager را رد کرده و سپس روی فیلدهای مربوطه ضربه می زنند، می توان از این ویژگی به عنوان یک بازگشت استفاده کرد.

کتابخانه Jetpack androidx.credentials نقطه پایانی ترجیحی برای توسعه دهندگان برای استفاده از این ویژگی است.

تصویری که اعتبارنامه ها را در نتایج تکمیل خودکار نشان می دهد
شکل 1: تکمیل خودکار نتایج با اطلاعات کاربری با استفاده از رمز عبور، کلید عبور و ورود به سیستم با Google.

پیاده سازی

برای استفاده از Credential Manager برای نشان دادن اعتبارنامه ها در نتایج تکمیل خودکار، از پیاده سازی استاندارد برای ساخت 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)
)

جاوا


// 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 را فراخوانی کنید. این گزینه انتخاب کننده Credential Manager را نمایش می دهد.

کاتلین


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 ) تنظیم کنید تا وقتی کاربر با این نماها تعامل دارد، نتایج اعتبارنامه را در تکمیل خودکار فعال کنید.

کاتلین


import androidx.credentials.PendingGetCredentialRequest

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

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

جاوا


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