> 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/es/casos-de-uso/aprovisionamiento-push-a-traves-de-tsp.md).

# Aprovisionamiento push a través de TSP

Mastercard Token Connect (MDES Token Connect) es un servicio proporcionado por Mastercard. Los emisores lo usan para enviar tarjetas a los solicitantes de tokens.

Para participar, los solicitantes de tokens deben cumplir con el programa de Mastercard y proporcionar detalles de incorporación a los TSP. Esto permite que el TSP determine cómo se puede enviar una tarjeta a un solicitante de tokens determinado.

Normalmente, estos servicios exponen una API que permite a los emisores:

* Consultar a los TSP los solicitantes de tokens registrados en el programa y los detalles de interfaz disponibles (una aplicación, un sitio web o ambos).
* Consultar a los TSP la URI apropiada (formateada con los datos de la tarjeta) que la aplicación del emisor utiliza para enviar la tarjeta, después de que el usuario final seleccione una interfaz de solicitante de tokens (por ejemplo, un sitio web).

El último paso —enviar la tarjeta al solicitante de tokens— sigue siendo responsabilidad de la aplicación del emisor.

Para usar estas API, los emisores deben abrir un proyecto con las redes de pago. De lo contrario, las redes de pago no permitirán el acceso a la API.

La solución Push Provisioning de Thales integra las API MDES Token Connect. Esto permite a los emisores acceder a ellas directamente desde la aplicación del emisor a través del SDK.

> <i class="fa-info-circle">:info-circle:</i>
>
> #### Nota <a href="#note" id="note"></a>
>
> Solo son accesibles los solicitantes de tokens registrados en los programas MDES Token Connect. La disponibilidad varía según la región. Para la lista disponible en su región, consulte con sus contactos de Visa y Mastercard.

Las secciones siguientes proporcionan los detalles:

1. Use el SDK de Thales para solicitar la lista de solicitantes de tokens elegibles para una tarjeta dada.
2. Seleccione un solicitante de tokens de la lista devuelta y use el SDK de Thales para solicitar la URI formateada que se usa para enviar la tarjeta.
3. Envíe la tarjeta al solicitante de tokens seleccionado.

> <i class="fa-info-circle">:info-circle:</i>
>
> #### Nota <a href="#note-1" id="note-1"></a>
>
> La aplicación del emisor siempre envía la tarjeta a la interfaz del solicitante de tokens seleccionada.

### 1. Obtención de los solicitantes de tokens elegibles <a href="#id-1-getting-the-eligible-token-requestors" id="id-1-getting-the-eligible-token-requestors"></a>

La aplicación del emisor utiliza el SDK de Push Provisioning para obtener una lista de solicitantes de tokens que son compatibles con las tarjetas del emisor y los esquemas de pago asociados.

Este flujo se muestra en la figura siguiente:

<figure><img src="/files/7bbbc23d8c3cd1ea129507196172cbb4b63e81ca" alt=""><figcaption><p>Obtener solicitantes de tokens elegibles para una tarjeta.</p></figcaption></figure>

* Pasos 1 y 2: El emisor construye los detalles de la tarjeta cifrados de acuerdo con el [formato](/classic-push-provisioning/es/guia-del-desarrollador/cifrado-y-autenticacion-de-datos.md) esperado por el SDK de Push Provisioning.
* Paso 3: La aplicación del emisor llama al SDK a través del `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:)) con los datos de la tarjeta.
* Paso 4: El backend de Thales llama al TSP (VTS o MDES) para solicitar los solicitantes de tokens elegibles.
* Paso 5: La lista se devuelve a la aplicación móvil del emisor.
* Paso 6: La aplicación móvil del emisor obtiene los detalles de cada solicitante de tokens y los muestra al usuario final para que pueda efectuar una selección.

> <i class="fa-info-circle">:info-circle:</i>
>
> #### Nota <a href="#note-2" id="note-2"></a>
>
> * El paso 6 en la figura muestra una posible interacción con el usuario final.
> * La experiencia de usuario general queda fuera del alcance de este documento.
> * El emisor es libre de filtrar los solicitantes de tokens que son visibles para el usuario final.
> * Dado que puede haber muchas docenas de solicitantes de tokens disponibles, la aplicación debe gestionar la visibilidad de los elementos.

El fragmento de código siguiente muestra cómo solicitar la lista de solicitantes de tokens elegibles:

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

```swift
let scheme = "MASTERCARD"
let payload = "PAN cifrado PKCS7"

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

