> 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/enroll-wallet.md).

# ウォレットを登録する

## 概要

開始する前にデジタルウォレットアプリを登録します **NFCウォレットSDK** 初期化後、開始する前に **トークン化**.

ウォレット登録は、NFCウォレットを使用するために必要なセキュリティ資産をデジタルウォレットアプリにプロビジョニングします **NFCウォレット** サービス:

* ウォレットインスタンスごとに一度だけ実行します。
* デジタルウォレットアプリがサービスを使用する場合にのみ実行します。 **NFCウォレット** サービス。
* 適格なデバイスでのみ実行します。

{% hint style="warning" %}
を使用するデジタルウォレットアプリのみを登録してください **NFCウォレット** サービス。

これにより、デジタルウォレットアプリからの不要なネットワークトラフィックと、への不要な負荷が回避されます。 **NFCウォレット**.
{% endhint %}

## シーケンス図

ウォレットアプリを登録するためのハイレベルフロー。

<figure><img src="/files/0fa253ec8d2298e1fbd95b09bcad217e6d9ddb4f" alt=""><figcaption><p>ウォレット登録のハイレベルフロー。</p></figcaption></figure>

{% hint style="info" %}
このフローは技術的には次のように呼ばれます **ウォレットセキュア登録** における **NFCウォレット**.
{% endhint %}

## SDK統合

### 前提条件

開始する前に、次を確認してください:

* あなたのデジタルウォレットアプリがNFCウォレットのバックエンドにオンボードされていること。
* あなたは次を初期化しました **NFCウォレットSDK**.
* ウォレットは登録されていません（下を参照）。

### ウォレット登録を実行する

ウォレット登録はデジタルウォレットアプリのライフサイクルにおける一度きりの操作です。

SDKの初期化後に実行し、ウォレットが登録されていない場合にのみ実行してください。

1. を取得する `WalletSecureEnrollmentBusinessService` インスタンス。
2. を確認する `getState()` は次を返します `WSE_REQUIRED`.
3. 必要な場合は、呼び出してください `startWalletSecureEnrollment()` でウォレット登録を開始します。
4. を実装する `WalletSecureEnrollmentListener` で進行状況を追跡します。

これらが考えられるコールバックです:

* `onProgressUpdate` 状態とともに `WSE_STARTED`: プロセスが開始されます。
* `onProgressUpdate` 状態とともに `WSE_COMPLETED`: プロセスが正常に完了します。
* `onError`: プロセスがエラーで失敗します。

ウォレット登録が正常に完了したら、次に進みます [カードをトークン化する](/nfc-wallet-sdk-android/ja/implement-nfc-wallet/tokenize-a-card.md).

```java
public void performWseIfNeeded() {
    // まず現在のステータスを確認します。WSEがそもそも必要かどうか。
    final WalletSecureEnrollmentBusinessService wseService 
                = ProvisioningServiceManager.getWalletSecureEnrollmentBusinessService();
    final WalletSecureEnrollmentState state = wseService.getState();

    switch (state) {
        case WSE_COMPLETED:
        case WSE_NOT_REQUIRED:
            // WSE は現在または以前のインスタンスで既に実行されています。
            break;
        case WSE_STARTED:
            // WSE はこのインスタンス中にトリガーされました。最初のものが完了するのを待ちます。
            return;
        case WSE_REQUIRED:
            // WSE をトリガーします。
            wseService.startWalletSecureEnrollment(new WalletSecureEnrollmentListener() {
                @Override
                public void onProgressUpdate(final WalletSecureEnrollmentState wseState) {
                    if (wseState == WalletSecureEnrollmentState.WSE_COMPLETED) {
                        // 成功
                    }
                    else if (wseState == WalletSecureEnrollmentState.WSE_STARTED) {
                        // 開始済み
                    }
                }

                @Override
                public void onError(final WalletSecureEnrollmentError wbDynamicKeyRenewalServiceError) {
                    // エラーをログに記録
                }
            });
            break;
        default:
            // 発生すべきでないためエラーをログに記録
            break;
    }
}   
```

