L'API Credential Manager - Holder consente alle app per Android di gestire e presentare credenziali digitali ai verificatori.
Inizia
Per utilizzare l'API Credential Manager - Holder, aggiungi le seguenti dipendenze allo script di build del modulo dell'app:
// In your app module's build.gradle:
dependencies {
implementation(libs.androidx.registry.provider)
implementation(libs.androidx.registry.provider.play.services)
}
// In libs.versions.toml:
registryDigitalCredentials = "1.0.0-alpha02"
androidx-registry-provider = { module = "androidx.credentials.registry:registry-provider", version.ref = "registryDigitalCredentials" }
androidx-registry-provider-play-services = { module = "androidx.credentials.registry:registry-provider-play-services", version.ref = "registryDigitalCredentials" }
Registrare le credenziali con Gestore delle credenziali
Un wallet deve registrare i metadati delle credenziali in modo che Credential Manager possa filtrarli e visualizzarli nel selettore delle credenziali quando viene ricevuta una richiesta.
UI del selettore del gestore delle credenziali
Il formato di questi metadati viene passato a un RegisterCredentialsRequest.
Crea un [RegistryManager][1] e registra le credenziali:
In questo esempio, i metadati vengono compilati da un database di voci delle credenziali. Puoi trovare un riferimento nel nostro portafoglio di esempio che registra i metadati al caricamento dell'app. In futuro, la composizione del database delle credenziali sarà supportata dall'API Jetpack. A questo punto, puoi registrare i metadati delle credenziali come strutture di dati ben definite.
Il registro viene mantenuto anche dopo il riavvio del dispositivo. La nuova registrazione dello stesso registro dello stesso ID + tipo sovrascrive il record di registrazione precedente. Pertanto, registrati di nuovo solo quando i dati delle credenziali sono cambiati.
(Facoltativo) Crea un matcher
Credential Manager è indipendente dal protocollo. Tratta il registro dei metadati come un blob opaco e non ne verifica né controlla i contenuti. Pertanto, il wallet deve fornire un matcher, un binario eseguibile in grado di elaborare i dati del wallet e generare i metadati di visualizzazione in base a una richiesta in entrata. Credential Manager esegue il matcher in un ambiente sandbox senza accesso alla rete o al disco in modo che nulla venga divulgato a un wallet prima che la UI venga visualizzata all'utente.
L'API Credential Manager fornirà matcher per i protocolli più diffusi, oggi OpenID4VP. Non è ancora stato rilasciato ufficialmente, quindi per ora utilizza il nostro matcher di esempio per il protocollo OpenID4VP.
Gestire una credenziale selezionata
A questo punto, il wallet deve gestire la selezione di una credenziale da parte dell'utente. Puoi definire un'attività che ascolti il filtro per intent androidx.credentials.registry.provider.action.GET_CREDENTIAL.
Il nostro portafoglio di esempio mostra questa procedura.
L'intent che avvia l'attività contiene la richiesta del verificatore e l'origine
della chiamata, che puoi estrarre con la
funzione PendingIntentHandler.retrieveProviderGetCredentialRequest. L'API restituisce un ProviderGetCredentialRequest
contenente tutte le informazioni associate alla richiesta di verifica. Esistono
tre componenti chiave:
- L'app che ha effettuato la richiesta. Puoi recuperarlo con
getCallingAppInfo. - La credenziale selezionata. Puoi ottenere informazioni sul candidato scelto dall'utente tramite il metodo di estensione
selectedEntryId. In questo modo, l'ID credenziale registrato verrà abbinato. - Eventuali richieste specifiche effettuate dal verificatore. Puoi ottenerlo dal metodo
getCredentialOptions. In questo caso, in questo elenco troverai unGetDigitalCredentialOptioncontenente la richiesta di credenziali digitali.
Più comunemente, il verificatore effettua una richiesta di presentazione delle credenziali digitali in modo che tu possa elaborarla con il seguente codice di esempio:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Puoi vedere un esempio nel nostro portafoglio di esempio.
Eseguire il rendering della UI del wallet
Una volta selezionata la credenziale, viene richiamato il wallet e l'utente viene guidato attraverso la sua UI. Nell'esempio, si tratta di una richiesta biometrica.
Restituisci la risposta delle credenziali
Quando il portafoglio è pronto per restituire il risultato, puoi farlo completando l'attività con la risposta delle credenziali:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
Se esiste un'eccezione, puoi inviare allo stesso modo l'eccezione delle credenziali:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Consulta l'app di esempio per un esempio di come restituire la risposta delle credenziali nel contesto.