> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/3d-secure/es/implementar-3ds/implementar-el-flujo-oob-autenticacion-thales/inscribir-el-autenticador.md).

# Inscribir el autenticador

## Resumen

Antes de completar un desafío 3DS durante una transacción de comercio electrónico, el usuario final debe registrar un autenticador de dispositivo en la aplicación del emisor.

El SDK D1 proporciona un autenticador basado en FIDO para EMV 3‑D Secure (3DS). El registro inscribe el autenticador del usuario final en el dispositivo para 3DS.

## Flujo de inscripción

<figure><img src="/files/5480364475d8938cb32aded152a29b45d02745eb" alt=""><figcaption><p>Flujo de inscripción de autenticador a alto nivel.</p></figcaption></figure>

## Diagrama de secuencia

El diagrama a continuación muestra la secuencia de mensajes de extremo a extremo para la inscripción del autenticador.

### Prerrequisitos

* La aplicación del emisor integra el SDK D1 y el SDK está inicializado.
* La aplicación del emisor ha iniciado sesión en el SDK D1.
* El usuario final está registrado en la Plataforma D1.
* Las notificaciones push están configuradas en la aplicación del emisor.

<figure><img src="/files/af7955f6f9fa2f23a1039f89f9db0d4f301b4d19" alt=""><figcaption><p>Diagrama de secuencia para la inscripción del autenticador.</p></figcaption></figure>

{% hint style="danger" %}

* Cada dispositivo admite un máximo de **un usuario final inscrito**.
* Un único usuario final puede estar inscrito en **múltiples dispositivos**.
* Ciertos dispositivos Android pueden generar una carga de atestación incorrecta, lo que puede resultar en un fallo de inscripción. Para mitigar este riesgo, es **altamente recomendable** inscribirse usando un `BIOMÉTRICO` autenticador en lugar de un `PLATAFORMA` autenticador.
  {% endhint %}

## Integración del SDK D1

### Inscribir el autenticador

{% tabs %}
{% tab title="Android Java" %}

```java
// Proporcionar un AuthnCallback
D1Authn d1Authn = d1Task.getD1Authn(activity, authnCallback);

// Seleccionar el tipo de autenticador
AuthnType preferredAuthnType = AuthnType.BIOMETRIC;

d1Authn.enrollAuthnCredentials(preferredAuthnType, new D1Task.Callback<Void>() {
    @Override
    public void onSuccess(Void unused) {
        // El dispositivo está inscrito para 3DS. Continúe con el desafío OOB.
    }

    @Override
    public void onError(@NonNull D1Exception e) {
        // Maneje el error en su aplicación.
    }
});
```

{% endtab %}

{% tab title="Android Kotlin" %}

```kotlin
fun enrollAuthnCredentials(d1Task: D1Task, activity: FragmentActivity, authnCallback: AuthnCallback) {
    // Implementar la interfaz conforme a AuthnCallback
    val d1Authn: D1Authn = d1Task.getD1Authn(activity, authnCallback)

    // Seleccione su tipo de autenticador preferido
    val preferredAuthnType: AuthnType = AuthnType.BIOMETRIC

    d1Authn.enrollAuthnCredentials(preferredAuthnType, object : D1Task.Callback<Void?> {
        override fun onSuccess(unused: Void?) {
            // Proceda con los flujos subsecuentes, el dispositivo ahora está inscrito para el servicio 3D Secure.
        }

        override fun onError(e: D1Exception) {
            // Consulte la sección D1 SDK Integration – Error Management.
        }
    })
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
// Conformar a AuthnDelegate
let d1Authn = d1Task.d1Authn(self)

// Seleccionar el tipo de autenticador
let preferredAuthnType = AuthnType.biometric

d1Authn.enrollAuthnCredentials(preferredAuthnType, completion: { error in
    if let error = error {
        // Maneje el error en su aplicación.
    } else {
        // El dispositivo está inscrito para 3DS. Continúe con el desafío OOB.
    }
})
```

{% endtab %}
{% endtabs %}

A continuación, proceda a [Gestionar el desafío OOB](/3d-secure/es/implementar-3ds/implementar-el-flujo-oob-autenticacion-thales/gestionar-el-desafio-oob.md).

### Dar de baja el autenticador

