> 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/release-notes/es/sdk/june-2026/d1-sdk-v4.4.0/asynchronous-apis-on-d1-sdk-4.4.0.md).

# APIs asincrónicas en el SDK de D1 4.4.0

## APIs asíncronas en D1 SDK 4.4.0

#### Descripción general

D1 SDK 4.4.0 introduce actualizaciones de API asíncronas para Android e iOS.

En Android, las APIs actualizadas admiten integraciones basadas en corrutinas. En iOS, las APIs actualizadas admiten la concurrencia de Swift. Estos cambios se aplican a las APIs de Secure Card Display y Push Provisioning.

Usa esta guía para revisar las APIs afectadas y actualizar tu aplicación emisora.

#### Qué cambió

La superficie de API anterior está obsoleta en D1 SDK 4.4.0. Las APIs obsoletas ahora se proporcionan bajo el producto correspondiente:

* Usa Secure Card Display para los flujos de visualización de tarjetas.
* Usa Push Provisioning para los flujos de digitalización de la billetera.

Si tu aplicación emisora usa llamadas asíncronas, actualiza esas llamadas durante la migración:

* En Android, usa las APIs basadas en corrutinas de Kotlin.
* En iOS, usa las APIs basadas en la concurrencia de Swift.

Esta página enumera las APIs cambiadas en 4.4.0.

#### Migra a las APIs específicas del producto

{% stepper %}
{% step %}

#### Revisa tu integración actual

Identifica las APIs obsoletas de D1 SDK usadas por tu aplicación emisora.

Céntrate en las APIs usadas para los flujos de Secure Card Display y Push Provisioning.
{% endstep %}

{% step %}

#### Pasa a las APIs específicas del producto

* Reemplaza cada API obsoleta por la API específica del producto correspondiente.&#x20;
* Usa las APIs de Secure Card Display para las funciones de visualización de tarjetas.
* Usa las APIs de Push Provisioning para las funciones de digitalización de la billetera.
  {% endstep %}

{% step %}

#### Actualiza las llamadas asíncronas

* En Android, reemplaza las llamadas asíncronas existentes con las APIs basadas en corrutinas de Kotlin.
* En iOS, reemplaza las llamadas asíncronas existentes con las APIs de concurrencia de Swift.
  {% endstep %}

{% step %}

#### Valida los flujos migrados

* Compila y prueba tu aplicación emisora después de la migración.
* Valida los flujos de Secure Card Display y Push Provisioning.
  {% endstep %}
  {% endstepper %}

#### Actualiza la gestión asíncrona

{% tabs %}
{% tab title="Android" %}
Usa las APIs basadas en corrutinas de Kotlin si tu aplicación emisora usa corrutinas de Kotlin.

Esto simplifica el código asíncrono y reduce la gestión de callbacks.

Las llamadas de Secure Card Display y Push Provisioning ahora devuelven `Task<T>` en lugar de usar `Callback`.

**Usa `await()` en integraciones basadas en corrutinas**

Importa la extensión `await` explícitamente:

```kotlin
import com.thalesgroup.gemalto.d1.await
```

Ejemplo basado en corrutinas:

```kotlin
fun getCardMetaData(d1Task: D1Task, cardID: String, activity: FragmentActivity) {
   activity.lifecycleScope.launch {
       try {
           val cardMetadata = d1Task.secureCardDisplayService.getCardMetadata(cardID).await()

           // Últimos 4 dígitos del PAN
           val last4Pan = cardMetadata.last4Pan

           // CardAsset se usa para mostrar el arte de la tarjeta
           val cardAssets = cardMetadata.getAssetList().await()
           // Continúa con la lógica de la aplicación
       } catch (exception: D1Exception) {
           // Consulta la sección de Integración de D1 SDK – Gestión de errores
       }
   }
}
```

**Usa `execute(callback)` en integraciones sin corrutinas**

```kotlin
public void getCardMetaData(@NonNull D1Task d1Task, @NonNull String cardID) {
   D1Task.Callback<CardMetadata> callback = new D1Task.Callback<CardMetadata>() {
       @Override
       public void onSuccess(CardMetadata cardMetadata) {
           // Últimos 4 dígitos del PAN
           String last4Pan = cardMetadata.getLast4Pan();

           // Nota: la obtención de la lista de activos se gestiona por separado en el método getAssetList()
           // Continúa con la lógica de la aplicación
       }

       @Override
       public void onError(D1Exception exception) {
           // Consulta la sección de Integración de D1 SDK – Gestión de errores
       }
   };

   d1Task.getSecureCardDisplayService().getCardMetadata(cardID).execute(callback);
}
```

{% endtab %}

{% tab title="iOS" %}
Usa las APIs de concurrencia de Swift si tu aplicación emisora usa concurrencia de Swift.

Esto hace que el código asíncrono sea más fácil de leer y mantener.

Las llamadas de Secure Card Display y Push Provisioning ahora usan `async throws` en lugar de controladores de finalización.
{% endtab %}
{% endtabs %}

#### Cambios de API en 4.4.0

Usa esta sección para revisar las APIs cambiadas en D1 SDK 4.4.0.

Inicializa cada servicio de producto desde `d1Task` antes de llamar a las APIs del producto.

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

```kotlin
val pushProvisioningService = d1Task.pushProvisioningService
val secureCardDisplayService = d1Task.secureCardDisplayService
```

{% endtab %}

