> 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/secure-card-display/es/implement-secure-card-display/display-card-metadata.md).

# Mostrar metadatos de la tarjeta

## Resumen

Esta sección describe cómo mostrar los datos no sensibles de la tarjeta en la aplicación del emisor.

## Experiencia de usuario

<div align="left"><figure><img src="/files/a8e03e423faa8647fb6a61a29c080a6e913bd9d8" alt="" width="336"><figcaption></figcaption></figure></div>

## Diagrama de secuencia

#### Requisitos previos:

* El usuario final y las tarjetas están registrados en el backend de D1.
* El SDK de D1 está correctamente inicializado.
* La aplicación del emisor llamó a la API de inicio de sesión del SDK de D1.

<figure><img src="/files/3bea606d71f189fd8e1274c9fea0a0d32f4d089f" alt=""><figcaption></figcaption></figure>

Basado en el `cardID` valor, la aplicación del emisor puede mostrar al usuario final la información básica de la tarjeta, como los últimos cuatro dígitos del PAN, la fecha de caducidad, el fondo de la imagen de la tarjeta, etc.

El SDK de D1 expone la API pública `getCardMetaData()` para obtener la información de la tarjeta. La `CardMetadata.cardAssetArray()` API para iOS y la `CardMetadata.getAssetList()` API para Android recuperan los recursos de la tarjeta. En la primera llamada, el SDK de D1 obtiene los recursos de la tarjeta del backend de D1 y los almacena en caché localmente. En las llamadas posteriores, el SDK de D1 devuelve los recursos de la tarjeta desde la caché local.

Para una tarjeta emitida por D1, se puede obtener información adicional de la tarjeta, como “State Reason” y “Ongoing Operation”, usando las API CardMetadata.getStateReason() y CardMetadata.getOngoingOperation().

{% hint style="info" %}
La lista de tarjetas se puede obtener con la `getCardList()` operación.
{% endhint %}

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

```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 utiliza para mostrar la imagen de la tarjeta
            val cardAssets = cardMetadata.getAssetList().await()
            // Continúa con la lógica de la aplicación
        } catch (exception: D1Exception) {
            // Consulte la sección Integración del SDK de D1 – Gestión de errores
        }
    }
}
```

{% endtab %}

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

```kotlin
fun getCardMetaData(d1Task: D1Task) {
    var cardID = "" // ID de tarjeta recibido del backend.
    val callback = object : D1Task.Callback<CardMetadata> {
      override fun onSuccess(cardMetadata: CardMetadata) {
        // Últimos 4 dígitos del PAN.
        val last4Pan = cardMetadata.last4Pan

        // CardAsset se utiliza para mostrar la imagen de la tarjeta.
        cardMetadata.getAssetList(object : D1Task.Callback<List<CardAsset>> {
          override fun onSuccess(cardAssets: List<CardAsset>) {
          // Continúa con la lógica de la aplicación.
          }
  
          override fun onError(e: D1Exception) {
          // Maneja el error. Por ejemplo, regístralo, muéstralo, etc.
          }
        })
    }
      override fun onError(exception: D1Exception) {
        // Consulte la sección Integración del SDK de D1 – Gestión de errores.
      }
    }

    d1Task.getCardMetadata(cardID, callback)
}
```

{% endtab %}

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

```swift
let cardID = "" // obtenido, por ejemplo, del servidor
do {
    let service = try d1Task.secureCardDisplayService()
    let cardMetadata = try await service.cardMetadata(cardID)
    // Continúa con los flujos posteriores, por ejemplo, actualizar la interfaz de usuario
    print("Esquema: \(cardMetadata.cardScheme.rawValue)")
    print("Estado: \(cardMetadata.cardState.rawValue)")
    print("Caducidad: \(cardMetadata.cardExpiry)")
    print("Últimos 4: **** **** **** \(cardMetadata.cardLast4)")
    // por ejemplo, muestra el primer arte de la tarjeta
    let assets = try await cardMetadata.cardAssetArray()
    if let cardAssetContent = assets.first?.contentArray.first,
       let cardImageData = Data(base64Encoded: cardAssetContent.encodedData, options: .ignoreUnknownCharacters) {
        let image = UIImage.init(data: cardImageData)
    }
} catch let d1Error as D1Error {
    // Consulte la sección Integración del SDK de D1 – Gestión de errores
} catch let error {
    // Manejar otro error
}
```

{% endtab %}

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

```swift
let cardID = "" // Obtenido, por ejemplo, del servidor.
d1Task.cardMetadata(cardID) { cardMetadata, error in
    if let error = error {
        // Consulte la sección Integración del SDK de D1 – Gestión de errores.
    } else if let cardMetadata = cardMetadata {
        // Continúa con flujos posteriores. Por ejemplo, actualiza la interfaz de usuario.
        print("Esquema: \(cardMetadata.cardScheme.rawValue)")
        print("Estado: \(cardMetadata.cardState.rawValue)")
        print("Caducidad: \(cardMetadata.cardExpiry)")
        print("Últimos 4: **** **** **** \(cardMetadata.cardLast4)")

        print("motivo: \(cardMetadata.reason.rawValue)")
        print("Operación en curso: \(cardMetadata.ongoingOperation.rawValue)")

        // Por ejemplo, muestra el primer arte de la tarjeta.
        cardMetadata.cardAssetArray { assets, error in
            if let cardAssetContent = assets?.first?.contentArray.first,
               let cardImageData = Data(base64Encoded: cardAssetContent.encodedData, options: .ignoreUnknownCharacters) {
                let image = UIImage.init(data: cardImageData)
            }
        }
    }
}
```

{% 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/secure-card-display/es/implement-secure-card-display/display-card-metadata.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.