Llamar `unenrollAuthnCredentials` para eliminar la inscripción en este dispositivo. El backend de D1 y el almacenamiento local del dispositivo eliminan los datos de inscripción asociados. Otros dispositivos permanecen inscritos. Si el dispositivo ya está dado de baja, la llamada tiene éxito (idempotente).

{% tabs %}
{% tab title="Android Java" %}

```java
// Proporcionar un AuthnCallback
D1Authn d1Authn = d1Task.getD1Authn(activity, authnCallback);

d1Authn.unenrollAuthnCredentials(new D1Task.Callback<Void>() {
    @Override
    public void onSuccess(Void unused) {
        // El dispositivo ya no está inscrito para 3DS.
    }

    @Override
    public void onError(@NonNull D1Exception e) {
        // Maneje el error en su aplicación.
    }
});
```

{% endtab %}

{% tab title="Android Kotlin" %}

```kotlin
fun unenrollAuthnCredentials(d1Task: D1Task, activity: FragmentActivity, authnCallback: AuthnCallback) {
    // Implementar la interfaz conforme a AuthnCallback
    val d1Authn: D1Authn = d1Task.getD1Authn(activity, authnCallback)

    d1Authn.unenrollAuthnCredentials(object : D1Task.Callback<Void?> {
        override fun onSuccess(unused: Void?) {
            // el dispositivo ahora está dado de baja para el servicio 3D Secure.
        }

        override fun onError(@NonNull e: D1Exception) {
            // Consulte la sección D1 SDK Integration – Error Management. Puede fallar debido a la conexión de red.
        }
    })
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
// Conformar a AuthnDelegate
let d1Authn = d1Task.d1Authn(self)

d1Authn.unenrollAuthnCredentials({ error in
    if let error = error {
        // Maneje el error en su aplicación.
    } else {
        // El dispositivo ya no está inscrito para 3DS.
    }
})
```

{% endtab %}
{% endtabs %}

### Personalizar el mensaje del aviso

**Android**\
Para [BIOMÉTRICO](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/authn/AuthnType.html#BIOMETRIC), puede personalizar el mensaje mostrado en el cuadro de diálogo de aviso biométrico. Para [PLATAFORMA](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/authn/AuthnType.html#PLATFORM), no se admite la personalización del mensaje del aviso.

**iOS**\
No se admite la personalización del mensaje del aviso de autenticación.

{% tabs %}
{% tab title="Android Java" %}

```java
public void customizingBiometricPromptMessage(@NonNull D1Task d1Task, @NonNull FragmentActivity activity) throws D1Exception {
    // Seleccione su tipo de autenticador preferido como AuthnType.BIOMETRIC
    AuthnType preferredAuthnType = AuthnType.BIOMETRIC;

    String customMessage = "Please authenticate with biometrics";

    d1Task.getD1Authn(activity, new AuthnCallback() {
        @Override
        public void onTransactionDataConfirmation(@NonNull Map<String, String> map, @NonNull AuthnUserConfirmationCallback authnUserConfirmationCallback) {
            // El 'map' contiene los datos de la transacción que deben ser autenticados.
            // Aplicación para mostrar el contenido, solicitar al usuario final que 'proceda' o 'rechace' la solicitud de autenticación.
        }

        @NonNull
        @Override
        public String onBiometricPromptMessage() {
            return customMessage;
        }
    });
}
```

{% endtab %}

{% tab title="Android Kotlin" %}

```kotlin
@Throws(D1Exception::class)
fun customizingBiometricPromptMessage(d1Task: D1Task, activity: FragmentActivity) {
    // Seleccione su tipo de autenticador preferido como AuthnType.BIOMETRIC
    val preferredAuthnType = AuthnType.BIOMETRIC

    val customMessage = "Please authenticate with biometrics"

    d1Task.getD1Authn(activity, object : AuthnCallback {
        override fun onTransactionDataConfirmation(map: Map<String, String>, authnUserConfirmationCallback: AuthnUserConfirmationCallback) {
            // El 'map' contiene los datos de la transacción que deben ser autenticados.
            // Aplicación para mostrar el contenido, solicitar al usuario final que 'proceda' o 'rechace' la solicitud de autenticación.
        }

        override fun onBiometricPromptMessage(): String {
            return customMessage
        }
    })
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payments.thalescloud.io/3d-secure/es/implementar-3ds/implementar-el-flujo-oob-autenticacion-thales/inscribir-el-autenticador.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
