Welcome to our new developer portal! Use the "Ask" button to chat with our AI Agent.
For the complete documentation index, see llms.txt. This page is also available as Markdown.

Extensión de Apple Wallet

Extensión de Apple Wallet

Use las extensiones de Apple Wallet para permitir que los usuarios finales descubran y aprovisionen tarjetas directamente desde la aplicación Apple Wallet, además de la aplicación del emisor.

Mediante las extensiones de la aplicación, puede exponer funcionalidades y contenido personalizados fuera de la aplicación del emisor y ponerlos a disposición mientras el usuario final interactúa con Apple Wallet o con el sistema.

El aprovisionamiento de tarjetas dentro de la aplicación Apple Wallet mejora la experiencia en la app al evitar la entrada manual de los datos de la tarjeta de pago.

Consulte la descripción general de la extensión de Apple para obtener información general sobre las extensiones de iOS.

Experiencia de usuario

El flujo integral de la extensión de Apple Wallet tiene dos fases principales:

  1. Apple Wallet detecta que la aplicación del emisor tiene tarjetas disponibles para el aprovisionamiento.

  2. El usuario final se autentica y selecciona qué tarjetas añadir; luego Apple Wallet solicita la carga útil de aprovisionamiento a la aplicación del emisor a través del SDK D1.

Descubrimiento y autenticación

Apple Wallet showing issuer application option for adding a card
Apple Wallet muestra la aplicación del emisor como opción cuando hay tarjetas disponibles para el aprovisionamiento.
1

Descubrir la aplicación del emisor en Apple Wallet

Apple Wallet comprueba con la aplicación del emisor si hay tarjetas disponibles. Si las hay, la aplicación del emisor aparece en la lista de opciones.

2

El usuario final selecciona la aplicación del emisor

Cuando el usuario final selecciona la aplicación del emisor, Apple Wallet activa la extensión de IU de la aplicación del emisor para autenticar al usuario final.

3

Autenticar al usuario final

La extensión de IU de la aplicación del emisor autentica al usuario final con las mismas credenciales y métodos (por ejemplo, inicio de sesión manual y biometría) que la aplicación principal del emisor.

Selección y aprovisionamiento de tarjetas

Apple Wallet showing available cards from the issuer application
Apple Wallet obtiene y muestra las tarjetas disponibles de la aplicación del emisor.
1

Apple Wallet obtiene las tarjetas disponibles

Apple Wallet solicita la lista de tarjetas disponibles a la aplicación del emisor a través de la extensión sin interfaz de usuario. El usuario final ve una lista de tarjetas para añadir.

2

Ver detalles de la tarjeta

El usuario final puede revisar los detalles de la tarjeta (por ejemplo, la imagen de la tarjeta, el título del producto y los últimos cuatro dígitos) antes de añadirla.

3

Aceptar términos y condiciones

El usuario final revisa y acepta los términos y condiciones del emisor y de la red de pagos.

4

Carga útil de aprovisionamiento y tokenización

Para cada tarjeta seleccionada, Apple Wallet solicita una carga útil de aprovisionamiento a la aplicación del emisor y luego inicia el flujo de tokenización con el TSP de la red de pago.

Extensiones

La integración de Apple Wallet requiere dos tipos de extensiones de la aplicación del emisor:

  • Extensión sin IU Informa del estado del flujo de la extensión y de la disponibilidad de tarjetas. Esto cubre los pasos de descubrimiento de tarjetas y de carga útil de aprovisionamiento. Se implementa extendiendo la clase base del SDK D1 D1IssuerProvisioningExtensionHandler.

  • Extensión de IU Autentica al usuario final. Se trata de una pantalla independiente que usa las mismas credenciales de inicio de sesión que la aplicación del emisor. Implementa el D1IssuerProvisioningExtensionAuthorizationProviding protocolo.