let publicKeyId = "id"

TPCSDK.getEligibleTokenRequestor(card: card,
                                  publicKeyIdentifier: publicKeyId) { (tokenRequestorList, error) in
    if let error = error {
        //Manejar TPCError
    } else {
        let tokenRequestor = tokenRequestorList?.first
        let pushMethod = tokenRequestor?.pushMethods?.first
        let pushHandler = pushMethod?.pushHandler // para push provisioning
    }
}
```

{% endtab %}

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

```objective-c
NSString *scheme = @"MASTERCARD";
NSString * payload = @"PAN cifrado PKCS7";

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) {
        //Manejar 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);
config.setOemPayType(OEMPayType.NONE); // Esto es necesario para obtener el objeto PushProvisioning correcto
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(); // para push provisioning
    }

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

{% endtab %}
{% endtabs %}

#### Obtener recurso <a href="#get-asset" id="get-asset"></a>

Usando el SDK de TPC, la aplicación del emisor puede obtener la imagen del logotipo del solicitante de tokens usando la cadena devuelta por la `getEligibleTokenRequestor` API.

Para el esquema Visa, la imagen del logotipo del solicitante de tokens se devuelve como una URL que la aplicación móvil debe obtener directamente.

Para el esquema Mastercard, la imagen del logotipo se devuelve como un `logoId`. Para obtener el logotipo, llame al `getAsset` API.

<figure><img src="/files/4895044bf8a0f4587e79a120ffd46259db663a64" alt=""><figcaption><p>Recuperar un logotipo de solicitante de tokens (solo Mastercard).</p></figcaption></figure>

**Obtener el logotipo del solicitante de tokens**

> <i class="fa-info-circle">:info-circle:</i>
>
> #### Nota <a href="#note-3" id="note-3"></a>
>
> Esto solo está disponible para el esquema Mastercard.

Después de que la aplicación ha obtenido la lista de solicitantes de tokens, puede solicitar obtener la imagen del logotipo del solicitante de tokens.

El fragmento de código siguiente muestra un ejemplo de cómo obtener la imagen del logotipo del solicitante de tokens mediante el SDK de TPC:

{% 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() {
            // No hacer nada
        }

        @Override
        public void onSuccess(TPCResult<MediaData[]> result) {                
		    		MediaData[] mediaData = result.getResult();
            Log.d("TAG", "get Asset request success"); 
        }

        @Override
        public void onError(TPCSDKException exception) {
            Log.e("TAG", "get Asset request failed");
        }
      });
} catch (TPCSDKException exception) {
    Log.e("TAG", "TSHProxy Exception " +exception.getMessage());
}
```

{% endtab %}
{% endtabs %}

### 2. Selección del solicitante de tokens <a href="#id-2-selecting-the-token-requestor" id="id-2-selecting-the-token-requestor"></a>

Cada elemento que es devuelto por la `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:)) es un posible solicitante de tokens al que se puede enviar la tarjeta.

Un `TokenRequestor` objeto expondrá las siguientes propiedades:

* `id`: El ID del Solicitante de Tokens (TRID) que es único por solicitante de tokens y es generado por el esquema.
* `name`: El nombre del solicitante de tokens que se mostrará.
* `logo`: El icono visible que está asociado con el solicitante de tokens.
  * Para Mastercard, esto puede accederse a través de las `logoId` y `getAsset` APIs.
