Tek dokunuşla geçiş anahtarı oluşturma ve oturum açmayı biyometrik istemlerle entegre edin

Android 15'te Kimlik Bilgisi Yöneticisi, kimlik bilgileri için tek dokunuşla akışı destekler. Ürün Sahibi sorumludur. 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ç, verimli ve kolaylaştırılmış kimlik bilgisi oluşturma ve alma sürecidir.

Koşullar:

  • Kullanıcının cihazında biyometri ayarlandı ve kullanıcı şu işlemi yapmasına izin veriyor: için de geçerli olur.
  • Oturum açma akışları için bu özellik yalnızca tek hesap senaryolarında etkinleştirilir. Birden fazla kimlik bilgisi (geçiş anahtarı ve şifre gibi) olsa bile ekleyebilirsiniz.

Geçiş anahtarı oluşturma akışlarında tek dokunuşları etkinleştir

Bu yöntemin oluşturma adımları, mevcut kimlik bilgisi oluşturma işlemiyle eşleşir işlemi hakkında daha fazla bilgi edinin. BeginCreatePublicKeyCredentialRequest içinde, Geçiş anahtarı içinse isteği işlemek üzere handleCreatePasskeyQuery().

is BeginCreatePublicKeyCredentialRequest -> {
  Log.i(TAG, "Request is passkey type")
  return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}

handleCreatePasskeyQuery() dosyanıza CreateEntry sınıfıyla birlikte BiometricPromptData ekleyin:

val createEntry = CreateEntry(
  // Additional properties...
  biometricPromptData = BiometricPromptData(
    allowedAuthenticators = allowedAuthenticator
  )
)

Kimlik bilgisi sağlayıcılar, allowedAuthenticator özelliğini açıkça ayarlamalıdır BiometricPromptData örneğinde. Bu özellik ayarlanmazsa varsayılan olarak DEVICE_WEAK değerine ayarlanır. Kullanım alanınız için gerekirse isteğe bağlı cryptoObject özelliğini ayarlayın.

Oturum açma geçiş anahtarı akışlarında tek dokunuşla oturum açma özelliğini etkinleştirme

Geçiş anahtarı oluşturma akışına benzer şekilde, bu işlem de kullanıcı oturum açma işlemini işleme. BeginGetPublicKeyCredentialOption altında, populatePasskeyData() aracını kullanarak kimlik doğrulama isteği:

is BeginGetPublicKeyCredentialOption -> {
  // ... other logic

  populatePasskeyData(
    origin,
    option,
    responseBuilder,
    autoSelectEnabled,
    allowedAuthenticator
  )

  // ... other logic as needed
}

CreateEntry özelliğine benzer şekilde, BiometricPromptData örneği şuna ayarlanır: PublicKeyCredentialEntry örneği. Açıkça belirtilmediği takdirde allowedAuthenticator, varsayılan olarak BIOMETRIC_WEAK değerine ayarlıdır.

PublicKeyCredentialEntry(
  // other properties...

  biometricPromptData = BiometricPromptData(
    allowedAuthenticators = allowedAuthenticator
  )
)

Kimlik bilgisi girişi seçimini işleme

Geçiş anahtarı oluşturma için kimlik bilgisi girişi seçimini işlerken veya oturum açma sırasında geçiş anahtarı seçimi, PendingIntentHandler's retrieveProviderCreateCredentialRequest numaralı telefonu arayın veya retrieveProviderGetCredentialRequest (uygun şekilde). Bunlar nesne döndürür içeren bir liste oluşturabilirsiniz. Örneğin, geçiş anahtarı oluşturma girişi seçimi, kodunuzu şu şekilde 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ı hakkında bilgiler yer alır. Aynı zamanda kimlik bilgisi hakkında başka bilgiler içerir. Akış başarısız olursa karar vermek için biometricPromptResult.authenticationError altındaki hata kodunu kullanın. Bu hatanın bir parçası olarak döndürülen hata kodları biometricPromptResult.authenticationError.errorCode aynı hata kodlarıdır örneğin, androidx.biyometrik kitaplığında androidx.biometric.BiometricPrompt.NO_SPACE, androidx.biometric.BiometricPrompt.UNABLE_TO_İŞLEM, androidx.biometric.BiometricPrompt.ERROR_TIMEOUT vb. İlgili içeriği oluşturmak için kullanılan authenticationError, Kullanıcı arayüzünde görüntülenebilen errorCode.

Benzer şekilde, retrieveProviderGetCredentialRequest sırasında meta verileri çıkarın. Biyometrik akışkanınızın null olup olmadığını kontrol edin. Cevabınız evet ise kendi biyometrinizi şu şekilde yapılandırın: kimlik doğrulama. Bu, get işlemine 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...