Las extensiones de Apple Wallet se instalan al mismo tiempo que la aplicación del emisor. Para que Apple Wallet detecte que hay pases para añadir y muestre la extensión, el usuario final debe abrir la aplicación del emisor al menos una vez.

El SDK D1 proporciona una implementación base para la extensión sin IU, de modo que no tenga que implementar toda la lógica usted mismo. La aplicación del emisor llama a D1Task.configure() con WalletExtensionConfig durante el inicio de la aplicación para compartir los detalles de las tarjetas con la extensión. Aunque esta configuración solo es necesaria una vez después de la instalación, recomendamos llamarla en cada inicio de la aplicación para mantener actualizada la información de las tarjetas.

High-level flow for configuring the Apple Wallet extension via D1 SDK
Flujo de alto nivel: la aplicación del emisor configura el SDK D1 para que Apple Wallet pueda descubrir tarjetas.

Después de una autenticación correcta en la extensión de IU, la aplicación del emisor debe llamar a D1IssuerProvisioningExtensionAuthorizationProviding.bindingHash() para recuperar la carga útil codificada del hash de vinculación del cliente (cbp). La aplicación del emisor debe pasar este cbp valor al backend del emisor al solicitar el token del emisor. Luego debe llamar a D1IssuerProvisioningExtensionAuthorizationProviding.login() para que el SDK pueda continuar el flujo de la extensión sin IU.

Diagramas de secuencia

1. Apple Wallet muestra el botón de la aplicación del emisor

Sequence diagram showing how Apple Wallet discovers the issuer application
Apple Wallet detecta que la aplicación del emisor tiene tarjetas disponibles para el aprovisionamiento.

2. Autenticación del usuario final

Sequence diagram showing Apple Wallet triggering issuer UI extension for authentication
Apple Wallet inicia la extensión de IU de la aplicación del emisor para la autenticación.

3. Se muestran las tarjetas disponibles

Sequence diagram showing Apple Wallet requesting card list from issuer
Apple Wallet solicita la lista de tarjetas disponibles y las muestra al usuario final.

4. Tokenización

Sequence diagram showing Apple Wallet requesting provisioning payload and tokenizing
Apple Wallet solicita las cargas útiles de aprovisionamiento y tokeniza las tarjetas seleccionadas.

Integre Apple Wallet mediante el SDK D1

Configuración del SDK

Cuando realiza la inicialización del SDK de iOS, la aplicación del emisor también debe llamar a configure(ConfigParams.walletExtensionConfig(...)) y proporcionar:

cardParamsList

Use esta variante cuando tenga un único consumerId y un único issuerId:

  • cardParamsList – Lista de identificadores de tarjeta, imagen de la tarjeta, títulos del producto y últimos cuatro dígitos. La imagen de la tarjeta y el título del producto se muestran en Apple Wallet.

  • appGroupID – El ID del contenedor compartido para que el SDK D1 pueda compartir datos entre la aplicación del emisor y sus extensiones.

issuerParamsList

Use esta variante cuando admita múltiples combinaciones de issuerId y consumerId:

  • issuerParamsList – Lista de cardParamsList con el correspondiente issuerId y consumerId.

  • appGroupID – El ID del contenedor compartido para que el SDK D1 pueda compartir datos entre la aplicación del emisor y sus extensiones.

Recomendamos encarecidamente usar el last4 parámetro.

Sin last4, el SDK puede interpretar mal el estado de la tokenización en escenarios con dispositivo compartido. Por ejemplo, si el Usuario A tokeniza una tarjeta y luego el Usuario B inicia sesión en la misma aplicación del emisor en el mismo dispositivo, el SDK podría asumir incorrectamente que la tokenización ya se completó para el Usuario B.

ID del grupo de la app

De forma predeterminada, la aplicación del emisor y sus extensiones no comparten almacenamiento. Use grupos de apps para compartir almacenamiento entre ellas. Consulte el descripción general de la extensión de Apple para más detalles.

