> 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/classic-push-provisioning/ja/ysuksu/tspnopusshupurobijoningu.md).

# TSP経由のプッシュプロビジョニング

Mastercard Token Connect（MDES Token Connect）は、Mastercardが提供するサービスです。イシュアはこれを使用して、カードをトークンリクエスタにプッシュします。

参加するには、トークンリクエスタはMastercardプログラムに準拠し、オンボーディングの詳細をTSPに提供する必要があります。これにより、TSPはカードを特定のトークンリクエスタにプッシュする方法を決定できます。

通常、これらのサービスは、イシュアが以下を実行できるAPIを公開します。

* プログラムに登録されているトークンリクエスタと、その利用可能なインターフェースの詳細（アプリケーション、Webサイト、または両方）をTSPに照会します。
* エンドユーザーがトークンリクエスタのインターフェース（Webサイトなど）を選択した後に、イシュアアプリケーションがカードをプッシュするために使用する、カード詳細でフォーマットされた適切なURIをTSPに照会します。

最後のステップ、つまりカードをトークンリクエスタにプッシュする処理は、イシュアアプリケーションの責任となります。

これらのAPIを使用するには、イシュアは決済ネットワークでプロジェクトを開始する必要があります。そうしない場合、決済ネットワークはAPIアクセスを許可しません。

Thales Push Provisioningソリューションには、MDES Token Connect APIが組み込まれています。これにより、イシュアはSDKを通じてイシュアアプリケーションから直接これらにアクセスできます。

> <i class="fa-info-circle">:info-circle:</i>
>
> #### 注記 <a href="#note" id="note"></a>
>
> MDES Token Connectプログラムに登録されているトークンリクエスタのみアクセス可能です。利用可否は地域によって異なります。お住まいの地域で利用可能なリストについては、VisaおよびMastercardの担当者にご確認ください。

以下のセクションで詳細を説明します。

1. Thales SDKを使用して、指定されたカードに適格なトークンリクエスタのリストをリクエストします。
2. 返されたリストからトークンリクエスタを選択し、Thales SDKを使用してカードのプッシュに使用するフォーマット済みURIをリクエストします。
3. 選択したトークンリクエスタにカードをプッシュします。

> <i class="fa-info-circle">:info-circle:</i>
>
> #### 注記 <a href="#note-1" id="note-1"></a>
>
> イシュアアプリケーションは、常に選択したトークンリクエスタのインターフェースにカードをプッシュします。

### 1. 適格なトークンリクエスタの取得 <a href="#id-1-getting-the-eligible-token-requestors" id="id-1-getting-the-eligible-token-requestors"></a>

イシュアアプリケーションは、Push Provisioning SDKを使用して、イシュアのカードおよび関連する決済スキームと互換性のあるトークンリクエスタのリストを取得します。

このフローを次の図に示します。

<figure><img src="https://3356216997-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC22AqJs7fn1cZC7pAaOE%2Fuploads%2Fi9V8rOC2CXjB9vMO7Mqw%2F076f85b2-f31d-4567-b1d4-357319969689.png?alt=media&amp;token=4c251f8d-a391-4419-a53c-6f4ca50c8a8d" alt=""><figcaption><p>カードに適格なトークンリクエスタを取得します。</p></figcaption></figure>

* ステップ1および2：イシュアは、以下に従って暗号化されたカード詳細を構築します。 [形式](/classic-push-provisioning/ja/gaido/dtato.md) Push Provisioning SDKで想定される形式。
* ステップ3：イシュアアプリケーションは、以下を通じてSDKを呼び出します。 `getEligibleTokenRequestors` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/TSHProxy.html#getEligibleTokenRequestors\(java.lang.String,java.lang.String,java.lang.String,com.thalesgroup.tpcsdk.manager.listener.TPCSDKListener\))/[iOS](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/ios/latest/Classes/TPCSDK.html#/c:@M@TPCSDKSwift@objc\(cs\)TPCSDK\(cm\)getEligibleTokenRequestorWithCard:publicKeyIdentifier:completion:)）にカード詳細を指定します。
* ステップ4：Thalesバックエンドは、適格なトークンリクエスタをリクエストするためにTSP（VTSまたはMDES）を呼び出します。
* ステップ5：リストがイシュアのモバイルアプリケーションに返されます。
* ステップ6：イシュアのモバイルアプリケーションは各トークンリクエスタの詳細を取得してエンドユーザーに表示し、選択できるようにします。