* `pushMethods`: Este objeto es un arreglo de métodos que se pueden usar para contactar al solicitante de tokens dado. Cada elemento del arreglo tiene dos propiedades:
  * `platformType`: Indica la plataforma en la que la aplicación del solicitante de tokens está disponible: `ANDROID`, `IOS`, o `WEB`.
  * `pushHandler`: Contiene información sobre cómo gestionar la solicitud de envío al solicitante de tokens. Para cada `platformType`, existe un `pushHandler` que se usa para solicitar la URI formateada con los datos de la tarjeta al TSP para que pueda ser usada para llamar al solicitante de tokens.

Debido a que un solicitante de tokens puede ser accesible a través de múltiples interfaces, preste mucha atención a `pushMethods`:

* Interfaz de aplicación (cuando `platformType=ANDROID` o `platformType=IOS`)
* Interfaz de sitio web (cuando `platformType=WEB`)

Para una interfaz de aplicación, la aplicación del emisor interactúa con la aplicación del solicitante de tokens.

> <i class="fa-exclamation-circle">:exclamation-circle:</i>
>
> #### Advertencia <a href="#warning" id="warning"></a>
>
> Si la aplicación del solicitante de tokens no está instalada, la aplicación del emisor debe manejar los siguientes casos:
>
> * En `ANDROID`, [ActivityNotFoundException](https://developer.android.com/reference/android/content/ActivityNotFoundException) debe manejarse al llamar al [startActivity](https://developer.android.com/reference/android/content/Context#startActivity\(android.content.Intent\)) método.
> * En `IOS`, la aplicación del emisor debe comprobar si la URL está disponible usando la [canOpenURL](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl) API.
>
> Verificar si la aplicación del solicitante de tokens está instalada está fuera del alcance del SDK de Thales. El solicitante de tokens debe proporcionar una URI a los TSP durante la incorporación.

Para la interfaz de sitio web, la aplicación del emisor debe interactuar con el sitio web del solicitante de tokens.

> <i class="fa-info-circle">:info-circle:</i>
>
> #### Recomendación <a href="#recommendation" id="recommendation"></a>
>
> Para una experiencia fluida, soporte `platformType=WEB`. Maneje el flujo en una WebView dentro de la aplicación del emisor, en lugar de redirigir a una aplicación externa.

### 3. Envío de la tarjeta <a href="#id-3-pushing-the-card" id="id-3-pushing-the-card"></a>

Para enviar una tarjeta a un solicitante de tokens seleccionado, necesita la URI que activa al solicitante de tokens con los datos de la tarjeta correctamente formateados. Solicite esta URI al TSP.

Este flujo se representa en la figura siguiente:

<figure><img src="/files/517e2a051da18a1a923107a588f43110baa2905e" alt=""><figcaption><p>Solicitar una URI de envío al TSP.</p></figcaption></figure>

* Paso 1: El usuario final selecciona un solicitante de tokens.
* Paso 2: La aplicación del emisor obtiene la `pushHandler` propiedad del `TokenRequestor` objeto y llama al SDK a través de la `addCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/PushProvisioning.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.
* Paso 3: El SDK interactúa con el backend para solicitar un push provisioning.
* Paso 4: El backend de Thales verifica si la solicitud está autorizada.
* Paso 5: El backend de Thales solicita la carga útil y genera una URL de envío a través del TSP.
* Paso 6: El SDK devuelve la URL de envío a la aplicación del emisor.
* Paso 7: La aplicación del emisor llama a la URL de envío para lanzar al solicitante de tokens.

> <i class="fa-info-circle">:info-circle:</i>
>
> #### Nota <a href="#note-4" id="note-4"></a>
>
> La URI depende de `platformType`. `pushHandler` cambia según si la interfaz es una aplicación o un sitio web.

Para los otros parámetros mostrados en la figura:

* El `authorizationCode` es necesario para otorgar el permiso para enviar la solicitud. Esto debe cumplir con el [formato y algoritmo](/classic-push-provisioning/es/guia-del-desarrollador/cifrado-y-autenticacion-de-datos/codigo-de-autorizacion-formato-jwt.md).
* La URL de callback permite al solicitante de tokens llamar a la aplicación del emisor al final del flujo. Esto debe configurarse usando el mecanismo de enlace profundo.

> <i class="fa-info-circle">:info-circle:</i>
>
> **Configurar una URL de enlace profundo**
>
> * [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)

El código de ejemplo siguiente demuestra cómo obtener la URI del TSP a través del SDK:

{% 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"

// Este valor puede recuperarse de TPCSDK.getEligibleTokenRequestor
// Para Click to Pay, el valor del atributo tokenRequestor.id de MasterCard es 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 {
        // manejar error de TPC
    } else if let pushUrl = pushUrl {
        // iniciar la aplicación del solicitante de tokens
        let url = URL(string: pushUrl)!
        if UIApplication.shared.canOpenURL(provisionURL) {
          UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
          // mostrar error de que la Aplicación no está instalada
        }
    }
}
```

{% endtab %}

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

```objective-c

NSString *scheme = @"MASTERCARD";
NSString * payload = @"PAN cifrado PKCS7";

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";

// Este valor puede recuperarse de TPCSDK.getEligibleTokenRequestor
// Para Click to Pay, el valor del atributo tokenRequestor.id de MasterCard es 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) {
        // manejar TPCError
    } else {
        // iniciar la aplicación del solicitante de tokens
        [[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;

// Este valor puede recuperarse de TPCSDK.getEligibleTokenRequestor
// Para Click to Pay, el valor del atributo tokenRequestor.id de MasterCard es 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();

        // Iniciar la aplicación del solicitante de tokens
        try {
          getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(pushUrl)));
        } catch (ActivityNotFoundException e) {
          // No hay Actividad disponible para manejar la acción
        }
    }

    @Override
    public void onError(TPCSDKException exception) {
        // Compruebe si hay algún error en el push provisioning
    }
});
```

{% endtab %}
{% endtabs %}

La figura siguiente representa un flujo genérico donde la aplicación del emisor envía la tarjeta a la aplicación del solicitante de tokens.

<figure><img src="/files/ffda1585519e0829ba72bc88017fee9a63f80468" alt=""><figcaption><p>Flujo genérico de push provisioning con un solicitante de tokens.</p></figcaption></figure>

La primera parte del flujo involucra solo a la aplicación del emisor.

En el paso 3, la aplicación del emisor usa la lista devuelta por la `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:)) para construir la interfaz mostrada al usuario final.

Cuando el usuario final confirma en el paso 4 que desea enviar la tarjeta (o inmediatamente después de la selección en el paso 3), la aplicación del emisor llama al SDK usando la `addCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/PushProvisioning.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:)) para que el SDK pueda consultar al TSP por la URI usada para enviar la tarjeta.

<figure><img src="/files/5ce46eb483cb524dc12b3716279613187f5c1eb2" alt=""><figcaption><p>Enviar la tarjeta iniciando al solicitante de tokens.</p></figcaption></figure>

Una vez que la URI se devuelve desde el paso 4, la aplicación del emisor utiliza la URI para enviar la tarjeta al solicitante de tokens.

El solicitante de tokens toma el control en el paso 5, y habrá varias ventanas emergentes para guiar al usuario final a través del flujo de tokenización.

En este punto, la aplicación del solicitante de tokens tiene el control total. Interactúa con el TSP para solicitar la digitalización de la tarjeta, como se muestra en los pasos 6 y 7.

Una vez que la digitalización se completa, el usuario final puede continuar como se muestra en el paso 7. El control puede volver a la aplicación del emisor si el solicitante de tokens usa la URL de callback proporcionada por `addCard` ([Android](https://thalesgroup.github.io/d1sdk-docs/tpc-sdk/android/latest/com/thalesgroup/tpcsdk/provisioning/PushProvisioning.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:

```
GET https://docs.payments.thalescloud.io/classic-push-provisioning/es/casos-de-uso/aprovisionamiento-push-a-traves-de-tsp.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.