### エラーコードの詳細

次の場合 `WalletSecureEnrollmentListener.onError(...)` がトリガーされたとき、SDKは次を提供します `WalletSecureEnrollmentError`.

それはエラーコードとメッセージを含み、失敗の種類に応じて追加フィールドが含まれます。

#### を解析する `WalletSecureEnrollmentError`

の構造は次のとおりです: `WalletSecureEnrollmentError` オブジェクトは次のようになります:

* SDKエラーコード: この操作のエラータイプ。
* CPSエラーコード: CPSモジュール（サーバー側）から返された数値のエラーコード。
* HTTPステータスコード: 通信エラーに対して返されたHTTPステータスコード。
* メッセージ: 人間が読めるエラーの説明。

エラーは次のように解析する必要があります:

1. を読み取ってください `getSdkErrorCode()` を呼んで、 `WalletSecureEnrollmentErrorCodes` の値を取得します。
2. SDKエラーコードが通信エラー（`COMM_ERROR`）を示す場合は、読み取ってください `getHttpStatusCode()`.
3. SDKエラーコードがサーバー側のエラー（`SERVER_ERROR`）を示す場合は、読み取ってください `）を示す場合は、`.
4. を読み取ってください `getCpsErrorCode()` getErrorMessage()
5. をログ用の説明として参照してください。 `SDKエラーコードが`DEVICE\_SUSPICIOUS `の場合は、を読み取り、` getStatusAdditionalInfo()

トラブルシューティングのために記録してください。 `WalletSecureEnrollmentErrorCodes` 参照してください [Android API](/nfc-wallet-sdk-android/ja/android-api.md) リファレンスでコードの完全な一覧を参照してください。

#### `WalletSecureEnrollmentErrorCodes`

再試行、停止、またはSDKのリセットを判断するために、次の推奨事項を使用してください。

{% hint style="info" %}
を呼び出してください `SDKDataController.wipeAll()` 推奨がSDKのリセットである場合に呼び出します。
{% endhint %}

<details>

<summary>エラーコード表</summary>

