> 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-push-to-digital-wallets/push-to-the-digital-wallet.md).

# デジタルウォレットにプッシュ

## デジタルウォレットにプッシュ

このガイドでは、D1 SDK を使用して、イシュアアプリケーションからデジタルウォレットアプリケーションにカードをプッシュする方法を説明します。サポートされるウォレットアプリケーションは、Google Pay、Samsung Pay、Apple Pay です。

エンドユーザーが次をタップしたときに、この API を呼び出します **ウォレットに追加** かつカードのデジタイゼーション状態が `NOT_DIGITIZED`です。状態を取得するには、次を参照してください [カードのデジタイゼーション状態を取得する](/push-provisioning/ja/implement-push-provisioning/implement-push-to-digital-wallets/get-the-card-digitization-state.md).

### 概要

イシュアアプリケーションは D1 SDK の `addDigitalCardToOEM()` API を呼び出して、プッシュプロビジョニングフローを開始します。D1 SDK と D1 バックエンドは次を行います。

* D1 に保存されているエンドユーザーおよびカードデータを検証します。
* ウォレットアプリケーションおよび TSP に必要なペイロードを準備します。
* ウォレットアプリケーションを呼び出してトークン化を開始します。
* 結果を返して、イシュアアプリケーションが UI を更新できるようにします。

{% hint style="info" %}

