> 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/push-provisioning/ja/implement-push-provisioning/implement-view-and-control/view-and-control-digital-cards.md).

# デジタルカードの表示と制御

{% hint style="danger" %}
トークン化サービスは、「View\&Control」機能で Thales D1 SDK を使用するために必要です。
{% endhint %}

このガイドを使用して、 **エンドユーザー** が閲覧・管理できるようにします **デジタルカード** （トークン）を、以下のために作成された自分のカードに対して： **xPay Wallets** およびその他の **トークンリクエスタ**.

イシュアアプリケーションでは、通常次のことを行います：

* 特定の `cardId`
* に関連付けられたすべてのデジタルカードを表示する
* サスペンド、再開、削除、アクティベートなどの基本的なライフサイクル操作をサポートする

## 前提条件

次の点を確認してください：

* エンドユーザーとカードが、 **D1 バックエンド**.
* に登録されていること **D1 SDK** がイシュアアプリケーションに統合され、初期化されていること。
* イシュアアプリケーションが D1 SDK のログインフローを完了していること。

エンドツーエンドのウォレット・トークン化フローについては、こちらを参照してください： [デジタルウォレットへの push 実装](/push-provisioning/ja/implement-push-provisioning/implement-push-to-digital-wallets.md).

## デジタルカードの表示

特定の既存のデジタルカードを表示するには `cardId`、次を呼び出します `getDigitalCardList()`.

レスポンスには `DigitalCard` オブジェクトの一覧が含まれます。Visa Cloud Token Framework（CTF）では、 `DigitalCard` オブジェクトにはデバイスバインディング情報も含まれ、アプリケーションが各デジタルカードに関連付けられたすべてのデバイスバインディングを表示できるようになります。

に登録されていること `DigitalCard` 次の情報が含まれます：

* デジタルカードの状態（例：アクティブ、サスペンド、アクティベーション保留）。
* デジタルカードの有効期限。
* デジタルカードの下4桁。
* デジタルカードを含むデバイス名と種類。
* トークンリクエスタ ID（`tokenRequestorID`).
* 選択したウォレットまたはトークンリクエスタ（例：Apple Pay、Google Pay、Samsung Pay、NFC Wallet）に対して、デジタルカードが現在のデバイス上にあるかどうか（`isOnCurrentDevice`）。
* デバイスバインディング一覧（Visa CTF では SDK 4.3.0 以降）。各バインド済みデバイスのバインディング参照、デバイス名、バインディング状態（APPROVED、DECLINED、または CHALLENGED）を含みます。

{% hint style="info" %}
決済ネットワークの制約により、トークンリクエスタ名とロゴを常にリアルタイムで取得できるとは限りません。

推奨事項として、ポートフォリオに関連する上位 5～10 件のトークンリクエスタ ID を特定し、エンドユーザー向けの表示名とロゴをイシュアアプリケーションにハードコードしてください。
{% endhint %}

### フロー

<figure><img src="/files/8e2e6fc250d18147d2ad9a27954cb0dac0df6251" alt="Flow for retrieving the digital card list"><figcaption><p>カードのデジタルカード一覧表示のハイレベルフロー。</p></figcaption></figure>

### シーケンス図

**前提条件**

* 消費者アカウントとカードが D1 に登録されている
* SDK が正しく初期化されている
* イシュアアプリが D1 SDK ログイン API を呼び出した

<figure><img src="/files/e07205c8d1cac1020c2ae484e6846d6cdbb77db4" alt="Example issuer application screen showing a list of digital cards"><figcaption><p>デジタルカード一覧表示のイシュアアプリケーション UI の例。</p></figcaption></figure>

### 例

{% tabs %}
{% tab title="Android" %}