<table data-full-width="true"><thead><tr><th width="240">エラーコード</th><th>発生時</th><th>推奨アクション</th></tr></thead><tbody><tr><td><code>WSE_INTERNAL_ERROR</code></td><td>内部SDKエラーが発生します。</td><td><p>ウォレット登録を再試行してください。</p><p>問題が続く場合は、SDKをリセットしてください。</p></td></tr><tr><td><code>COMMON_NO_INTERNET</code></td><td>デバイスにネットワーク接続がありません。</td><td>エンドユーザーにネットワーク接続を促し、その後ウォレット登録を再試行してください。</td></tr><tr><td><code>COMMON_COMM_ERROR</code></td><td>セキュリティ資産を取得中に通信エラーが発生しました。</td><td>ウォレット登録を再試行してください。</td></tr><tr><td><code>COMMON_SERVER_ERROR</code></td><td>セキュリティ資産を取得中にサーバー側のエラーが発生しました。</td><td><p>ウォレット登録を再試行してください。</p><p>問題が続く場合は、環境設定を検証するためにThalesのデリバリーチームに連絡してください。</p></td></tr><tr><td><code>RE_ENROLLMENT_REQUIRED</code></td><td>セキュリティ上の理由により再登録が必要です。</td><td>SDKをリセットしてから、再度ウォレット登録を実行してください。</td></tr><tr><td><code>WSE_STORAGE_ACCESS_ERROR</code></td><td>セキュアストレージにアクセスする際、SDKが内部の再試行回数を超えました。</td><td>SDKをリセットしてから、ウォレット登録を再試行してください。</td></tr><tr><td><code>JSON_PARSING_ERROR</code></td><td>応答データを解析できません。</td><td><p>ウォレット登録を再試行してください。</p><p>問題が続く場合は、SDKをリセットしてください。</p></td></tr><tr><td><code>WSE_REQUEST_ERROR</code></td><td>登録リクエストに失敗しました。</td><td>ウォレット登録を再試行してください。</td></tr><tr><td><code>WSE_DOWNLOAD_ERROR</code></td><td>セキュリティ資産のダウンロードに失敗しました。</td><td>ネットワーク接続を確認してから、ウォレット登録を再試行してください。</td></tr><tr><td><code>WSE_ERROR_INIT_SESSION</code></td><td>WSEセッションの初期化に失敗しました（通常は認証関連）。</td><td>ウォレット登録を再試行してください。</td></tr><tr><td><code>WSE_ERROR_COMPUTE_AUTH_VALUE_FAILED_PACKAGE_NOT_FOUND</code></td><td>パッケージ名が解決できないため、SDKが認証値を計算できません。</td><td>オンボーディング設定で使用されているアプリケーションのパッケージ名を確認し、ウォレット登録を再試行してください。</td></tr><tr><td><code>WSE_ERROR_COMPUTE_AUTH_VALUE_FAILED_CERT_EXCEPTION</code></td><td>アプリケーションの署名または公開鍵の問題により、SDKが認証値を計算できません。</td><td>オンボーディング設定で使用されているアプリケーション署名証明書を確認し、ウォレット登録を再試行してください。</td></tr><tr><td><code>WSE_CPS_COMPONENT_NOT_INITIALIZED</code></td><td>CPSコンポーネントが初期化される前にウォレット登録が開始されました。</td><td>SDKを初期化してから、ウォレット登録を再試行してください。</td></tr><tr><td><code>WSE_MG_COMPONENT_NOT_INITIALIZED</code></td><td>MobileGatewayコンポーネントが初期化される前にウォレット登録が開始されました。</td><td>SDKを初期化してから、ウォレット登録を再試行してください。</td></tr><tr><td><code>SDKエラーコードが</code></td><td>SDKはデバイスのセキュリティ脅威を検出しました。</td><td><p>フローを停止し、デバイスが使用できないことをエンドユーザーに通知してください。</p><p>をキャプチャして共有してください <code>の場合は、を読み取り、</code> Thalesサポートに連絡する際に。</p></td></tr><tr><td><code>WSE_KCV_ERROR</code></td><td>ダウンロードしたセキュリティ資産の検証に失敗しました（KCVチェックが失敗）。</td><td>ウォレット登録を再試行してください。</td></tr></tbody></table>

</details>

## アプリケーションバインディングキー（注記）

で説明されているように、 [オンボーディング](/nfc-wallet-sdk-android/ja/get-started/configuration/2.-onboarding.md) 次のを提供する必要があります **アプリケーションバインディングキー。**

アプリケーションバインディングキーが提供されていないか不正確な場合、ウォレット登録は失敗します。

以下の警告と注記を確認してください。

{% hint style="warning" %}

## 署名鍵のローテーション / 複数署名者 <a href="#receive-this-from-the-thales-delivery-team" id="receive-this-from-the-thales-delivery-team"></a>

最も古い署名鍵がrotationの証明構造の最初のsigner値として提供されていない場合、ウォレット登録は失敗します
{% endhint %}

{% hint style="info" %}

#### NFCウォレットSDKの以前のバージョンへのダウングレード <a href="#downgrading-to-earlier-versions-of-nfc-wallet-sdk" id="downgrading-to-earlier-versions-of-nfc-wallet-sdk"></a>

NFCウォレットSDKの以前のバージョンにダウングレードするには、アプリケーションがrotationの証明構造で最も古い署名鍵を最初のsignerとして提供していることを確認する必要があります。
{% 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:

```
GET https://docs.payments.thalescloud.io/nfc-wallet-sdk-android/ja/implement-nfc-wallet/enroll-wallet.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.
