> 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 のログインフローを完了していること。

エンドツーエンドのウォレット Tokenization フローについては、 [デジタルウォレットへのプッシュを実装する](/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`).
* デジタルカードが現在のデバイス上にあるかどうか（`isOnCurrentDevice`）選択したウォレットまたはトークンリクエスタ（例：Apple Pay、Google Pay、Samsung Pay、NFC Wallet）向け。
* デバイスバインディング一覧（Visa CTF では SDK 4.3.0 以降）。各バインド済みデバイスのバインディング参照、デバイス名、バインディング状態（APPROVED、DECLINED、またはCHALLENGED）を含みます。

{% hint style="info" %}
決済ネットワークの制限により、トークンリクエスタの名前とロゴをリアルタイムで取得できない場合があります。

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

### フロー

<figure><img src="https://1486457345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FsXRiOUdwP9CijaReNg98%2FFlow%20-%20View%20and%20control%20digital%20cards.svg?alt=media&amp;token=767b9ba3-a2b4-4e43-9a59-2a0319e60a76" alt="Flow for retrieving the digital card list"><figcaption><p>カードに対するデジタルカード一覧表示の概要フロー。</p></figcaption></figure>

### シーケンス図

**前提条件**

* 顧客アカウントとカードが D1 に登録済み
* SDK が適切に初期化されている
* イシュアアプリが D1 SDK のログイン API を呼び出した

<figure><img src="https://1486457345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FRXCFVj4LXOd76boLtZcz%2FSequence%20Diagram%20-%20View%20and%20control%20digital%20cards%20-%201.svg?alt=media&amp;token=1dd029d7-cb43-4d5b-a78c-50fb5851d649" 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 >= 4.5.0" %}

```swift
let cardID = "" // サーバーなどから取得
do {
    let service = try d1Task.digitalCardService()
    let digitalCards = try await service.digitalCardList(cardID)
    // 以降のフローに進みます。たとえば 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("トークンリクエスタ名: \(digitalCard.tokenRequestorName ?? "")")
        print("isOnCurrentDevice: \(digitalCard.isOnCurrentDevice)")
        
        // デバイスバインディング一覧にアクセスします（SDK 4.3.0 以降）
        if let deviceBindingList = digitalCard.deviceBindingList {
            for binding in deviceBindingList {
                print("バインディング参照: \(binding.bindingReference ?? "")")
                print("デバイス名: \(binding.deviceName ?? "")")
                print("バインディング状態: \(binding.bindingStatus?.rawValue ?? "")")
            }
        }
    }
} catch let d1Error as D1Error {
    // D1 SDK 統合 – エラー管理のセクションを参照してください
} catch let error {
    // その他のエラーを処理します
}
```

{% endtab %}

{% tab title="iOS < 4.5.0" %}

```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("TokenRequestorID: \(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="https://1486457345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2Fu3Mea0MB8w0pxAuZBSSR%2FSequence%20Diagram%20-%20View%20and%20control%20digital%20cards%20-%202.svg?alt=media&amp;token=4072871b-1044-4b29-8264-683f9661cb8d" 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 >= 4.5.0" %}

```swift
let cardID = "" // サーバーなどから取得
// デジタルカードの現在の状態が ACTIVE の場合
// digitalCard は D1Task.digitalCardList API から取得されます
do {
    let service = try d1Task.digitalCardService()
    try await service.updateDigitalCard(cardID, digitalCard: digitalCard, action: .suspend)
} catch let d1Error as D1Error {
    // D1 SDK 統合 – エラー管理のセクションを参照してください
} catch let error {
    // その他のエラーを処理します
}
```

{% endtab %}

{% tab title="iOS < 4.5.0" %}

```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, and the optional `goal` 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>&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.
