> 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/implement-nfc-wallet/make-payment/implement-contactless-payments/3.-consider-application-start.md).

# 3. Considerar el inicio de la aplicación

## Resumen

Cuando tu aplicación se inicie, inicializa el SDK de NFC Wallet.

Configura también la experiencia de pago que admite tu aplicación de billetera digital:

* Admitir **un solo toque** pagos.
* O exigir **dos toques** pagos.

Incluso si habilitas **un solo toque**, algunas transacciones pueden recurrir a **dos toques**. Consulte [Un solo toque puede recurrir a dos toques](#single-tap-can-fall-back-to-two-tap).

### Aplicación de pago en segundo plano

Cuando la aplicación de billetera digital es la aplicación de pago predeterminada (consulta [Aplicación de pago predeterminada](/nfc-wallet-sdk-android/es/help/knowledge-base/control-nfc-payments-on-android.md#default-payment-application)), Android puede mantenerla en segundo plano. Esto le permite responder rápidamente a los APDU de pago sin contacto del terminal POS sin volver a crear la `aplicación`.

Algunos dispositivos terminan la aplicación de pago predeterminada mientras está en segundo plano. En estos dispositivos, los pagos sin contacto pueden provocar un arranque en frío de la aplicación. Consulta [Optimizar los arranques en frío](#optimize-cold-starts).

## Integración del SDK

### Actualizar el inicio de la aplicación

En `Application.onCreate()`, tu aplicación debe:

1. Ejecuta la configuración rápida del SDK.
2. Configura la experiencia de pago esperada:
   * `ONE_TAP_ENABLED` para admitir **un solo toque** transacciones
   * `TWO_TAP_ALWAYS` para exigir siempre autenticación después del primer toque (siempre **dos toques** pagos)
3. Inicializa el SDK en un hilo separado.
4. Opcional: después de que la inicialización se realice correctamente, activa la preentrada. Consulta [Activar preentrada](#activate-pre-entry).

Para los pasos 1 y 2, consulta [Inicializar el SDK de NFC Wallet](/nfc-wallet-sdk-android/es/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md).

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

```java
public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        
        // Compila una configuración personalizada sin cambiar el valor (misma configuración desde la primera inicialización del SDK)
        CustomConfiguration customConfig = new CustomConfiguration.Builder()
                .domesticCurrencyCode(978)
                .keyValidityPeriod(60)
                .build();
        
        // 1 - Ejecuta la configuración rápida
        // ... para asegurarse de que el SDK tenga el 'Context'
        try {
            SDKInitializer.INSTANCE.configure(this,  customConfig);
        } catch (InternalComponentException e){
            // Excepción de componente interno del SDK
            // La aplicación puede ignorar esto, 
            // y continuar con la API real de inicialización del SDK y realizar allí el manejo de errores si se produce una Exception
        } catch (Exception e) {
            // Excepción genérica, esto es una medida de seguridad para evitar cualquier evento 
            // que pueda provocar un fallo durante el inicio de la aplicación. 
            // La aplicación puede ignorar esto y continuar con la API real de inicialización del SDK y realizar allí el manejo de errores si se produce una Exception
        } catch (Throwable e) {
            // es poco probable que esto ocurra; sin embargo, como este fragmento de código reside en la clase Application,
            // para minimizar el impacto de cualquier error que pueda afectar a toda la aplicación, 
            // recomendamos capturar este error. 
            // En caso de este error, la app NO deberá llamar a SDKInitializer.INSTANCE.initialize()
        }
    
        // 2 - Configura la experiencia de pago.
        PaymentExperienceSettings.setPaymentExperience(this, PaymentExperience.ONE_TAP_ENABLED);
        
        // 3 - Inicializa el SDK (en un hilo separado)
        Thread sdkInit = new Thread(new Runnable() {
            @Override
            public void run() {
                SDKInitializer.INSTANCE.initialize(this, customConfig);
            }
        });
        sdkInit.start();
        
        // 4 - Activa la preentrada (opcional).
        activatePreEntry();
    }
    
    // Activa la preentrada.
    private void activatePreEntry() {
        final DeviceCVMPreEntryReceiver receiver = new DeviceCVMPreEntryReceiver();
        receiver.init();
        final IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
        registerReceiver(receiver, filter);
    }
    
    

}
```

{% endcode %}

{% hint style="warning" %}

### Un solo toque puede recurrir a dos toques

Si habilitas `ONE_TAP_ENABLED`, no todas las transacciones se realizan como **un solo toque**.

Trata **un solo toque** como el flujo de mejor caso. Si no se cumplen las condiciones requeridas, NFC Wallet SDK recurre a **dos toques**.

Ejemplos:

* El usuario final no toca dentro del período de validez configurado después de desbloquear el dispositivo. Consulta `keyValidityPeriod` en [Inicializar el SDK de NFC Wallet](/nfc-wallet-sdk-android/es/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md).
* Una transacción LVT sin autenticación alcanza un umbral de riesgo configurado. En ese caso, NFC Wallet SDK requiere autenticación. Consulta [Definir la 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).
  {% endhint %}

### Reduce el tiempo de arranque en frío

Algunos dispositivos terminan la aplicación de pago predeterminada mientras está en segundo plano. En estos dispositivos, un pago sin contacto puede desencadenar un **arranque en frío**.

El procesamiento de APDU comienza inmediatamente después de **arranque en frío**.

El proceso de arranque en frío incluye:

* Enlace del servicio (alrededor de 100–200 milisegundos)
* Finalización de `Application.onCreate()`

Minimiza el trabajo en `Application.onCreate()`. Limítalo a la configuración e inicialización del SDK de NFC Wallet.

Evita otras operaciones en los primeros 0,5 segundos después de `Application.onCreate()` se inicia. El trabajo en paralelo puede retrasar el manejo de APDU cuando Android envía comandos APDU al terminal POS.

Si es necesario, retrasa el trabajo no relacionado con pagos al menos 0,5 segundos después de que se complete la inicialización del SDK.

### Activar preentrada

Usa la preentrada para admitir **un solo toque** pagos.

La preentrada permite que el usuario final se autentique antes de que comience el flujo de pago.

La autenticación ocurre cuando el usuario final desbloquea el dispositivo con biometría o con el bloqueo del dispositivo (PIN, patrón o contraseña). Esto habilita un pago sin un paso adicional de verificación.

{% hint style="info" %}
Solo se permite un pago por cada desbloqueo del dispositivo cuando este modo está habilitado.
{% endhint %}

```java
private void activatePreEntry() {
    DeviceCVMPreEntryReceiver receiver = new DeviceCVMPreEntryReceiver();
    receiver.init();
    IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
    registerReceiver(receiver, filter);
}
```

{% hint style="warning" %}
No agregues filtros de intención adicionales con `DeviceCVMPreEntryReceiver`. Esta clase está diseñada para actuar solo sobre la `ACTION_USER_PRESENT` intención.
{% endhint %}


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/es/implement-nfc-wallet/make-payment/implement-contactless-payments/3.-consider-application-start.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