```kotlin
fun getDigitalCardList(d1Task: D1Task, cardID: String) {
    val callback: D1Task.Callback<List<DigitalCard>> = object : D1Task.Callback<List<DigitalCard>> {

        override fun onSuccess(digitalCardList: List<DigitalCard>) {
            // サーバーからの digitalCardList オブジェクトを処理します。
            // たとえば、上のサンプル画像のように UI に表示します。
            for (digitalCard in digitalCardList) {
                val digitalCardID = digitalCard.cardID
                val digitalCardState = digitalCard.state // 現在のデジタルカードの状態。
                val digitalCardExp = digitalCard.expiryDate // 現在のデジタルカードの有効期限。
                val last4 = digitalCard.last4 // 現在のデジタルカードの下4桁。
                val tokenRequestorID = digitalCard.tokenRequestorID // トークンリクエスタ ID。
                val isOnCurrentDevice = digitalCard.isOnCurrentDevice // デジタルカードが現在のデバイス上にあるかを識別します。

                // デバイスバインディング一覧を取得します（Visa CTF では SDK 4.3.0 以降）。
                val deviceBindingList = digitalCard.deviceBindingList
                deviceBindingList?.forEach { binding ->
                    val bindingReference = binding.bindingReference // バインディング参照 ID。
                    val deviceName = binding.deviceName // デバイス名。
                    val bindingStatus = binding.bindingStatus // APPROVED、DECLINED、または CHALLENGED。
                }
            }
        }

        override fun onError(exception: D1Exception) {
            // D1 SDK 統合 – エラー管理のセクションを参照してください。
        }
    }
    d1Task.getDigitalCardList(cardID, callback)
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = "" // たとえばサーバーから取得します。
d1Task.digitalCardList(cardID) { digitalCards, error in
    if let error = error {
        // D1 SDK 統合 – エラー管理のセクションを参照してください。
    } else if let digitalCards = digitalCards {
        // 後続のフローに進みます。たとえば、UI を更新します。
        for digitalCard in digitalCards {
            print("デジタルカードID: \(digitalCard.cardID)")
            print("状態: \(digitalCard.state.rawValue)")
            print("下4桁: \(digitalCard.last4 ?? "")")
            print("有効期限: \(digitalCard.expiryDate ?? "")")
            print("デバイスID: \(digitalCard.deviceID ?? "")")
            print("デバイス名: \(digitalCard.deviceName ?? "")")
            print("デバイスタイプ: \(digitalCard.deviceType ?? "")")
            print("トークンリクエスタID: \(digitalCard.tokenRequestorID ?? "")")
            print("isOnCurrentDevice: \(digitalCard.isOnCurrentDevice)")

            // デバイスバインディング一覧を取得します（Visa CTF では SDK 4.3.0 以降）。
            if let deviceBindingList = digitalCard.deviceBindingList {
                for binding in deviceBindingList {
                    print("バインディング参照: \(binding.bindingReference ?? "")")
                    print("デバイス名: \(binding.deviceName ?? "")")
                    print("バインディング状態: \(binding.bindingStatus?.rawValue ?? "")")
                }
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

## デジタルカードを制御する

イシュアアプリケーションでは、エンドユーザーが各デジタルカードの状態を管理できるようにできます。

サポートされる操作は次のとおりです：

* **サスペンド** 現在の状態がアクティブのデジタルカード： `d1Task.updateDigitalCard(cardID, digitalCard, CardAction.SUSPEND, callback)`
* **再開** 現在の状態がサスペンドのデジタルカード： `d1Task.updateDigitalCard(cardID, digitalCard, CardAction.RESUME, callback)`
* **削除** デジタルカード： `d1Task.updateDigitalCard(cardID, digitalCard, CardAction.DELETE, callback)`
* **アクティベート** デジタルカード（例：追加認証後）： `d1PushWallet.activateDigitalCard(digitalCard.getCardID(), callback)`

### シーケンス図

**前提条件**

* 消費者アカウントとカードが D1 に登録されている
* SDK が正しく初期化されている
* イシュアアプリが D1 SDK ログイン API を呼び出した

<figure><img src="/files/b6b65c45a2c412704520557bf5fc10fac71bd7c7" alt="Example issuer application screen for controlling digital cards"><figcaption><p>デジタルカードの状態を制御するイシュアアプリケーション UI の例。</p></figcaption></figure>

### 例

{% tabs %}
{% tab title="Android" %}

```kotlin
//digitalCard: getDigitalCardList API から取得
fun controlDigitalCard(d1Task: D1Task, cardID: String, digitalCard: DigitalCard) {
    val callback: D1Task.Callback<Boolean> = object : D1Task.Callback<Boolean> {

        override fun onSuccess(isSuccess: Boolean) {
            if (isSuccess) {
                // デジタルカードの状態が正常に更新されました。
                // アプリケーションは UI を更新できます。
            } else {
                // デジタルカードの状態の更新に失敗しました。
            }
        }

        override fun onError(exception: D1Exception) {
            // D1 SDK 統合 – エラー管理のセクションを参照してください。
        }
    }

    // 現在のデジタルカードの状態が ACTIVE の場合
    d1Task.updateDigitalCard(cardID, digitalCard, CardAction.SUSPEND, callback)
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
let cardID = "" // 例：サーバーから取得
// 現在のデジタルカードの状態が ACTIVE の場合
// digitalCard は D1Task.digitalCardList API から取得
d1Task.updateDigitalCard(cardID, digitalCard: digitalCard, action: .suspend) { isSuccess, error in
    if let error = error {
        // D1 SDK 統合 – エラー管理のセクションを参照してください
    } else {
        if isSuccess {
            // 後続のフローに進みます。例：UI を更新
        } else {
            // 失敗の原因は、たとえばアクティブなカードをアクティブ状態に更新しようとしたなど、無効な状態である可能性があります
        }
    }
}
```

{% endtab %}
{% endtabs %}

D1 SDK を完全に利用するには、こちらを確認してください [API リファレンス](/push-provisioning/ja/integrate-the-d1-sdk/api-reference.md).


---

# 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/push-provisioning/ja/implement-push-provisioning/implement-view-and-control/view-and-control-digital-cards.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.