> <i class="fa-info-circle">:info-circle:</i>
>
> #### 注記 <a href="#note-2" id="note-2"></a>
>
> * 図のステップ6は、エンドユーザーとの対話の例を示しています。
> * 全体的なUXは、このドキュメントの対象外です。
> * イシュアは、エンドユーザーに表示するトークンリクエスタを自由にフィルタリングできます。
> * 利用可能なトークンリクエスタが数十件に及ぶ可能性があるため、アプリケーションは項目の表示を管理する必要があります。

次のコードスニペットは、適格なトークンリクエスタのリストをリクエストする方法を示しています。

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

```swift
let scheme = "MASTERCARD"
let payload = "PKCS7で暗号化されたPAN"

let card = FundingCard(schemeString: scheme,
                        encryptedPayload: payload)

let publicKeyId = "id"

TPCSDK.getEligibleTokenRequestor(card: card,
                                  publicKeyIdentifier: publicKeyId) { (tokenRequestorList, error) in
    if let error = error {
        // TPCErrorを処理
    } else {
        let tokenRequestor = tokenRequestorList?.first
        let pushMethod = tokenRequestor?.pushMethods?.first
        let pushHandler = pushMethod?.pushHandler // プッシュプロビジョニング用
    }
}
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
NSString *scheme = @"MASTERCARD";
NSString * payload = @"PKCS7で暗号化されたPAN";

FundingCard * card = [[FundingCard alloc] initWithSchemeString:scheme
                                              encryptedPayload:payload
                                      primaryAccountIdentifier:nil];

NSString * publicKeyId = @"id";

[TPCSDK getEligibleTokenRequestorWithCard:card
                      publicKeyIdentifier:publicKeyId
                                completion:^(NSArray<TokenRequestor *> * _Nullable tokenRequestorList, NSError * _Nullable error) {
    if (error != nil) {
        // TPCErrorを処理
    } else {
        TokenRequestor *tokenRequestor = tokenRequestorList[0];
        PushMethod *pushMethod = [tokenRequestor pushMethods][0];
        NSString *pushHandler = pushMethod.pushHandler;
    }
}];
```

{% endtab %}

{% tab title="Android" %}

```java
Config config = new Config();
config.setActivity(activity);
config.setIssuerId(ISSUERID);
// Push Provisioning SDK V2.0.0以降、OEMPayType.NONEはサポートされなくなりました。 
// OEM Walletのプロビジョニングを実行する場合にのみOEMPayTypeを設定します。それ以外の場合はOEMタイプを未設定のままにします。
config.setUrl(envUrl);

TPCManager.getInstance().config(config, listener);
TPCManager.getInstance().getTSHProxy().getEligibleTokenRequestors(cardScheme, 
                                                                  encryptedPayload, 
                                                                  publicKeyId, 
                                                                  new TPCSDKListener<TokenRequestor[]>() {
    @Override
    public void onStart() {

    }

    @Override
    public void onSuccess(TPCResult<TokenRequestor[]> tpcResult) {
        TokenRequestor[] tokenRequestors = tpcResult.getResult();
        String pushHandler = tokenRequestors[0].getPushMethods()[0].getPushHandler(); // プッシュプロビジョニング用
    }

    @Override
    public void onError(TPCSDKException exception) {
        listener.onError(exception);
    }
});
```

{% endtab %}
{% endtabs %}

#### アセットを取得 <a href="#get-asset" id="get-asset"></a>

TPC SDKを使用すると、イシュアアプリケーションは、以下から返される文字列を使用してトークンリクエスタのロゴ画像を取得できます。 `getEligibleTokenRequestor` API。

Visaスキームでは、トークンリクエスタのロゴ画像はURLとして返され、モバイルアプリケーションが直接取得する必要があります。

Mastercardスキームでは、ロゴ画像は次の形式で返されます。 `logoId`。ロゴを取得するには、以下を呼び出します。 `getAsset` API。

<figure><img src="https://3356216997-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC22AqJs7fn1cZC7pAaOE%2Fuploads%2FpHiGTvVbODO3HHi8rEwY%2Fa7eb6cd2-d8d0-4d57-97cf-34eb2c913f75.png?alt=media&amp;token=b8b0f831-4dd4-4672-8e06-2ed33bae6556" alt=""><figcaption><p>トークンリクエスタのロゴを取得します（Mastercardのみ）。</p></figcaption></figure>

