> 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/nfc-wallet-sdk-android/es/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md).

# 4. Inicializar el SDK de NFC Wallet

## Inicializar el SDK de NFC Wallet

Inicialice el SDK de NFC Wallet antes de llamar a cualquier otra API del SDK.

Flujo recomendado:

1. Agregar los archivos de propiedades requeridos.
2. Compilar un `CustomConfiguration`.
3. (Opcional) Llamar a `SDKInitializer.INSTANCE.configure(...)` durante el inicio de la aplicación.
4. Llamar a `SDKInitializer.INSTANCE.initialize(...)` en un hilo en segundo plano.
5. Llamar a `MobileGatewayManager.INSTANCE.configure(...)` para configurar **Mobile Gateway (MG)**.

{% hint style="warning" %}

## Comprobar la versión de Android

Verifique que la versión de Android cumpla los requisitos mínimos del SDK NFC Wallet antes de inicializar el SDK.

Ocultar las funciones de NFC Wallet para versiones de Android no compatibles.
{% endhint %}

### Agregar los archivos de propiedades requeridos

Cree los siguientes archivos en su Android **aplicación de billetera digital** `assets` carpeta:

* `mobilegateway.properties`
* `rages.properties`
* `gemcbp.properties`

Establezca los valores proporcionados por Thales (a menos que un valor esté explícitamente marcado como fijo a continuación).

#### mobilegateway.properties

<details>

<summary>descripción de mobilegateway.properties</summary>

<table><thead><tr><th width="353">Clave</th><th>Descripción</th></tr></thead><tbody><tr><td>MG_CONNECTION_URL</td><td>[Cadena] URL del servidor MG (proporcionada por Thales).</td></tr><tr><td>MG_TRANSACTION_HISTORY_CONNECTION_URL</td><td>[Cadena] URL para recuperar el historial de transacciones (proporcionada por Thales).</td></tr><tr><td>WALLET_PROVIDER_ID</td><td>[Cadena] ID del proveedor de la billetera.</td></tr><tr><td>WALLET_APPLICATION_ID</td><td>[Cadena] ID de la aplicación del proveedor de la billetera (Opcional). Requerido cuando el proveedor de la billetera admite múltiples aplicaciones de billetera.</td></tr><tr><td>MG_CONNECTION_TIMEOUT</td><td>[Entero] Tiempo de espera de conexión en milisegundos. Recomendado: 30000.</td></tr><tr><td>MG_CONNECTION_READ_TIMEOUT</td><td>[Entero] Tiempo de espera de lectura en milisegundos. Recomendado: 30000.</td></tr><tr><td>MG_RETRY_COUNTER</td><td>[Entero] Número de reintentos. Recomendado: 3.</td></tr><tr><td>MG_RETRY_INTERVAL</td><td>[Entero] Intervalo en milisegundos entre reintentos. Recomendado: 10000.</td></tr></tbody></table>

</details>

#### rages.properties

<details>

<summary>descripción de rages.properties</summary>

<table><thead><tr><th width="353">Clave</th><th>Descripción</th></tr></thead><tbody><tr><td>REALM</td><td>[Cadena] Valor fijo: <strong>CBP</strong>.</td></tr><tr><td>OAUTH_CONSUMER_KEY</td><td>[Cadena] Clave de consumidor OAuth (proporcionada por Thales).</td></tr><tr><td>RAGES_GATEWAY_URL</td><td>[Cadena] URL del gateway RAGES (proporcionada por Thales).</td></tr><tr><td>RAGES_CONNECTION_TIMEOUT</td><td>[Entero] Tiempo de espera de conexión en milisegundos. Recomendado: 30000.</td></tr><tr><td>CSR_DOMAIN</td><td>[Cadena] Dominio utilizado en la solicitud de firma de certificado (CSR) para HTTPS. Consulte con el equipo de entrega de Thales por el valor.</td></tr><tr><td>CSR_EMAIL</td><td>[Cadena] Dirección de correo electrónico de la compañía.</td></tr></tbody></table>

</details>

#### gemcbp.properties

<details>

<summary>descripción de gemcbp.properties</summary>

<table><thead><tr><th width="353">Clave</th><th>Descripción</th></tr></thead><tbody><tr><td>CPS_URL</td><td>[Cadena] URL de CPS (proporcionada por Thales).</td></tr><tr><td>CPS_CONNECTION_TIMEOUT</td><td>[Entero] Tiempo de espera de conexión en milisegundos. Recomendado: 30000.</td></tr><tr><td>CPS_READ_TIMEOUT</td><td>[Entero] Tiempo de espera de lectura en milisegundos. Recomendado: 30000.</td></tr></tbody></table>

</details>

### Configurar el comportamiento de pago

`CustomConfiguration` define el comportamiento de pago:

* `keyValidityPeriod`: Tiempo (en segundos) entre la autenticación del usuario final y el toque en el terminal POS. Rango: 0–300. Predeterminado: 45.
* `domesticCurrencyCode`: [Código numérico de moneda ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) utilizado para CDCVM durante pagos LVT (Transacción de Bajo Valor). Predeterminado: 978 (EUR).