* 呼び出すのは `addDigitalCardToOEM()` D1 SDK が次を返した後のみにしてください `NOT_DIGITIZED` から `getCardDigitizationState()`.
* Android の Google Pay では、次を実装する必要があります `onActivityResult` これにより、ウォレットの結果が D1 SDK に返送されます。
* 2024 年 6 月 10 日以降、 [Google Wallet](https://developers.google.com/wallet/docs/release-notes?utm_source=chatgpt.com#June_04_2024) には Android 9 以降が必要です。
  {% endhint %}

{% hint style="warning" %}

* D1 SDK 4.5.0 以降、SDK は Google Unified Push Provisioning（UPP）、コバッジカードのプロビジョニング、および Bounce Provisioning をサポートします。
* UPP を使用すると、イシュアアプリケーションからトークン化が開始された際に、エンドユーザーの FPAN をオンライン決済用として Google アカウントに保存できます。
* 対象となるコバッジカードは、国際および国内の決済スキーム用に個別のトークンを使用して Google Wallet に追加できます。
* Bounce Provisioning は、エンドユーザーを Google Wallet からイシュアアプリケーションのプッシュプロビジョニングフローにリダイレクトします。有効にするには、次を設定します `options` を `1` で `addDigitalCardToOEM()` に設定します。詳細については、次のセクションを確認してください [Google Wallet の Bounce Provisioning](/push-provisioning/ja/implement-push-provisioning/implement-push-to-digital-wallets/google-wallet-bounce-provisioning.md).
* これらの機能は、物理的な Android スマートフォンでのみサポートされます。
  {% endhint %}

### フロー

<figure><img src="https://1486457345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FR1nYY9n0Q43IruIuDZfZ%2FFlow%20-%20%20Push%20to%20the%20digital%20wallet.svg?alt=media&amp;token=3007243c-1e03-40da-bd6b-3247d2a3e2a2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1486457345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWDlYTPaq4dNHuiWtf8ux%2Fuploads%2FvB0wAgAIlF7be9chbsVS%2FFlow%20-%20%20Push%20to%20the%20digital%20wallet%20-%202.svg?alt=media&amp;token=b1f1187c-dc2f-486d-8b3a-02aa94d06105" alt=""><figcaption></figcaption></figure>

#### シーケンス図

**前提条件**

* エンドユーザーとカードが D1 に登録されています。
* 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%2Fgit-blob-023a95e364ff873ee5df368730eb7f29de3ddc7f%2FSequence%20Diagram%20-%20%20Push%20to%20the%20digital%20wallet.svg?alt=media" alt="High-level sequence for pushing a card to a digital wallet"><figcaption><p>D1 SDK を使用してイシュアアプリケーションからデジタルウォレットへカードをプッシュする際の大まかなシーケンス。</p></figcaption></figure>

### プラットフォーム統合

{% tabs %}
{% tab title="And>4.4.0" %}

```kotlin
fun addDigitalCardToOEM(
    d1Task: D1Task,
    cardID: String,
    wallet: OEMPayType,
    options: Int, // SDK 4.5.0 以降、Bounce Provisioning を有効にするには options を「1」に設定します。他のすべての整数値は無視されます。
    activity: FragmentActivity
) {
    activity.lifecycleScope.launch {
        try {
            val result = d1Task.pushProvisioningService.addDigitalCardToOEM(
                cardID,
                wallet,
                activity,
                options
            ).await()
            if (result is GoogleCardSavedStatusResult) {
                val googlePayStatusCode = result.statusCode
                val cardSaved = result.isSaved

                // トラブルシューティングには Google Pay のステータスを使用します。
                // cardSaved を使用してイシュアアプリケーションの UI を更新します。
                // この結果を使用してトークン化の結果を判断しないでください。
            } else {
                // Samsung Pay は null の結果で正常に完了します。
            }
        } catch (exception: D1Exception) {
            val cardSavedResult = exception.additionalData as? GoogleCardSavedStatusResult
            if (cardSavedResult != null) {
                val googlePayStatusCode = cardSavedResult.statusCode
                val cardSaved = cardSavedResult.isSaved

                // Google Pay はエラーとともにカード保存ステータス情報を返す場合があります。
                // トラブルシューティングおよびイシュアアプリケーションの UI 処理に使用します。
                // この結果を使用してトークン化の結果を判断しないでください。
            }
            // D1 SDK 統合の「エラー管理」セクションを参照してください
        }
    }
}

// 注: すべてのコールバックイベントを SDK に転送するために、`onActivityResult` メソッドを実装してください。

// Activity Result: `onActivityResult` メソッドは GPay SDK からイシュアアプリで受信され、結果を処理するために D1 SDK に渡されます。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    d1Task.handleCardResult(requestCode, resultCode, data);
}
```

{% endtab %}

{% tab title="And=4.4.0" %}

```kotlin
fun addDigitalCardToOEM(
    d1Task: D1Task,
    cardID: String,
    wallet: OEMPayType,
    options: Int,
    activity: FragmentActivity
) {
    activity.lifecycleScope.launch {
        try {
            val result = d1Task.pushProvisioningService.addDigitalCardToOEM(
                cardID,
                wallet,
                activity,
                options
            ).await()
            // 成功
        } catch (exception: D1Exception) {
            // D1 SDK 統合の「エラー管理」セクションを参照してください
        }
    }
}

// 注: すべてのコールバックイベントを SDK に転送するために、`onActivityResult` メソッドを実装してください。

// Activity Result: `onActivityResult` メソッドは GPay SDK からイシュアアプリで受信され、結果を処理するために D1 SDK に渡されます。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    d1Task.handleCardResult(requestCode, resultCode, data);
}
```

{% endtab %}

{% tab title="And<4.4.0" %}
Android v4.3.0 以前では、次を使用します `D1PushWallet.addDigitalCardToOEM()`.

```kotlin
//activity: OEM プッシュプロビジョニング用の現在のアクティビティ。
//cardID: 受け取ったカード ID。
fun pushCardToWallet_v2_4_0(d1Task: D1Task, cardID: String, activity: Activity) {
    val wallet = OEMPayType.GOOGLE_PAY //GOOGLE_PAY、SAMSUNG_PAY、NONE
    val callback: D1Task.Callback<Any?> = object : D1Task.Callback<Any?> {

        override fun onSuccess(data: Any?) {
            // プロビジョニング成功時の処理
        }

        override fun onError(exception: D1Exception) {
            // D1 SDK 統合の「エラー管理」セクションを参照してください。
        }
    }
    val d1PushWallet : D1PushWallet = d1Task.d1PushWallet
    d1PushWallet.addDigitalCardToOEM(cardID, wallet, activity, callback)
}

// 注: すべてのコールバックイベントを SDK に転送するために、`onActivityResult` メソッドを実装してください。

// Activity Result: `onActivityResult` メソッドは GPay SDK からイシュアアプリで受信され、結果を処理するために D1 SDK に渡されます。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    d1Task.handleCardResult(requestCode, resultCode, data);
}
```

{% endtab %}

{% tab title="iOS >= 4.4.0" %}

```swift
let cardID = "" // 例: サーバーから取得
let viewController = UIViewController() // Apple Pay UI の表示元となるページ
do {
    let service = try d1Task.pushProvisioningService()
    try await service.addDigitalCardToOEM(cardID, viewController: viewController)
    // 後続のフローを続行します（例: UI を更新）
} catch let d1Error as D1Error {
    // D1 SDK 統合の「エラー管理」セクションを参照してください
} catch let error {
    // その他のエラーを処理
}
```

{% endtab %}

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

```swift
let cardID = "" // 例として、イシュアアプリケーションがバックエンドから取得
let viewController = /* Apple Pay UI を表示する現在の UIViewController インスタンス */

d1Task.addDigitalCardToOEM(cardID, viewController: viewController) { error in
    if let error = error {
        // D1 SDK 統合のエラー管理セクションを参照してください
    } else {
        // UI を更新します。例: カードが Apple Wallet に追加されたことを確認します
    }
}
```

{% 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-push-to-digital-wallets/push-to-the-digital-wallet.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.