**トークンリクエスタのロゴの取得**

> <i class="fa-info-circle">:info-circle:</i>
>
> #### 注記 <a href="#note-3" id="note-3"></a>
>
> これはMastercardスキームでのみ利用できます。

アプリケーションはトークンリクエスタのリストを取得した後、トークンリクエスタのロゴ画像の取得をリクエストできます。

次のコードスニペットは、TPC SDKを介してトークンリクエスタのロゴ画像を取得する例を示しています。

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

```swift
func getTokenRequestorWithAssetId(id: String) {
    TPCSDK.getTokenRequestorAsset(assetId: id) {
      (tokenRequestorAsset, error) in
    }
  }
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c

- (void) getTokenRequestorWithAssetId: (NSString *) id {
  [TPCSDK getTokenRequestorAssetWithAssetId:id
                                 completion:^(NSArray<TokenRequestorAsset *> * _Nullable tokenRequestorAsset, NSError * _Nullable error) {
  }];
}
```

{% endtab %}

{% tab title="Android" %}

```java


try {
    TPCManager.getInstance().getTSHProxy().getAsset(assetId,
 	   new TPCSDKListener<MediaData[]>() {
        @Override
        public void onStart() {
            // 何もしない
        }

        @Override
        public void onSuccess(TPCResult<MediaData[]> result) {                
		    		MediaData[] mediaData = result.getResult();
            Log.d("TAG", "アセット取得リクエストが成功しました"); 
        }

        @Override
        public void onError(TPCSDKException exception) {
            Log.e("TAG", "アセット取得リクエストが失敗しました");
        }
      });
} catch (TPCSDKException exception) {
    Log.e("TAG", "TSHProxy例外 " +exception.getMessage());
}
```

{% endtab %}
{% endtabs %}

### 2. トークンリクエスタの選択 <a href="#id-2-selecting-the-token-requestor" id="id-2-selecting-the-token-requestor"></a>

以下によって返される各要素は、 `getEligibleTokenRequestors` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/TSHProxy.html#getEligibleTokenRequestors\(java.lang.String,java.lang.String,java.lang.String,com.thalesgroup.tpcsdk.manager.listener.TPCSDKListener\))/[iOS](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/ios/latest/Classes/TPCSDK.html#/c:@M@TPCSDKSwift@objc\(cs\)TPCSDK\(cm\)getEligibleTokenRequestorWithCard:publicKeyIdentifier:completion:)）は、カードをプッシュできる候補のトークンリクエスタです。

A `TokenRequestor` オブジェクトには次のプロパティがあります。

* `id`：トークンリクエスタごとに一意で、スキームによって生成されるトークンリクエスタID（TRID）。
* `name`：表示するトークンリクエスタの名前。
* `logo`：トークンリクエスタに関連付けられた表示可能なアイコン。
  * Mastercardの場合、これは以下を通じてアクセスできます。 `logoId` および `getAsset` API。
* `pushMethods`：このオブジェクトは、指定されたトークンリクエスタに接続するために使用できるメソッドの配列です。配列の各要素には2つのプロパティがあります。
  * `platformType`：トークンリクエスタアプリケーションが利用可能なプラットフォームを示します。 `ANDROID`, `IOS`、または `WEB`.
  * `pushHandler`：トークンリクエスタへのプッシュリクエストの管理方法に関する情報を含みます。各 `platformType`には、 `pushHandler` があり、トークンリクエスタを呼び出すために使用できるよう、カード詳細でフォーマットされたURIをTSPにリクエストするために使用されます。

トークンリクエスタには複数のインターフェースからアクセスできる場合があるため、以下に十分注意してください。 `pushMethods`:

* アプリケーションインターフェース（ `platformType=ANDROID` または `platformType=IOS`)
* Webサイトインターフェース（ `platformType=WEB`)

アプリケーションインターフェースの場合、イシュアアプリケーションはトークンリクエスタアプリケーションと対話します。