{% hint style="info" %}
`CustomConfiguration` admite parámetros adicionales de gestión de riesgos y CDCVM. Véase [Definir gestión de riesgos](/nfc-wallet-sdk-android/es/implement-nfc-wallet/make-payment/implement-contactless-payments/7.-configure-cdcvm-experiences/define-risk-management.md).

Recomendamos revisar estos parámetros al implementar pagos sin contacto.
{% endhint %}

El SDK usa `CustomConfiguration` durante la inicialización.

```java
/* Inicializar el SDK con valores diferentes a los predeterminados */
CustomConfiguration customConfig = new CustomConfiguration.Builder()
                .domesticCurrencyCode(978)
                .keyValidityPeriod(60)
                .build();
```

{% hint style="warning" %}
No cambie `keyValidityPeriod` y `domesticCurrencyCode` después de la primera inicialización.

Los cambios pueden introducir retrasos y problemas intermitentes entre la autenticación y el toque final en el terminal POS.
{% endhint %}

### Ejecutar la configuración rápida del SDK (opcional)

Use `SDKInitializer.INSTANCE.configure(...)` para precargar el `Context`, `CustomConfiguration`de Android, y las bibliotecas nativas.

Después de `configure(...)` se complete, puede llamar a las API que solo leen el almacenamiento local del SDK.

Véase [Requisitos de la API del SDK](/nfc-wallet-sdk-android/es/help/sdk-api-requirements.md) para más detalles.

{% hint style="info" %}
`configure()` no ejecuta la migración del SDK. Si se requiere migración, se ejecuta durante `initialize()`.
{% endhint %}

{% code title="MyApp.java" expandable="true" %}

```java
public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        try {
            // 1. Construya su CustomConfiguration (véase arriba).
            ...

            // 2. Ejecute la configuración rápida para asegurar que el SDK tenga un Context de Android.
            SDKInitializer.INSTANCE.configure(this, customConfig);
        } catch (InternalComponentException e) {
            // Puede registrar y continuar con initialize().
        } catch (Exception e) {
            // Salvaguarda contra bloqueos durante el inicio de la Application.
            // Puede registrar y continuar con initialize().
        } catch (Throwable e) {
            // Esto es poco probable.
            // Si sucede, no llame a initialize().
            return;
        }

        // 3. Inicialice el SDK de forma asíncrona para que el inicio de la Application no quede bloqueado.
        // Véase "Inicializar el SDK (pago)" más abajo.
    }
}
```

{% endcode %}

### Inicializar el SDK (pago)

Compruebe el estado del SDK usando `SDKController.getInstance().getSDKServiceState()` y solo inicialice cuando sea necesario.

Use `SDKInitializer.INSTANCE.initialize(...)` para inicializar los componentes de pago:

* Proporcione `CustomConfiguration` como parámetro de entrada.
* Esta API es sincrónica. Llámela desde un hilo en segundo plano.

{% code title="Inicializar el SDK de NFC Wallet (Java)" %}

```java
final Context appContext = getApplicationContext();

if (SDKController.getInstance().getSDKServiceState() != SDKServiceState.STATE_INITIALIZED) {
    Thread sdkInit = new Thread(new Runnable() {
        @Override
        public void run() {
            SDKInitializer.INSTANCE.initialize(appContext, customConfig);
        }
    });
    sdkInit.start();
}
```

{% endcode %}

{% hint style="info" %}
Las APIs de inicialización son idempotentes. Puede llamarlas múltiples veces de forma segura.
{% endhint %}

### Configurar Mobile Gateway (MG)

Después de que la inicialización del SDK se complete, llame a `MobileGatewayManager.INSTANCE.configure(...)` para habilitar la tokenización, LCM de tarjeta digital e historial de transacciones.

Use `MobileGatewayManager.INSTANCE.getConfigurationState()` para comprobar el estado de la configuración.

{% code title="Configurar Mobile Gateway (Java)" %}

```java
protected void initMgSdk(@NonNull final Context context) {
    final MobileGatewayManager mgManager = MobileGatewayManager.INSTANCE;

    try {
        // Evitar inicializaciones múltiples.
        if (mgManager.getConfigurationState() == MGSDKConfigurationState.NOT_CONFIGURED) {
            mgManager.configure(context);
        }
    } catch (final MGConfigurationException exception) {
        // Registrar error.
    }
}
```

{% endcode %}

### Recuperar el ID de la billetera

Use `getWalletId()` desde `MGCardEnrollmentService` para recuperar el identificador de la billetera.

{% code title="Recuperar el ID de la billetera (Java)" lineNumbers="true" %}

```java
MGCardEnrollmentService enrollService = MobileGatewayManager.INSTANCE.getCardEnrollmentService();
String walletId = enrollService.getWalletId();
```

{% endcode %}

`MGSDKException` se lanza si ocurre un error al recuperar el ID de la billetera.

{% hint style="info" %}
Use el ID de la billetera para la resolución de problemas y soporte.
{% endhint %}

El SDK genera el ID de la billetera la primera vez que inicializa el SDK:

* El ID de la billetera permanece estable entre reinicios de la aplicación.
* Si restablece el SDK, el ID de la billetera se regenera.


---

# 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/nfc-wallet-sdk-android/es/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.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.