appGroupID identifica el contenedor compartido entre la aplicación del emisor y sus extensiones. Se configura en Xcode en Capabilities.

Xcode configuration for app groups used by issuer application and extensions
Ejemplo de configuración de un grupo de apps en Xcode para la aplicación del emisor y sus extensiones.

Asegúrese de que el ID del grupo de apps se añada correctamente en Xcode antes de usarlo en configure(ConfigParams.walletExtensionConfig(...)). De lo contrario, el SDK D1 devuelve el invalidAppGroupID error.

Entitlement de Apple Pay

De forma similar al aprovisionamiento de Apple Pay dentro de la app, debe añadir el entitlement com.apple.developer.payment-pass-provisioning a los targets de extensión con y sin IU. Para obtener detalles de incorporación, consulte la documentación de aprovisionamiento de Apple Wallet o Incorporación de aprovisionamiento push para carteras.

Extensión de IU

Crear una extensión de IU

Xcode dialog for creating an intents UI extension
Cree un target de Intents UI Extension en Xcode para la extensión de IU de Apple Wallet.
1

Añada un nuevo target en Xcode de tipo Extensión de IU de Intents.

2

En el nuevo target, habilite los mismos valores de ID del grupo de apps y de entitlement que en la aplicación del emisor. Si el ID del grupo de apps es diferente, el login API devuelve el walletExtensionAppGroupIDNotFound error.

3

Actualice la extensión Info.plist:

  • Establezca NSExtensionPointIdentifier en com.apple.PassKit.issuer-provisioning.authorization.

  • Establezca NSExtensionPrincipalClass a una clase que cumpla con D1IssuerProvisioningExtensionAuthorizationProviding.

Ejemplo de entitlements y configuración de la extensión:

Integre el SDK para la extensión de IU

El SDK D1 proporciona el D1IssuerProvisioningExtensionAuthorizationProviding protocolo, que extiende el de Apple PKIssuerProvisioningExtensionAuthorizationProviding y añade bindingHash() y login() APIs.

En la extensión de IU, implemente un controlador de vista que cumpla con D1IssuerProvisioningExtensionAuthorizationProviding, autentica al usuario final, llama a bindingHash() para recuperar el cbp, solicita el token del emisor al backend del emisor con este cbp, y luego llama a login. Consulte la inicio de sesión del SDK documentación para la generación de tokens.

Inicio de sesión con un único issuerId

Inicio de sesión con varios issuerIds

Si las tarjetas comparten el mismo issuerId pero tienen diferentes consumerId valores, genere un solo issuerToken para ese issuerId.

Extensión sin IU

Crear una extensión sin IU

Xcode dialog for creating an intents extension without UI
Cree un target de Intents Extension en Xcode para la extensión sin IU de Apple Wallet.
1

Añada un nuevo target en Xcode de tipo Extensión de Intents. Desmarque Incluir extensión de IU porque la extensión de IU se creó previamente.

2

En el nuevo target, habilite los mismos valores de ID del grupo de apps y de entitlement que en la aplicación del emisor. Si el ID del grupo de apps es diferente, las operaciones del SDK D1 devuelven el walletExtensionAppGroupIDNotFound error.

3

Actualice la extensión Info.plist:

  • Establezca NSExtensionPointIdentifier en com.apple.PassKit.issuer-provisioning.

  • Establezca NSExtensionPrincipalClass a una clase que extienda D1IssuerProvisioningExtensionHandler.

Ejemplo de entitlements y configuración de la extensión:

Integre el SDK para la extensión sin IU

El SDK D1 proporciona la clase base D1IssuerProvisioningExtensionHandler, que extiende el de Apple PKIssuerProvisioningExtensionHandler e implementa las API requeridas. En la mayoría de los casos, solo necesita extender esta clase.

Gestión de errores

