Android 15'te Kimlik Bilgisi Yöneticisi, kimlik bilgisi oluşturma ve alma için tek dokunuşlu bir akış destekler. Bu akışta, oluşturulmakta veya kullanılmakta olan kimlik bilgisinin bilgileri, daha fazla seçeneğe erişim noktasıyla birlikte doğrudan Biyometrik İstem'de gösterilir. Bu basitleştirilmiş süreç, kimlik bilgisi oluşturma ve alma sürecini daha verimli ve basit hale getirir.
Şartlar:
- Kullanıcının cihazında biyometri ayarlanmış ve kullanıcı, uygulamalarda kimlik doğrulama için biyometriye izin vermiş olmalıdır.
- Oturum açma akışlarında bu özellik, ilgili hesap için birden fazla kimlik bilgisi (ör. geçiş anahtarı ve şifre) olsa bile yalnızca tek hesap senaryolarında etkindir.
Geçiş anahtarı oluşturma akışlarında tek dokunuşla etkinleştirmeyi etkinleştirme
Bu yöntemin oluşturma adımları, mevcut kimlik bilgisi oluşturma süreciyle eşleşir. Geçiş anahtarı isteğiyse BeginCreatePublicKeyCredentialRequest
içinde handleCreatePasskeyQuery()
'u kullanarak isteği işleyin.
is BeginCreatePublicKeyCredentialRequest -> {
Log.i(TAG, "Request is passkey type")
return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}
handleCreatePasskeyQuery()
sayfanızda, CreateEntry
sınıfına BiometricPromptData
ekleyin:
val createEntry = CreateEntry(
// Additional properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
Kimlik bilgisi sağlayıcılar, BiometricPromptData
örneğinde allowedAuthenticator
özelliğini açıkça ayarlamalıdır. Bu özellik ayarlanmazsa değer varsayılan olarak DEVICE_WEAK
olur. Kullanım alanınız için gerekirse isteğe bağlı cryptoObject
mülkünü ayarlayın.
Tek dokunuşla oturum açma geçiş anahtarı akışlarını etkinleştir
Geçiş anahtarı oluşturma akışına benzer şekilde, bu işlem kullanıcı oturum açma işlemini yönetme için mevcut kurulumu izler. Kimlik doğrulama isteğiyle ilgili bilgileri toplamak için BeginGetPublicKeyCredentialOption
altında populatePasskeyData()
'u kullanın:
is BeginGetPublicKeyCredentialOption -> {
// ... other logic
populatePasskeyData(
origin,
option,
responseBuilder,
autoSelectEnabled,
allowedAuthenticator
)
// ... other logic as needed
}
CreateEntry
'e benzer şekilde, BiometricPromptData
örneği PublicKeyCredentialEntry
örneğine ayarlanır. Açıkça belirtilmediği takdirde allowedAuthenticator
, varsayılan olarak BIOMETRIC_WEAK
değerine ayarlanır.
PublicKeyCredentialEntry(
// other properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
Kimlik bilgisi girişi seçimini işleme
Geçiş anahtarı oluşturma veya oturum açma sırasında geçiş anahtarı seçimi için kimlik bilgisi girişi seçimini işlerken uygun şekilde PendingIntentHandler's
retrieveProviderCreateCredentialRequest
veya retrieveProviderGetCredentialRequest
işlevini çağırın. Bunlar, sağlayıcı için gereken meta verileri içeren nesneler döndürür. Örneğin, geçiş anahtarı oluşturma giriş seçimini yaparken kodunuzu aşağıda gösterildiği gibi güncelleyin:
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...
}
Bu örnekte, biyometri akışının başarısıyla ilgili bilgiler yer almaktadır. Kimlik bilgileri ile ilgili diğer bilgileri de içerir. Akış başarısız olursa karar vermek için biometricPromptResult.authenticationError
altındaki hata kodunu kullanın.
biometricPromptResult.authenticationError.errorCode
kapsamında döndürülen hata kodları, androidx.biometric kitaplığında tanımlanan hata kodlarıyla aynıdır (ör. androidx.biometric.BiometricPrompt.NO_SPACE, androidx.biometric.BiometricPrompt.UNABLE_TO_PROCESS, androidx.biometric.BiometricPrompt.ERROR_TIMEOUT ve benzeri). authenticationError
, kullanıcı arayüzünde görüntülenebilecek errorCode
ile ilişkili bir hata mesajı da içerir.
Benzer şekilde, retrieveProviderGetCredentialRequest
sırasında meta verileri ayıklayın.
Biyometrik akışınızın null
olup olmadığını kontrol edin. Yanıtınız evet ise kimlik doğrulaması için kendi biyometrinizi yapılandırın. Bu, get işleminin araçlandırılmasına benzer:
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...