> <i class="fa-exclamation-circle">:exclamation-circle:</i>
>
> #### 警告 <a href="#warning" id="warning"></a>
>
> トークンリクエスタアプリケーションがインストールされていない場合、イシュアアプリケーションは次のケースを処理する必要があります。
>
> * Androidでは、 `ANDROID`, [ActivityNotFoundException](https://developer.android.com/reference/android/content/ActivityNotFoundException) は、以下を呼び出す際に処理する必要があります。 [startActivity](https://developer.android.com/reference/android/content/Context#startActivity\(android.content.Intent\)) メソッド。
> * Androidでは、 `IOS`iOSでは、イシュアアプリケーションは以下を使用してURLが利用可能かどうかを確認する必要があります。 [canOpenURL](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl) API。
>
> トークンリクエスタアプリケーションがインストールされているかどうかの検証は、Thales SDKの対象範囲外です。トークンリクエスタは、オンボーディング時にURIをTSPに提供する必要があります。

Webサイトインターフェースの場合、イシュアアプリケーションはトークンリクエスタのWebサイトと対話する必要があります。

> <i class="fa-info-circle">:info-circle:</i>
>
> #### 推奨事項 <a href="#recommendation" id="recommendation"></a>
>
> シームレスなエクスペリエンスのために、以下をサポートしてください。 `platformType=WEB`。外部アプリケーションにリダイレクトする代わりに、イシュアアプリケーション内のWebViewでフローを処理します。

### 3. カードのプッシュ <a href="#id-3-pushing-the-card" id="id-3-pushing-the-card"></a>

選択したトークンリクエスタにカードをプッシュするには、正しくフォーマットされたカード詳細でトークンリクエスタをトリガーするURIが必要です。このURIをTSPに照会します。

このフローを次の図に示します。

<figure><img src="https://3356216997-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC22AqJs7fn1cZC7pAaOE%2Fuploads%2FfMWt4U6pkZRGWkTarVWO%2F9706503d-ffb0-4a00-a8a0-40c8db1bc71d.png?alt=media&amp;token=5aa25884-b613-4e3a-b103-dc3adba4190d" alt=""><figcaption><p>TSPからプッシュURIをリクエストします。</p></figcaption></figure>

* ステップ1：エンドユーザーがトークンリクエスタを選択します。
* ステップ2：イシュアアプリケーションは次を取得します。 `pushHandler` プロパティを、 `TokenRequestor` オブジェクトから取得し、以下を通じてSDKを呼び出します。 `addCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/TSHProxy.html#addCard\(com.thalesgroup.tpcsdk.model.CardInfo,java.lang.String,boolean,com.thalesgroup.tpcsdk.model.CallbackObject,java.lang.String,com.thalesgroup.tpcsdk.manager.listener.TPCSDKListener\))/[iOS](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/ios/latest/Classes/TPCSDK.html#/c:@M@TPCSDKSwift@objc\(cs\)TPCSDK\(cm\)schemePushProvisionWithCard:publicKeyIdentifier:authorizationCode:termsAndConditionsAccepted:callbackUrl:callbackType:pushHandler:completion:)）API。
* ステップ3：SDKはバックエンドと対話してプッシュプロビジョニングをリクエストします。
* ステップ4：Thalesバックエンドは、リクエストが認可されているかどうかを確認します。
* ステップ5：Thalesバックエンドは、TSPを通じてペイロードをリクエストし、プッシュURLを生成します。
* ステップ6：SDKはプッシュURLをイシュアアプリケーションに返します。
* ステップ7：イシュアアプリケーションはプッシュURLを呼び出してトークンリクエスタを起動します。

> <i class="fa-info-circle">:info-circle:</i>
>
> #### 注記 <a href="#note-4" id="note-4"></a>
>
> URIは以下に依存します。 `platformType`. `pushHandler` インターフェースがアプリケーションかWebサイトかによって変わります。

図に示されているその他のパラメータについては、

* The `authorizationCode` は、リクエストの送信許可を付与するために必要です。これは以下に準拠している必要があります。 [形式およびアルゴリズム](/classic-push-provisioning/ja/gaido/dtato/kdojwt.md).
* コールバックURLにより、トークンリクエスタはフローの終了時にイシュアアプリケーションを呼び出すことができます。これはディープリンク機構を使用して設定する必要があります。

> <i class="fa-info-circle">:info-circle:</i>
>
> **ディープリンクURLの設定**
>
> * [Android](https://developer.android.com/training/app-links/deep-linking)
> * [iOS](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app)

次のサンプルコードは、SDKを通じてTSPからURIを取得する方法を示しています。

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

```swift
let scheme = "MASTERCARD"
let payload = "3080xxx"

let card = FundingCard(schemeString: scheme,
                    encryptedPayload: payload)

let publicKeyId = "id"
let code = "code"
let callbackUrl = "tpcsdk://com.thalesgroup.tpc.demo/tokenRequestorsPage"
let base64EncodedCallbackUrl = callbackUrl.data(using: .utf8)!.base64EncodedString()
let callbackType = "IOS"

// この値はTPCSDK.getEligibleTokenRequestorから取得できます
// Click to Payの場合、MasterCard tokenRequestor.id属性値は50123197928です。
let pushHandler = "handler"

TPCSDK.schemePushProvision(card: card,
                            publicKeyIdentifier: publicKeyId,
                            authorizationCode: code,
                            termsAndConditionsAccepted: true,
                            callbackUrl: base64EncodedCallbackUrl,
                            callbackType: callbackType,
                            pushHandler: pushHandler) { (pushUrl, error) in
    if let error = error {
        // TPCエラーを処理
    } else if let pushUrl = pushUrl {
        // トークンリクエスタアプリを起動
        let url = URL(string: pushUrl)!
        if UIApplication.shared.canOpenURL(provisionURL) {
          UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
          // アプリケーションがインストールされていないことを示すエラーを表示
        }
    }
}
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c

NSString *scheme = @"MASTERCARD";
NSString * payload = @"PKCS7で暗号化されたPAN";

FundingCard * card = [[FundingCard alloc] initWithSchemeString:scheme
                                              encryptedPayload:payload
                                      primaryAccountIdentifier:nil];

NSString * publicKeyId = @"id";
NSString * code = @"code";
NSString * callbackUrl = @"tpcsdk://com.thalesgroup.tpc.demo/tokenRequestorsPage";
NSString * base64EncodedCallbackUrl = [[NSString alloc] initWithData:[[callbackUrl dataUsingEncoding:NSUTF8StringEncoding] base64EncodedDataWithOptions:NSDataBase64EncodingEndLineWithLineFeed] encoding:NSUTF8StringEncoding];
NSString * callbackType = @"IOS";

// この値はTPCSDK.getEligibleTokenRequestorから取得できます
// Click to Payの場合、MasterCard tokenRequestor.id属性値は50123197928です。
NSString * pushHandler = @"handler";

[TPCSDK schemePushProvisionWithCard:card
                publicKeyIdentifier:publicKeyId
                  authorizationCode:code
          termsAndConditionsAccepted:TRUE
                        callbackUrl:base64EncodedCallbackUrl
                        callbackType:callbackType
                        pushHandler:pushHandler
                          completion:^(NSString * _Nullable pushUrl, NSError * _Nullable error) {
    if (error != nil) {
        // TPCErrorを処理
    } else {
        // トークンリクエスタアプリを起動
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:pushUrl] options:@{} completionHandler:nil];
    }
}];
```

{% endtab %}

{% tab title="Android" %}

```java


