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

# 3. アプリケーション起動を考慮する

## 概要

アプリケーションの起動時に、NFCウォレットSDKを初期化します。

また、デジタルウォレットアプリがサポートする支払いエクスペリエンスを設定します：

* サポート **シングルタップ** 支払い。
* または、要求する **ツータップ** 支払い。

を有効にしても、 **シングルタップ**一部のトランザクションは **ツータップ**をフォールバックすることがあります。参照： [シングルタップはツータップにフォールバックすることがあります](#single-tap-can-fall-back-to-two-tap).

### バックグラウンドでの支払いアプリケーション

デジタルウォレットアプリがデフォルトの支払いアプリケーションである場合（参照： [デフォルトの支払いアプリ](/nfc-wallet-sdk-android/ja/help/knowledge-base/control-nfc-payments-on-android.md#default-payment-application)）、Androidはそれをバックグラウンドに保持することがあります。これにより、POS端末からの非接触支払いAPDUに対して、 `アプリケーション`.

一部のデバイスでは、デフォルトの支払いアプリケーションがバックグラウンドにある間に終了されることがあります。これらのデバイスでは、非接触支払いがアプリケーションのコールドスタートを引き起こす可能性があります。参照： [コールドスタートを最適化する](#optimize-cold-starts).

## SDK統合

### アプリケーションの起動を更新する

内の `Application.onCreate()`、アプリケーションは次のことを行う必要があります：

1. SDKのクイック構成を実行します。
2. 期待される支払いエクスペリエンスを設定します：
   * `ONE_TAP_ENABLED` を設定してサポートする **シングルタップ** トランザクション
   * `TWO_TAP_ALWAYS` を設定して、最初のタップ後に常に認証を要求する（常に **ツータップ** 支払い）
3. 別スレッドでSDKを初期化します。
4. オプション：初期化が成功したら、事前エントリを有効化します。参照： [事前エントリを有効化する](#activate-pre-entry).

ステップ1および2については、参照： [NFCウォレットSDKを初期化する](/nfc-wallet-sdk-android/ja/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();
        
        // 値を変更しないカスタム構成を構築する（最初のSDK初期化以来同じ構成）
        CustomConfiguration customConfig = new CustomConfiguration.Builder()
                .domesticCurrencyCode(978)
                .keyValidityPeriod(60)
                .build();
        
        // 1 - クイック構成を実行する
        // ... SDKが'Context'を持っていることを確認するため
        try {
            SDKInitializer.INSTANCE.configure(this,  customConfig);
        } catch (InternalComponentException e){
            // SDKの内部コンポーネント例外
            // アプリはこれを無視できます、 
            // そして実際のSDK初期化APIを続行し、例外が発生した場合にその場でエラー処理を行います
        } catch (Exception e) {
            // 一般的な例外。これはアプリケーション起動時にクラッシュを引き起こす可能性のある事象を防ぐためのセーフガードです。 
            // 
            // アプリはこれを無視できます、そして実際のSDK初期化APIを続行し、例外が発生した場合にその場でエラー処理を行います
        } catch (Throwable e) {
            // これは起こりにくいことですが、このコードがApplicationクラス内にあるため、
            // アプリケーション全体に影響を与える可能性のあるエラーの影響を最小限にするために、 
            // このエラーをキャッチすることを推奨します。 
            // このエラーが発生した場合、アプリはSDKInitializer.INSTANCE.initialize()を呼び出してはいけません
        }
    
        // 2 - 支払いエクスペリエンスを設定する。
        PaymentExperienceSettings.setPaymentExperience(this, PaymentExperience.ONE_TAP_ENABLED);
        
        // 3 - SDKを初期化する（別スレッドで）
        Thread sdkInit = new Thread(new Runnable() {
            @Override
            public void run() {
                SDKInitializer.INSTANCE.initialize(this, customConfig);
            }
        });
        sdkInit.start();
        
        // 4 - 事前エントリを有効化する（オプション）。
        activatePreEntry();
    }
    
    // 事前エントリを有効化する。
    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" %}

## シングルタップはツータップにフォールバックすることがあります

を有効にすると、すべてのトランザクションが `ONE_TAP_ENABLED`として実行されるわけではありません。 **シングルタップ**.

を最良のフローとして扱います。必要な条件が満たされない場合、NFCウォレットSDKは **シングルタップ** にフォールバックします。 **ツータップ**.

例：

* エンドユーザーが端末のロック解除後に設定された有効期間内にタップしない場合。参照： `keyValidityPeriod` 内の [NFCウォレットSDKを初期化する](/nfc-wallet-sdk-android/ja/get-started/configuration/4.-initialize-the-nfc-wallet-sdk.md).
* 認証なしのLVTトランザクションが設定されたリスク閾値に達する場合。その場合、NFCウォレットSDKは認証を要求します。参照： [リスク管理を定義する](/nfc-wallet-sdk-android/ja/implement-nfc-wallet/make-payment/implement-contactless-payments/7.-configure-cdcvm-experiences/define-risk-management.md).
  {% endhint %}

### コールドスタート時間を短縮する

一部のデバイスでは、デフォルトの支払いアプリケーションがバックグラウンドにある間に終了されることがあります。これらのデバイスでは、非接触支払いがアプリケーションの **コールドスタート**.

APDU処理は、 **コールドスタート**.

直後にすぐに開始されます。

* コールドスタートプロセスには次が含まれます：
* サービスのバインディング（約100〜200ミリ秒） `Application.onCreate()`

の完了 `Application.onCreate()`での作業を最小限にします。

NFCウォレットSDKの構成と初期化に限定してください。 `Application.onCreate()` が開始されてから最初の0.5秒間に他の操作を避けてください。並列処理は、AndroidがPOS端末にAPDUコマンドを送信したときにAPDU処理を遅延させる可能性があります。

必要な場合は、SDK初期化が完了してから少なくとも0.5秒間は非支払いの作業を遅延させてください。

### 事前エントリを有効化する

をサポートするために事前エントリを使用してください **シングルタップ** 支払い。

事前エントリにより、エンドユーザーは支払いフローが開始される前に認証できます。

認証は、エンドユーザーが生体認証またはデバイスのキーロック（PIN、パターン、またはパスワード）でデバイスのロックを解除したときに発生します。これにより、追加の検証ステップなしで支払いが可能になります。

{% hint style="info" %}
このモードが有効になっている場合、デバイスのロック解除ごとに1回の支払いのみが許可されます。
{% 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" %}
DeviceCVMPreEntryReceiverに追加のインテントフィルタを追加しないでください、 `DeviceCVMPreEntryReceiver`。このクラスは、 `ACTION_USER_PRESENT` インテントのみに反応するように設計されています。
{% 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/ja/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.
