با شروع از اندروید ۱۵ بتا ۲، که با androidx.credentials:1.5.0-alpha01 جفت شده است، توسعهدهندگان میتوانند نماهای خاصی مانند فیلدهای نام کاربری یا رمز عبور را با درخواستهای Credential Manager پیوند دهند. هنگامی که کاربر روی یکی از این نماها تمرکز میکند، درخواست مربوطه به Credential Manager ارسال میشود. اعتبارنامههای حاصل در بین ارائهدهندگان تجمیع شده و در رابطهای کاربری تکمیل خودکار، مانند پیشنهادات درون خطی صفحه کلید یا پیشنهادات کشویی نمایش داده میشوند. این ویژگی میتواند به عنوان یک جایگزین استفاده شود، زمانی که کاربران به طور تصادفی انتخابگر حساب Credential Manager را رد میکنند و سپس روی فیلدهای مربوطه ضربه میزنند.
کتابخانه Jetpack androidx.credentials نقطه پایانی ترجیحی برای توسعهدهندگان جهت استفاده از این ویژگی است.
شکل ۱: نتایج تکمیل خودکار با اطلاعات کاربری با استفاده از رمز عبور، کلید عبور و ورود با گوگل
پیادهسازی
برای استفاده از 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)
)
سپس، API getCredential را فراخوانی کنید. این کار انتخابگر Credential Manager را نمایش میدهد.
coroutineScope {
try {
val result = credentialManager.getCredential(
context = activityContext, // Use an activity-based context.
request = getCredRequest
)
handleSignIn(result)
} catch (e: GetCredentialException) {
handleFailure(e)
}
}
در نهایت، قابلیت تکمیل خودکار را فعال کنید. getCredRequest را روی نماهای مرتبط (مانند username, password ) تنظیم کنید تا نتایج اعتبارنامه در تکمیل خودکار هنگام تعامل کاربر با این نماها فعال شود.
usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
getCredRequest
) { response ->
handleSignIn(response)
}
passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
getCredRequest
) { response ->
handleSignIn(response)
}