{% tab title="iOS" %}

```swift
let secureCardDisplayService = try d1Task.secureCardDisplayService()
let pushProvisioningService = try d1Task.pushProvisioningService()
```

{% endtab %}
{% endtabs %}

**Secure Card Display**

{% tabs %}
{% tab title="Android" %}
**`getCardMetadata`**

Antes:

```java
getCardMetadata(String cardID, Callback<CardMetadata> callback)
```

Ahora:

```java
Task<CardMetadata> getCardMetadata(String cardID)
```

**`getCardDetails`**

Antes:

```java
getCardDetails(String cardID, Callback<CardDetails> callback)
```

Ahora:

```java
Task<CardDetails> getCardDetails(String cardID)
```

**`displayCardDetails`**

Antes:

```java
displayCardDetails(String cardID, CardDetailsUI cardDetailsUI, Callback<Void> callback)
```

Ahora:

```java
Task<Void> displayCardDetails(String cardID, CardDetailsUI cardDetailsUI)
```

{% endtab %}

{% tab title="iOS" %}
**`cardMetadata`**

Antes:

```swift
cardMetadata(_ cardID: String, completion: @escaping (CardMetadata?, D1Error?) -> Void)
```

Ahora:

```swift
cardMetadata(_ cardID: String) async throws -> CardMetadata
```

**`cardDetails`**

Antes:

```swift
cardDetails(_ cardID: String, completion: @escaping (CardDetails?, D1Error?) -> Void)
```

Ahora:

```swift
cardDetails(_ cardID: String) async throws -> CardDetails
```

**`displayCardDetails`**

Antes:

```swift
displayCardDetails(_ cardID: String, cardDetailsUI ui: CardDetailsUI, completion: @escaping (D1Error?) -> Void)
```

Ahora:

```swift
displayCardDetails(_ cardID: String, cardDetailsUI: CardDetailsUI) async throws
```

{% endtab %}
{% endtabs %}

**Push Provisioning**

{% tabs %}
{% tab title="Android" %}
**`addDigitalCardToScheme`**

Antes:

```java
addDigitalCardToScheme(String cardID, TokenRequestor tokenRequestor, String appURL, boolean tcsAccepted, Callback<String> callback)
```

Ahora:

```java
Task<String> addDigitalCardToScheme(String cardID, TokenRequestor tokenRequestor, String appURL, boolean tcsAccepted)
```

**`addDigitalCardToOEM`**

Antes:

```java
addDigitalCardToOEM(String cardID, OEMPayType oemType, Activity activity, D1Task.Callback<Object> callback)
```

Ahora:

```java
Task<Object> addDigitalCardToOEM(String cardID, OEMPayType oemType, Activity activity, int options)
```

**`getTokenRequestorList`**

Antes:

```java
getTokenRequestorList(String cardID, Callback<List<TokenRequestor>> callback)
```

Ahora:

```java
Task<List<TokenRequestor>> getTokenRequestorList(String cardID)
```

**`getCardDigitizationState`**

Antes:

```java
getCardDigitizationState(String cardID, OEMPayType oemType, D1Task.Callback<CardDigitizationState> callback)
```

Ahora:

```java
Task<CardDigitizationState> getCardDigitizationState(String cardID, OEMPayType oemType)
```

Nuevo en 4.4.0:

```java
Task<CardDigitizationState> getCardDigitizationState(OEMPayType oemType, String last4)
```

{% endtab %}

{% tab title="iOS" %}
**`cardDigitizationState`**

Antes:

```swift
cardDigitizationState(_ cardID: String, completion: @escaping (CardDigitizationResult?, D1Error?) -> Void)
```

Ahora:

```swift
cardDigitizationState(_ cardID: String) async throws -> CardDigitizationResult
```

**`addDigitalCardToOEM`**

Antes:

```swift
addDigitalCardToOEM(_ cardID: String, viewController: UIViewController, completion: @escaping (D1Error?) -> Void)
```

Ahora:

```swift
addDigitalCardToOEM(_ cardID: String, viewController: UIViewController) async throws
```

**`digitalCardPass` a `digitalCard`**

Antes:

```swift
digitalCardPass(forSerialNumber serialNumber: String) throws -> PKPass?
```

Ahora:

```swift
digitalCard(forSerialNumber serialNumber: String) throws -> PKPass?
```

**`tokenRequestorList`**

Antes:

```swift
tokenRequestorList(_ cardID: String, completion: @escaping ([TokenRequestor]?, D1Error?) -> Void)
```

Ahora:

```swift
tokenRequestorList(_ cardID: String) async throws -> [TokenRequestor]
```

**`addDigitalCardToScheme`**

Antes:

```swift
addDigitalCardToScheme(_ cardID: String, tokenRequestor: TokenRequestor, appURL: String, termsAndConditionsAccepted: Bool, completion: @escaping (String?, D1Error?) -> Void)
```

Ahora:

```swift
addDigitalCardToScheme(_ cardID: String, tokenRequestor: TokenRequestor, appURL: String, termsAndConditionsAccepted: Bool) async throws -> String
```

Nuevo en 4.4.0:

```swift
cardDigitizationState(withLast4 last4: String) async throws -> CardDigitizationResult
```

{% endtab %}
{% endtabs %}


---

# 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/release-notes/es/sdk/june-2026/d1-sdk-v4.4.0/asynchronous-apis-on-d1-sdk-4.4.0.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.
