> 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/guia-del-desarrollador/solucion-de-problemas/ios.md).

# iOS

### Recuperando registros del SDK de Push Provisioning <a href="#retrieving-push-provisioning-sdk-logs" id="retrieving-push-provisioning-sdk-logs"></a>

Puede recuperar registros usando la biblioteca de depuración del SDK de Push Provisioning. Haga esto en `Console.app`:

* Filtrar por `TPCSDK` en `Console.app`.
* En la `Console.app` ventana, asegúrese de que tanto `Incluir mensajes de información` y `Incluir mensajes de depuración` estén seleccionados, como se muestra a continuación.

<figure><img src="/files/eedd7bd3c747c9503cb43de8754ef49859622232" alt=""><figcaption><p>Ejemplo de filtro y configuración de nivel de registro en `Console.app`.</p></figcaption></figure>

Puede recuperar registros en el Entorno de Producción. Debe usar la biblioteca de depuración del SDK de Push Provisioning.

### Recuperando registros de Apple Pay <a href="#retrieving-apple-pay-logs" id="retrieving-apple-pay-logs"></a>

1. Use el perfil de aprovisionamiento específico de Apple para los siguientes dispositivos:
   * iPhone: [Perfil de aprovisionamiento iOS](https://developer.apple.com/services-account/download?path=/iOS/iOS_Logs/WalletFull.mobileconfig).
   * iWatch: [Perfil de aprovisionamiento iWatch](https://developer.apple.com/services-account/download?path=/iOS/watchOS_Logs/WalletFull.mobileconfig).
2. Una vez que la aplicación esté en ejecución, los registros pueden filtrarse usando el `PassbookUIService` proceso en Console.app.

Para más detalles, consulte [Perfiles y registros de Apple Pay](https://developer.apple.com/bug-reporting/profiles-and-logs/?name=Apple%20Pay).

### Errores del servidor <a href="#server-errors" id="server-errors"></a>

Si recibe un error relacionado con el servidor, puede ser posible obtener el ID de la solicitud API desde el `TPCError` `requestId` parámetro. Use este ID de solicitud cuando informe el problema al equipo de soporte.

### Errores comunes <a href="#common-errors" id="common-errors"></a>

#### No se puede agregar la tarjeta usando el entorno sandbox <a href="#unable-to-add-card-using-sandbox-environment" id="unable-to-add-card-using-sandbox-environment"></a>

Causas posibles:

* El dispositivo no ha iniciado sesión con una cuenta iCloud de Sandbox.
* El PAN en uso no es un PAN de Sandbox. Para más detalles, consulte [Pruebas de Apple Sandbox](https://developer.apple.com/apple-pay/sandbox-testing).

#### SDK de Push Provisioning `getToken`/`getCardDigitizationResult` La API aún devuelve `nil`/`CardNotDigitized` después del proceso de aprovisionamiento de la tarjeta. <a href="#push-provisioning-sdk-gettokengetcarddigitizationresult-api-still-returns-nilcardnotdigitized-after" id="push-provisioning-sdk-gettokengetcarddigitizationresult-api-still-returns-nilcardnotdigitized-after"></a>

Causas posibles:

* Para pruebas en el Entorno de Producción, pruebe en dispositivos de producción usando perfiles de aprovisionamiento Ad Hoc, TestFlight o la App Store (por ejemplo, mediante códigos promocionales), después de las aprobaciones requeridas.
* El perfil de aprovisionamiento no incluye los permisos correctos. Consulte esta [guía](/classic-push-provisioning/es/guia-del-desarrollador/configuracion-del-sdk/ios.md) para configurar los permisos.
* Los detalles de la aplicación del emisor pueden estar mal configurados en el sistema del operador de la red de pagos (PNO) (Visa y Mastercard). Según las especificaciones de Apple, configure los detalles de la aplicación del emisor en el sistema PNO usando el siguiente formato:
  * `associatedApplicationIdentifiers`: `TeamId.BundleId`
  * `associatedStoreIdentifier`: `AdamId`
  * `appLaunchUrl`: [La URL de su aplicación](https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app).

La figura siguiente muestra dónde configurar `Identificadores de aplicación/ADAM` ID y `URL de la aplicación` en Mastercard.

<figure><img src="/files/c25076f37653ca6d6893365b8b2d6125030ce7e1" alt=""><figcaption><p>Ejemplo de configuración de Mastercard para identificadores de aplicación y URL de la aplicación.</p></figcaption></figure>

#### Tarjeta no agregada antes de los Términos y Condiciones <a href="#card-not-added-before-tcs" id="card-not-added-before-tcs"></a>

<figure><img src="blob:https://thales-dis-dbp.stoplight.io/723646d7-36c3-4d76-8e9a-55baa642bcff" alt=""><figcaption><p>Ejemplo de error “tarjeta no agregada antes de los T&#x26;C”.</p></figcaption></figure>

<figure><img src="/files/f90a0f37d6268b639764e1e9ab0054838928474a" alt=""><figcaption><p>Vista de registros de ejemplo usada para solucionar fallos de aprovisionamiento.</p></figcaption></figure>

Ingrese el SEID del dispositivo en la barra de búsqueda en la esquina superior derecha. Esto devuelve registros con solicitudes y respuestas. Revise la salida del registro y seleccione el `request` mensaje (como se muestra a continuación). El campo resaltado muestra datos para el mensaje seleccionado.

Para este caso de uso, valide `encryptedPassData` y `ephemeralPublicKey`. Estos son los datos enviados desde el dispositivo al servidor.

En la figura a continuación, también puede ver la solicitud/respuesta del archivo de registro. La respuesta del servidor se muestra en un formato más legible, con el código de error resaltado. La respuesta devuelve `error 500`, que es un error genérico. Las opciones de resolución se enumeran en la siguiente sección.

```
Respuesta: ...[Otros datos no registrados aquí]
{
   ...[Otros datos no registrados aquí]
}
{
   statusCode = 500;
   statusMessage = "Broker Service Response exception";
}
```

<figure><img src="/files/b34c51ce5368d35eba62e80da5ea139e177e87cf" alt=""><figcaption><p>Ejemplo de respuesta de archivo de registro con el error del servidor resaltado.</p></figcaption></figure>

Causas posibles:

* Error de criptografía, codificación de datos incorrecta o diccionario JSON inválido.

  Resuelva esto validando su implementación de criptografía y el formato de los datos.
* Lista blanca (Adam ID incorrecto está en la lista blanca)

  Esto se aplica solo a pruebas en el Entorno de Producción.

  * ¿El emisor ha solicitado la inclusión en la lista blanca del Adam ID de su aplicación?
  * Si es así, ¿el emisor está distribuyendo la aplicación del emisor a través de TestFlight? Para TestFlight, la compilación mínima compatible debe configurarse en iOS 10.3. Cuando la aplicación del emisor se compile para la App Store, puede volver a establecer la versión mínima de iOS compatible en iOS 9.0 o posterior.
* Problema con los recursos como los T\&C y el arte de la tarjeta que se están cargando.

  Esto es poco probable. Normalmente ocurre en el Entorno de Preproducción, donde la configuración del portal de la red de pagos puede cambiar con frecuencia.

  Para descartar esto, intente agregar la tarjeta manualmente en Apple Wallet. Si ve los T\&C, puede descartar este problema. Si el aprovisionamiento manual falla, contacte a su PNO y vuelva a subir sus T\&C.

#### Tarjeta inelegible <a href="#in-eligible-card" id="in-eligible-card"></a>

<figure><img src="/files/c8a361c45eaa165061b67fe0d5e0df7f335964e4" alt=""><figcaption><p>Ejemplo de respuesta de tarjeta inelegible.</p></figcaption></figure>

A diferencia del escenario “Tarjeta no agregada antes de los T\&C”, el servidor responde con el código de estado `200`, lo que significa que la solicitud se completó correctamente. Sin embargo, la respuesta indica que la tarjeta es inelegible (por ejemplo, `eligibilityStatus=0`).

```
{
   "Content-Length" = 57;
   "Content-Type" = "application/json";
   Date = "Tue, 21 May 2019 04:40:57 GMT";
   "x-conversation-id" = 086063f209b34b84bee028a75c6af0f2;
   ...[Otros datos no registrados aquí]
} 
{
   errorCode = 40403;
   ...[Otros datos no registrados aquí]
}
```

Este problema es causado por detalles de la tarjeta que no son elegibles para Apple Pay (por ejemplo, la tarjeta no está en la lista permitida por el PNO/emisor).

Verifique con su PNO que la tarjeta esté configurada correctamente.

#### El emisor rechaza el aprovisionamiento: respuesta de “flujo rojo” <a href="#issuer-declines-provisioning-red-flow-response" id="issuer-declines-provisioning-red-flow-response"></a>

<figure><img src="/files/e3829b30c086af19b56125f2b1c6305b1dfb2c09" alt=""><figcaption><p>Ejemplo de respuesta de “flujo rojo” mostrada al usuario final.</p></figcaption></figure>

Un fallo después de que el usuario final acepta los T\&C a menudo es causado por un rechazo por parte del emisor. Este rechazo está representado por una `Respuesta roja`.

Esto puede suceder si el emisor rechaza el intento, o si el PNO responde en nombre del emisor porque la respuesta tarda demasiado en procesarse. Los registros para este error típicamente muestran el código de error `40403`. El dispositivo puede mostrar: “No se pudo agregar la tarjeta, inténtelo de nuevo más tarde o contacte a su emisor para más información”.

```
{
   "Content-Length" = 57;
   "Content-Type" = "application/json";
   Date = "Tue, 21 May 2019 04:40:57 GMT";
   "x-conversation-id" = 086063f209b34b84bee028a75c6af0f2;
   ...[Otros datos no registrados aquí]
} 
{
   errorCode = 40403;
   ...[Otros datos no registrados aquí]
}
```

El flujo rojo es devuelto por el PNO del emisor. Contacte a su PNO y proporcione el `conversationID`. El PNO puede usarlo para identificar la razón subyacente.

#### Tipo de tarjeta desconocido <a href="#unknown-card-type" id="unknown-card-type"></a>

Este error ocurre cuando el identificador de paquete es incorrecto. Apple recomienda cambiar el identificador de paquete. A continuación se muestra un ejemplo de error:

```
PassbookUIService         AMSCardEnrollmentEligibilityTask: [D72FE7E2] Intentando determinar el tipo de tarjeta para passTypeIdentifier: paymentpass.com.apple, serialNumber: nc.prod.cert_5395c9ae24b346e7ad08fcca25a46912

PassbookUIService         tcp_input [C127.1:3] flags=[F.] seq=1370165038, ack=1840204742, win=502 state=CLOSED rcv_nxt=1370165014, snd_una=1840204718

PassbookUIService         AMSCardEnrollmentEligibilityTask: [D72FE7E2] La tarjeta es un tipo desconocido de PKPaymentPass

PassbookUIService         PKNotifyCoalescer: no registrado para la notificación com.apple.NPKCompanionAgent.listener.resumed.

PassbookUIService         {public}<private>:0x282608f30 (0x282530a00): Cerrando la conexión existente

PassbookUIService         AMSCardEnrollmentEligibilityTask: [D72FE7E2] Tipo de tarjeta encontrado: 0

PassbookUIService         AMSURLRequestEncoder: [D72FE7E2] Codificando solicitud para URL: https://p19-buy.itunes.apple.com/account/stackable/applePay/silentEnroll/eligible {

                account = <ACAccount: 0x282d2e5a0 type = iTunesStore | backingID = BE105BB6-8208-4E56-AEA9-8615DE4C093F | username = proccotester@gmail.com | altDSID = 000014-10-8f1f9b5d-1c5e-4f41-b9e4-85ee3dc81e11 | DSID = 20100559835 | active = true | storefront = 143441-1,29>

                mediaType = com.apple.AppleMediaServices.accountmediatype.production
```

#### El aprovisionamiento push devuelve el código de estado `1` <a href="#push-provisoning-returns-status-code-1" id="push-provisoning-returns-status-code-1"></a>

* PPROD: Las pruebas no se activan usando una cuenta de prueba Apple Sandbox. Consulte la [Pruebas de Apple Sandbox](/classic-push-provisioning/es/guia-del-desarrollador/pruebas-en-sandbox.md) página para los pasos de prueba en sandbox.
* PROD: La aplicación del emisor no está publicada en la App Store, lo que hace que Apple la restrinja.

A continuación se muestra un ejemplo del error:

```
//L_Stage[866:312743] [TPCSDK] ProvisionViewController addPaymentPassViewController: ephemeralPublicKey: BNEz67GTNp2YEtS/hkUDaMJh/zGjBVFbMMIYu5E4xsMoCgeCsR8Qy8A/YGnmXDCZVBpAzmhdrD+e3WpFswdU7e8=

2021-03-26 18:49:21.422819+0300 UCFS_TAS_HEEL_Stage[866:312743] [TPCSDK] ProvisionViewController addPaymentPassViewController: Crear solicitud

2021-03-26 18:49:32.050545+0300 UCFS_TAS_HEEL_Stage[866:311885] [TPCSDK] ProvisionViewController addPaymentPassViewController:didFinishAdding BEGIN

2021-03-26 18:49:32.056856+0300 UCFS_TAS_HEEL_Stage[866:311885] [TPCSDK] ProvisionViewController addPaymentPassViewController:didFinishAdding error: La operación no pudo completarse. (PKPassKitErrorDomain error 1.)

El flujo se inicia correctamente para TSH pero MasterCard no recibe el push. En los registros del dispositivo el error
```

#### El aprovisionamiento push devuelve el código de estado `403` <a href="#push-provisoning-returns-status-code-403" id="push-provisoning-returns-status-code-403"></a>

Este error ocurre cuando el flujo de aprovisionamiento push es rechazado por el backend del emisor, pero el flujo por lo demás tiene éxito (flujo rojo). Los detalles del error se muestran a continuación:

\[PassbookUIService error] Código de estado recibido 403.

#### El aprovisionamiento push devuelve `500` <a href="#push-provisioning-returns-500" id="push-provisioning-returns-500"></a>

Este error ocurre cuando la cuenta de prueba Apple Sandbox no está configurada en el dispositivo de prueba.

A continuación se muestra un ejemplo del error:

```
{ 
  "Content-Length" = 49; 
  "Content-Type" = "application/json"; 
  Date = "Fri, 21 May 2021 14:06:16 GMT"; 
  Vary = "accept-language"; 
  "x-conversation-id" = 8a7e25b542b34cc9a4077fb411c1b2eb;
  "x-envoy-upstream-service-time" = 625; 
  "x-pod" = "crt-pod1"; 
  "x-pod-region" = "paymentpass.com.apple"; 
} 
{ 
  errorCode = 40456; 
  statusCode = 500; 
}
```


---

# 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/es/guia-del-desarrollador/solucion-de-problemas/ios.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.
