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

# Implement contactless payments

## Overview

The NFC Wallet SDK supports multiple contactless payment payment experience on Android:

* **Single-tap**: Only one tap is required to handle the transaction with point-of-sale (POS) terminal with or without end user authentication.
* **Two-tap** End users needs 2 taps with POS to handle transaction, the first tap to open the digital wallet application to required end user authentication.
* **Manual mode**: The end user opens your digital wallet application and starts a payment from the in-app UI.

Choose the experience that matches your digital wallet application UX.

### Android settings

Android settings can affect the payment experience. Check these settings before you start:

* Check that your digital wallet application is the default payment application. This is required for **single-tap** and **two-tap** payments.

  See [Default payment application](/nfc-wallet-sdk-android/help/knowledge-base/control-nfc-payments-on-android.md#default-payment-application).
* Check whether Android allows the foreground application to override the default payment application. This can affect **manual mode** payment experience.

  See [Pay with foreground app](/nfc-wallet-sdk-android/help/knowledge-base/control-nfc-payments-on-android.md#pay-with-foreground-app).

## User experience

### Single-tap

With **single-tap** experience end user brings the device close to a POS terminal only one time to perform the contacless transaction with or without a pre-authentication.

#### **With authentication**

<figure><img src="/files/mtgZwPD5UY6nobDlek0K" alt="" width="563"><figcaption></figcaption></figure>

In this experience end user needs to unlock the device using a CDCVM method (**biometric** or **keyguard**) before the tap.

{% hint style="warning" %}
The tap must be performed within a configured validity period after authentication to unlock device.

See `keyValidityPeriod` in [Configure payment behavior](/nfc-wallet-sdk-android/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md#configure-payment-behavior).
{% endhint %}

{% hint style="info" %}
See [Activate pre-entry](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/3.-consider-application-start.md#activate-pre-entry) to support this payment experience.
{% endhint %}

#### Without authentication

End users doesn't need to authenticate to perform the single-tap transaction in the following case:

* **Low value transaction (LVT)**

  Transaction below a amount and for a dedicated currency.
* **Transit transaction**

  Transaction without authentication to allow a frictionless payment experience at transit gate.

See [Configure CDCVM experiences](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/7.-configure-cdcvm-experiences.md) for more details.

### Two-tap

<figure><img src="/files/dx57ETbc0un58TNlpckn" alt=""><figcaption></figcaption></figure>

With **two-tap** experience end user brings the device close to a POS terminal, the OS launches the default digital wallet application to request end user authentication. Once authenticated the end-user could be perform the transaction by executing the 2nd tap.

{% hint style="warning" %}
The 2nd tap must be performed within a configured validity period after authentication.

See `keyValidityPeriod` in [Configure payment behavior](/nfc-wallet-sdk-android/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md#configure-payment-behavior).
{% endhint %}

{% hint style="info" %}
As an option end user could select the card to pay before the 2nd tap.
{% endhint %}

### Manual mode

<figure><img src="/files/dPlnhc9OTCTHNJuFHZ36" alt=""><figcaption></figcaption></figure>

In this experience, the end user starts the payment from within your digital wallet application. You implement the UI and the action that triggers the payment flow.

## Implementation guides

After you choose the contactless payment experience for your digital wallet application, implement contactless payment in this order:

1. [Implement HCE service](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/1.-implement-hce-service.md)\
   Implement the Android HCE service used for contactless payments.
2. [Implement contactless payment callbacks](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/2.-implement-contactless-payment-callbacks.md)\
   Handle NFC Wallet SDK callbacks during a contactless payment.
3. [Consider application start](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/3.-consider-application-start.md)\
   Ensure your digital wallet application is ready when a payment starts.
4. [Support manual mode](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/4.-support-manual-mode.md)\
   Add app-side support for manual mode payments.
5. [Perform CDCVM verification](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/5.-perform-cdcvm-verification.md)\
   Verify **CDCVM** and handle fallback when required.
6. [Display transaction context](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/6.-display-transaction-context.md)\
   Show transaction details to the end user.
7. [Configure CDCVM experiences](/nfc-wallet-sdk-android/implement-nfc-wallet/make-payment/implement-contactless-payments/7.-configure-cdcvm-experiences.md)\
   Enable **single-tap** without authentication for LVT and/or transit transaction.


---

# 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/implement-nfc-wallet/make-payment/implement-contactless-payments.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.