Opcionalmente, sobrescriba errorEncountered(_:) en la extensión sin IU para registrar o hacer seguimiento de los errores recibidos durante el flujo de la extensión.

Los casos de error típicos incluyen:

  • El appGroupID es inválido o no se encuentra.

  • El backend D1 devuelve un error.

Requisitos funcionales de Apple

Para alinearse con los requisitos funcionales de Apple, el SDK D1 D1IssuerProvisioningExtensionHandler y la aplicación del emisor adoptan las siguientes prácticas:

  • Muestre la imagen de la tarjeta y el nombre del titular.

  • Determine si hay tarjetas disponibles (elegibilidad) en un plazo de 100 ms desde que Apple invoque la API.

  • Proporcione la imagen de la tarjeta y los iconos de la app con bordes cuadrados.

  • Admita tanto métodos de inicio de sesión manual como biométrico para la autenticación en la extensión de IU.

Preguntas frecuentes

¿Cómo puede la aplicación del emisor proporcionar la disponibilidad de tarjetas a Apple Wallet antes de que el usuario final inicie sesión?

El usuario final debe iniciar sesión en la aplicación del emisor al menos una vez para que la extensión pueda actualizarse con el estado de la tarjeta. La aplicación del emisor llama a configure(ConfigParams.walletExtensionConfig()) para proporcionar la lista de tarjetas al SDK D1.

Si falla un inicio de sesión, ¿dónde se muestra el error?

Recomendamos mostrar los errores de inicio de sesión directamente en la pantalla de inicio de sesión de la extensión de IU. La extensión de IU debe seguir las mismas directrices de UX que el inicio de sesión de la aplicación del emisor.

¿Cuáles son los requisitos de tamaño y resolución para las imágenes de las tarjetas?

La imagen digital de la tarjeta debe seguir los requisitos funcionales de Apple:

  • Proporcione las imágenes en PNG (recomendado) o PDF vectorial.

    • Las extensiones de Wallet tienen límites de memoria más estrictos que las aplicaciones principales.

    • Los archivos PDF aumentan el uso de memoria porque el sistema operativo los convierte a PNG.

  • Use una resolución de 1536 × 969.

  • Asegúrese de que el tamaño de la imagen sea inferior a 4 MB.

  • Use esquinas cuadradas (no redondeadas).

  • Excluya los elementos exclusivos de la tarjeta física (por ejemplo, PAN, caracteres en relieve, holograma, contactos del chip).

  • Use orientación horizontal. Si la tarjeta física es vertical, reoriéntela a horizontal.

  • Opcionalmente, agregue el indicador sin contacto cuando se admitan pagos NFC.

¿Las extensiones requieren nuevos identificadores de paquete?

Sí. Los nuevos identificadores de paquete deben incluirse en el associatedApplicationIdentifier del operador de la red de pagos (PNO). iOS admite identificadores de paquete comodín.

Los emisores también deben actualizar los pases existentes en Apple Wallet mediante las API de PNO. Si el ID del paquete no está incluido, la aplicación emisora no puede acceder a las tarjetas añadidas a través de la extensión de Apple Wallet (por ejemplo, para comprobaciones del estado de digitalización).

¿Qué podría estar mal si el icono de la aplicación emisora no aparece en Apple Wallet?

Compruebe lo siguiente:

  • La aplicación emisora está instalada y se ha abierto al menos una vez.

  • La aplicación emisora llama a configure(ConfigParams.walletExtensionConfig()) para actualizar la lista de tarjetas.

  • La aplicación emisora y ambas extensiones usan el mismo appGroupID en configure(ConfigParams.walletExtensionConfig()) y en las capacidades de Xcode.

¿Se requiere aprovisionamiento desde la app para que las extensiones de Apple Wallet funcionen?

Sí. La aplicación emisora debe implementar primero el aprovisionamiento push en la app para las billeteras antes de agregar extensiones de Apple Wallet.

Última actualización

¿Te fue útil?