# Credential

Artifact: [androidx.credentials:credentials](https://developer.android.com/jetpack/androidx/releases/credentials) [View Source](https://cs.android.com/search?q=file:androidx/credentials/Credential.kt+class:androidx.credentials.Credential) Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

*** ** * ** ***


```
public abstract class Credential
```

<br />

Known direct subclasses [CustomCredential](https://developer.android.com/reference/androidx/credentials/CustomCredential), [DigitalCredential](https://developer.android.com/reference/androidx/credentials/DigitalCredential), [PasswordCredential](https://developer.android.com/reference/androidx/credentials/PasswordCredential), [PublicKeyCredential](https://developer.android.com/reference/androidx/credentials/PublicKeyCredential), [RestoreCredential](https://developer.android.com/reference/androidx/credentials/RestoreCredential)

|---|---|
| `https://developer.android.com/reference/androidx/credentials/CustomCredential` | Base class for a custom credential with which the user consented to authenticate to the app. |
| `https://developer.android.com/reference/androidx/credentials/DigitalCredential` | Represents the user's digital credential, generally used for verification or sign-in purposes. |
| `https://developer.android.com/reference/androidx/credentials/PasswordCredential` | Represents the user's password credential granted by the user for app sign-in. |
| `https://developer.android.com/reference/androidx/credentials/PublicKeyCredential` | Represents the user's passkey credential granted by the user for app sign-in. |
| `https://developer.android.com/reference/androidx/credentials/RestoreCredential` | Represents the user's restore credential for the app sign in. |

*** ** * ** ***

Base class for a credential with which the user consented to authenticate to the app.

```kotlin
import androidx.credentials.Credential
import androidx.credentials.CustomCredential
import androidx.credentials.PasswordCredential
import androidx.credentials.PublicKeyCredential

when (credential) {
    is PublicKeyCredential -> {
        val responseJson = credential.authenticationResponseJson
        val userCredential = fidoAuthenticateWithServer(responseJson)
        loginWithPasskey(userCredential)
    }
    is PasswordCredential -> {
        val userName = credential.id
        val password = credential.password
        loginWithPassword(userName, password)
    }
    is CustomCredential -> {
        // If you are also using any external sign-in libraries, parse them here with the
        // utility functions provided they provided.
        if (credential.type == ExampleCustomCredential.TYPE) {
            try {
                val exampleCustomCredential =
                    ExampleCustomCredential.createFrom(credential.data)
                loginWithExampleCustomCredential(exampleCustomCredential)
            } catch (e: ExampleCustomCredential.ExampleCustomCredentialParsingException) {
                // Unlikely to happen. If it does, you likely need to update the dependency
                // version of your external sign-in library.
                Log.e(TAG, "Failed to parse an ExampleCustomCredential", e)
            }
        } else {
            Log.w(
                TAG,
                "Received unrecognized credential type ${credential.type}. " +
                    "This shouldn't happen",
            )
        }
    }
    else -> {
        Log.w(
            TAG,
            "Received unrecognized credential type ${credential.type}. This shouldn't happen",
        )
    }
}
```

## Summary

| ### Public methods |
|---|---|
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/Credential` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 34) https://developer.android.com/reference/androidx/credentials/Credential#createFrom(android.credentials.Credential)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/credentials/Credential.html credential)` Parses the `https://developer.android.com/reference/androidx/credentials/Credential.Companion#createFrom(android.credentials.Credential)` into an instance of `https://developer.android.com/reference/androidx/credentials/Credential`. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/credentials/Credential` | `https://developer.android.com/reference/androidx/credentials/Credential#createFrom(kotlin.String,android.os.Bundle)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html type, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Bundle.html data)` Parses the raw data into an instance of `https://developer.android.com/reference/androidx/credentials/Credential`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Bundle.html` | `https://developer.android.com/reference/androidx/credentials/Credential#getData()()` the credential data in the `https://developer.android.com/reference/android/os/Bundle.html` format |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/credentials/Credential#getType()()` the credential type determined by the credential-type-specific subclass (e.g. `https://developer.android.com/reference/androidx/credentials/PasswordCredential#TYPE_PASSWORD_CREDENTIAL()` for `PasswordCredential` or `https://developer.android.com/reference/androidx/credentials/PublicKeyCredential#TYPE_PUBLIC_KEY_CREDENTIAL()` for `PublicKeyCredential`) |

## Public methods

### createFrom

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.5.0)

```
@RequiresApi(value = 34)
public static final @NonNull Credential createFrom(@NonNull Credential credential)
```

Parses the `https://developer.android.com/reference/androidx/credentials/Credential.Companion#createFrom(android.credentials.Credential)` into an instance of `https://developer.android.com/reference/androidx/credentials/Credential`.

It is recommended to construct a Credential by directly instantiating a Credential subclass, instead of using this API. This API should only be used by a small subset of system apps that reconstruct an existing object for user interactions such as collecting consents.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/credentials/Credential.html credential` | the framework Credential object |

### createFrom

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.5.0)

```
public static final @NonNull Credential createFrom(@NonNull String type, @NonNull Bundle data)
```

Parses the raw data into an instance of `https://developer.android.com/reference/androidx/credentials/Credential`.

It is recommended to construct a Credential by directly instantiating a Credential subclass, instead of using this API. This API should only be used by a small subset of system apps that reconstruct an existing object for user interactions such as collecting consents.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html type` | matches `https://developer.android.com/reference/androidx/credentials/Credential#type()`, the credential type |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/os/Bundle.html data` | matches `https://developer.android.com/reference/androidx/credentials/Credential#data()`, the credential data in the `https://developer.android.com/reference/android/os/Bundle.html` format; this should be constructed and retrieved from the a given `https://developer.android.com/reference/androidx/credentials/Credential` itself and never be created from scratch |

### getData

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public final @NonNull Bundle getData()
```

the credential data in the `https://developer.android.com/reference/android/os/Bundle.html` format

### getType

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/credentials#1.2.0)

```
public final @NonNull String getType()
```

the credential type determined by the credential-type-specific subclass (e.g. `https://developer.android.com/reference/androidx/credentials/PasswordCredential#TYPE_PASSWORD_CREDENTIAL()` for `PasswordCredential` or `https://developer.android.com/reference/androidx/credentials/PublicKeyCredential#TYPE_PUBLIC_KEY_CREDENTIAL()` for `PublicKeyCredential`)