CardInfo cardInfo = new CardInfo();
cardInfo.setScheme("MASTERCARD");
cardInfo.setEncryptedPayload(encryptedPayload);
cardInfo.setAuthorizationCode(authorizationCode);

CallbackObject callback = new CallbackObject();
String callbackUrl = "tpcsdk://com.thalesgroup.tpc.demo/tokenRequestorsPage";
String callbackUrlInBase64 = Base64.encodeToString(callbackUrl.getBytes(), Base64.NO_WRAP | Base64.URL_SAFE);
callback.setUrl(callbackUrlInBase64);
callback.setType("ANDROID");

String publicKeyId = "id";
boolean tcsAccepted = true;

// この値はTPCSDK.getEligibleTokenRequestorから取得できます
// Click to Payの場合、MasterCard tokenRequestor.id属性値は50123197928です。
String pushHandler = "handler";

TPCManager.getInstance().getTSHProxy().addCard(cardInfo, 
                                               publicKeyId, 
                                               tcsAccepted, 
                                               callback, 
                                               pushHandler, 
                                               new TPCSDKListener<String>() {
    @Override
    public void onStart() {

    }

    @Override
    public void onSuccess(TPCResult<String> result) {
        String pushUrl = result.getResult();

        // トークンリクエスタアプリケーションを起動
        try {
          getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(pushUrl)));
        } catch (ActivityNotFoundException e) {
          // アクションを処理できるActivityがありません
        }
    }

    @Override
    public void onError(TPCSDKException exception) {
        // プッシュプロビジョニングでエラーがないか確認
    }
});
```

{% endtab %}
{% endtabs %}

次の図は、イシュアアプリケーションがトークンリクエスタアプリケーションにカードをプッシュする一般的なフローを示しています。

<figure><img src="https://3356216997-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC22AqJs7fn1cZC7pAaOE%2Fuploads%2Fct9mTYbQte1tfPc8KJYV%2Fb212d08b-6c80-412f-af17-f37d5749b1ab.png?alt=media&amp;token=cbbc6406-a167-46fc-9520-fa9781f46f27" alt=""><figcaption><p>トークンリクエスタを使用した一般的なプッシュプロビジョニングフロー。</p></figcaption></figure>

フローの最初の部分は、イシュアアプリケーションのみが関与します。

ステップ3で、イシュアアプリケーションは以下から返されたリストを使用します。 `getEligibleTokenRequestors` API（[Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/TSHProxy.html#getEligibleTokenRequestors\(java.lang.String,java.lang.String,java.lang.String,com.thalesgroup.tpcsdk.manager.listener.TPCSDKListener\))/[iOS](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/ios/latest/Classes/TPCSDK.html#/c:@M@TPCSDKSwift@objc\(cs\)TPCSDK\(cm\)getEligibleTokenRequestorWithCard:publicKeyIdentifier:completion:)）を使用して、エンドユーザーに表示するインターフェースを構築します。

エンドユーザーがステップ4でカードをプッシュすることを確認したとき（またはステップ3での選択直後）、イシュアアプリケーションは以下を使用してSDKを呼び出します。 `addCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/TSHProxy.html#addCard\(com.thalesgroup.tpcsdk.model.CardInfo,java.lang.String,boolean,com.thalesgroup.tpcsdk.model.CallbackObject,java.lang.String,com.thalesgroup.tpcsdk.manager.listener.TPCSDKListener\))/[iOS](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/ios/latest/Classes/TPCSDK.html#/c:@M@TPCSDKSwift@objc\(cs\)TPCSDK\(cm\)schemePushProvisionWithCard:publicKeyIdentifier:authorizationCode:termsAndConditionsAccepted:callbackUrl:callbackType:pushHandler:completion:)）により、SDKはカードのプッシュに使用するURIをTSPに照会できます。

