در Android 15، Credential Manager از یک جریان ضربه برای ایجاد و بازیابی اعتبار پشتیبانی می کند. در این جریان، اطلاعات اعتبار در حال ایجاد یا استفاده مستقیماً در اعلان بیومتریک به همراه یک نقطه ورود به گزینه های بیشتر نمایش داده می شود. این فرآیند ساده، فرآیند ایجاد و بازیابی اعتبار کارآمدتر و کارآمدتر را ایجاد می کند.
الزامات:
- بیومتریک بر روی دستگاه کاربر تنظیم شده است و کاربر به آنها اجازه می دهد تا در برنامه ها احراز هویت شوند.
- برای جریانهای ورود به سیستم، این ویژگی فقط برای سناریوهای تک حساب فعال است، حتی اگر چندین اعتبار (مانند رمز عبور و رمز عبور) برای آن حساب موجود باشد.
فعال کردن یک ضربه روی جریان ایجاد رمز عبور
مراحل ایجاد این روش با فرآیند ایجاد اعتبار موجود مطابقت دارد. در BeginCreatePublicKeyCredentialRequest
خود، از handleCreatePasskeyQuery()
برای پردازش درخواست در صورتی که برای یک رمز عبور است استفاده کنید.
is BeginCreatePublicKeyCredentialRequest -> {
Log.i(TAG, "Request is passkey type")
return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}
در handleCreatePasskeyQuery()
خود، BiometricPromptData
با کلاس CreateEntry
قرار دهید:
val createEntry = CreateEntry(
// Additional properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
ارائه دهندگان اعتبار باید به صراحت خاصیت allowedAuthenticator
را در نمونه BiometricPromptData
تنظیم کنند. اگر این ویژگی تنظیم نشده باشد، مقدار پیشفرض DEVICE_WEAK
است. در صورت نیاز، ویژگی اختیاری cryptoObject
را برای مورد استفاده خود تنظیم کنید.
یک ضربه زدن روی جریان های رمز ورود به سیستم فعال کنید
مشابه جریان ایجاد کلید عبور، این کار از تنظیمات موجود برای مدیریت ورود کاربر پیروی می کند. در زیر BeginGetPublicKeyCredentialOption
، از populatePasskeyData()
برای جمع آوری اطلاعات مربوطه در مورد درخواست احراز هویت استفاده کنید:
is BeginGetPublicKeyCredentialOption -> {
// ... other logic
populatePasskeyData(
origin,
option,
responseBuilder,
autoSelectEnabled,
allowedAuthenticator
)
// ... other logic as needed
}
مشابه CreateEntry
، یک نمونه BiometricPromptData
روی نمونه PublicKeyCredentialEntry
تنظیم می شود. اگر به صراحت تنظیم نشده باشد، allowedAuthenticator
پیشفرض BIOMETRIC_WEAK
است.
PublicKeyCredentialEntry(
// other properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
انتخاب ورودی اعتبار را مدیریت کنید
در حین رسیدگی به انتخاب ورودی اعتبار برای ایجاد رمز عبور یا انتخاب کلید عبور در حین ورود به سیستم ، در صورت لزوم با PendingIntentHandler's retrieveProviderCreateCredentialRequest
یا retrieveProviderGetCredentialRequest
تماس بگیرید. این اشیاء که حاوی ابرداده های مورد نیاز برای ارائه دهنده هستند را برمی گرداند. به عنوان مثال، هنگام مدیریت انتخاب ورودی ایجاد رمز عبور، کد خود را مطابق شکل به روز کنید:
val createRequest = PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
if (createRequest == null) {
Log.i(TAG, "request is null")
setUpFailureResponseAndFinish("Unable to extract request from intent")
return
}
// Other logic...
val biometricPromptResult = createRequest.biometricPromptResult
// Add your logic based on what needs to be done
// after getting biometrics
if (createRequest.callingRequest is CreatePublicKeyCredentialRequest) {
val publicKeyRequest: CreatePublicKeyCredentialRequest =
createRequest.callingRequest as CreatePublicKeyCredentialRequest
if (biometricPromptResult == null) {
// Do your own authentication flow, if needed
}
else if (biometricPromptResult.isSuccessful) {
createPasskey(
publicKeyRequest.requestJson,
createRequest.callingAppInfo,
publicKeyRequest.clientDataHash,
accountId
)
} else {
val error = biometricPromptResult.authenitcationError
// Process the error
}
// Other logic...
}
این مثال حاوی اطلاعاتی در مورد موفقیت جریان بیومتریک است. همچنین حاوی اطلاعات دیگری در مورد اعتبارنامه است. اگر جریان ناموفق بود، از کد خطا در زیر biometricPromptResult.authenticationError
برای تصمیم گیری استفاده کنید. کدهای خطای بازگردانده شده به عنوان بخشی از biometricPromptResult.authenticationError.errorCode
، همان کدهای خطای تعریف شده در کتابخانه androidx.biometric هستند، مانند androidx.biometric.BiometricPrompt.NO_SPACE ، androidx.biometric.BiometricPrompt.UNABLE_TO تی ، و مشابه. authenticationError
همچنین حاوی یک پیغام خطایی مرتبط با errorCode
است که می تواند در یک UI نمایش داده شود.
به طور مشابه، فراداده را در طول retrieveProviderGetCredentialRequest
استخراج کنید. بررسی کنید که آیا جریان بیومتریک شما null
است یا خیر. اگر بله، بیومتریک خود را برای احراز هویت پیکربندی کنید. این شبیه نحوه ابزارگیری عملیات get است:
val getRequest =
PendingIntentHandler.retrieveProviderGetCredentialRequest(intent)
if (getRequest == null) {
Log.i(TAG, "request is null")
setUpFailureResponseAndFinish("Unable to extract request from intent")
return
}
// Other logic...
val biometricPromptResult = getRequest.biometricPromptResult
// Add your logic based on what needs to be done
// after getting biometrics
if (biometricPromptResult == null)
{
// Do your own authentication flow, if necessary
} else if (biometricPromptResult.isSuccessful) {
Log.i(TAG, "The response from the biometricPromptResult was ${biometricPromptResult.authenticationResult.authenticationType}")
validatePasskey(
publicKeyRequest.requestJson,
origin,
packageName,
uid,
passkey.username,
credId,
privateKey
)
} else {
val error = biometricPromptResult.authenitcationError
// Process the error
}
// Other logic...