> 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 su aplicación se inicia, inicialice el SDK de Billetera NFC.

También configure la experiencia de pago que su aplicación de billetera digital admite:

* Compatibilidad **toque único** pagos.
* O requiera **dos toques** pagos.

Incluso si habilita **toque único**, algunas transacciones pueden recurrir a **dos toques**. Vea [El toque único puede recurrir al doble toque](#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 (ver [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 APDU de pago sin contacto desde el terminal POS sin recrear 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 desencadenar un inicio en frío de la aplicación. Vea [Optimizar inicios en frío](#optimize-cold-starts).

## Integración del SDK

### Actualizar el inicio de la aplicación

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

1. Ejecutar la configuración rápida del SDK.
2. Establecer la experiencia de pago esperada:
   * `ONE_TAP_ENABLED` para admitir **toque único** transacciones
   * `TWO_TAP_ALWAYS` para requerir siempre autenticación después del primer toque (siempre **dos toques** pagos)
3. Inicialice el SDK en un hilo separado.
4. Opcional: después de que la inicialización tenga éxito, active la pre-entrada. Vea [Activar pre-entrada](#activate-pre-entry).

Para los pasos 1 y 2, vea [Inicializar el SDK de Billetera NFC](/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();
        
        // Construir configuración personalizada sin cambio de valor (misma configuración desde la primera inicialización del SDK)
        CustomConfiguration customConfig = new CustomConfiguration.Builder()
                .domesticCurrencyCode(978)
                .keyValidityPeriod(60)
                .build();
        
        // 1 - Ejecutar configuración rápida
        // ... para asegurarse de que el SDK tiene 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 de inicialización real del SDK y manejar el error allí si se lanza una excepción
        } catch (Exception e) {
            // Excepción genérica, esto es una salvaguarda para evitar cualquier evento 
            // que podría provocar un bloqueo durante el inicio de la Application. 
            // La aplicación puede ignorar esto y continuar con la API de inicialización real del SDK y manejar el error allí si se lanza una excepción
        } catch (Throwable e) {
            // es poco probable que esto ocurra, sin embargo, debido a que este fragmento de código reside en la clase Application,
            // para minimizar el impacto de cualquier error que podría afectar a toda la aplicación, 
            // recomendamos capturar este error. 
            // En caso de este error, la aplicación NO debe llamar a SDKInitializer.INSTANCE.initialize()
        }
    
        // 2 - Establecer la experiencia de pago.
        PaymentExperienceSettings.setPaymentExperience(this, PaymentExperience.ONE_TAP_ENABLED);
        
        // 3 - Inicializar el SDK (en un hilo separado)
        Thread sdkInit = new Thread(new Runnable() {
            @Override
            public void run() {
                SDKInitializer.INSTANCE.initialize(this, customConfig);
            }
        });
        sdkInit.start();
        
        // 4 - Activar pre-entrada (opcional).
        activatePreEntry();
    }
    
    // Activar pre-entrada.
    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" %}

## El toque único puede recurrir al doble toque

Si habilita `ONE_TAP_ENABLED`, no todas las transacciones se realizan como **toque único**.

Trate **toque único** como el flujo de mejor caso. Si no se cumplen las condiciones requeridas, el SDK de Billetera NFC recurre a **dos toques**.

Ejemplos:

* El usuario final no toca dentro del período de validez configurado después de desbloquear el dispositivo. Vea `keyValidityPeriod` en [Inicializar el SDK de Billetera NFC](/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, el SDK de Billetera NFC requiere autenticación. Vea [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).
  {% endhint %}

### Reducir el tiempo de inicio 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 **inicio en frío**.

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

El proceso de inicio en frío incluye:

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

Minimice el trabajo en `Application.onCreate()`. Limítelo a la configuración e inicialización del SDK de Billetera NFC.

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

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

### Activar pre-entrada

Use la pre-entrada para admitir **toque único** pagos.

La pre-entrada 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 el bloqueo del dispositivo (PIN, patrón o contraseña). Esto permite un pago sin un paso de verificación adicional.

{% hint style="info" %}
Solo se permite un pago por 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 agregue filtros de intent adicionales con `DeviceCVMPreEntryReceiver`. Esta clase está diseñada para actuar solo sobre el `ACTION_USER_PRESENT` intent.
{% 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.