<figure><img src="https://3356216997-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC22AqJs7fn1cZC7pAaOE%2Fuploads%2FWOdwXT1V9BD3ORB6BqLz%2F1b2f7add-ffe0-435a-a6af-6ca4882288a9.png?alt=media&amp;token=ee4aa964-cb82-450a-a952-cf03eafe9b09" alt=""><figcaption><p>トークンリクエスタを起動してカードをプッシュします。</p></figcaption></figure>

ステップ4でURIが返されると、イシュアアプリケーションはそのURIを使用してカードをトークンリクエスタにプッシュします。

トークンリクエスタはステップ5で制御を引き継ぎ、トークン化フローをエンドユーザーに案内するための複数のポップアップが表示されます。

この時点で、トークンリクエスタアプリケーションが完全に制御します。ステップ6および7に示すように、カードのデジタル化をリクエストするためにTSPと対話します。

デジタル化が完了すると、エンドユーザーはステップ7に示すように続行できます。トークンリクエスタが以下で提供されるコールバックURLを使用する場合、制御をイシュアアプリケーションに戻すことができます。 `addCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/TSHProxy.html#addCard\(com.thalesgroup.tpcsdk.model.CardInfo,java.lang.String,boolean,com.thalesgroup.tpcsdk.model.CallbackObject,java.lang.String,com.thalesgroup.tpcsdk.manager.listener.TPCSDKListener\))/[iOS](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/ios/latest/Classes/TPCSDK.html#/c:@M@TPCSDKSwift@objc\(cs\)TPCSDK\(cm\)schemePushProvisionWithCard:publicKeyIdentifier:authorizationCode:termsAndConditionsAccepted:callbackUrl:callbackType:pushHandler:completion:)）API。

<br>


---

# 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/classic-push-provisioning/ja/ysuksu/tspnopusshupurobijoningu.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.
