Welcome to our new developer portal! Use the "Ask" button to chat with our AI Agent.

Extensión de Apple Wallet

Extensión de Apple Wallet

Utilice las extensiones de Apple Wallet para permitir a los usuarios finales descubrir y provisionar tarjetas directamente desde la aplicación Apple Wallet, además de la aplicación del emisor.

A través de extensiones de la aplicación, puede exponer funcionalidad 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 el sistema.

Provisionar tarjetas dentro de la aplicación Apple Wallet mejora la experiencia dentro de la aplicación al evitar la introducción manual de los datos de la tarjeta de pago.

Consulte visión general de extensiones de Apple para información general sobre las extensiones de iOS.

Experiencia del usuario

El flujo de extremo a extremo 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 provisionar.

  2. El usuario final se autentica y selecciona qué tarjetas añadir; Apple Wallet solicita entonces la carga útil de provisión 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 una opción cuando hay tarjetas disponibles para provisionar.
1

Descubrir la aplicación del emisor en Apple Wallet

Apple Wallet consulta con la aplicación del emisor para determinar si hay tarjetas disponibles. Si hay tarjetas disponibles, 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 UI de la aplicación del emisor para autenticar al usuario final.

3

Autenticar al usuario final

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

Seleccionar y provisionar 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 UI. 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, diseño de la tarjeta, título del producto y los últimos cuatro dígitos) antes de añadir la tarjeta.

3

Aceptar términos y condiciones

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

4

Carga útil de provisión y tokenización

Para cada tarjeta seleccionada, Apple Wallet solicita una carga útil de provisión 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 con Apple Wallet requiere dos tipos de extensiones de la aplicación del emisor:

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

  • Extensión de UI Autentica al usuario final. Esta es una pantalla separada 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 iniciar la aplicación del emisor al menos una vez.

El SDK D1 proporciona una implementación base para la extensión sin UI para que no tenga que implementar la lógica completa usted mismo. La aplicación del emisor llama a D1Task.configure() con WalletExtensionConfig durante el lanzamiento de la aplicación para compartir 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 lanzamiento de la aplicación para mantener la información de las tarjetas actualizada.

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

Después de una autenticación exitosa en la extensión de UI, la aplicación del emisor debe llamar a D1IssuerProvisioningExtensionAuthorizationProviding.login() para que el SDK pueda continuar con los pasos de la extensión sin UI.

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 provisionar.

2. Autenticación del usuario final

Sequence diagram showing Apple Wallet triggering issuer UI extension for authentication
Apple Wallet inicia la extensión de UI 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 cargas útiles de provisión y tokeniza las tarjetas seleccionadas.

Integre Apple Wallet mediante el SDK D1

Configuración del SDK

Cuando realiza 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 IDs de tarjeta, diseño de la tarjeta, títulos de producto y los últimos cuatro dígitos. El diseño 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 los correspondientes 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 incorrectamente el estado de tokenización en escenarios de dispositivos compartidos. 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 está completa para el Usuario B.

ID de App Group

Por defecto, la aplicación del emisor y sus extensiones no comparten almacenamiento. Use App Groups para compartir almacenamiento entre ellas. Vea el visión general de extensiones de Apple para más detalles.

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

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

Asegúrese de que el ID de App Group esté correctamente añadido a Xcode antes de usarlo en configure(ConfigParams.walletExtensionConfig(...)). De lo contrario, el SDK D1 devuelve el invalidAppGroupID error.

Derecho de Apple Pay

De manera similar a la provisión de Apple Pay dentro de la app, debe añadir el derecho com.apple.developer.payment-pass-provisioning a los objetivos de la extensión de UI y de la extensión sin UI. Para detalles de incorporación, consulte la documentación de provisión de Apple Wallet o Incorporación a la provisión push para carteras.

Extensión de UI

Crear una extensión de UI

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

Añada un nuevo objetivo en Xcode de tipo Intents UI Extension.

2

En el nuevo objetivo, habilite el mismo ID de App Group y los mismos valores de derechos que en la aplicación del emisor. Si el ID de App Group difiere, la login API devuelve el walletExtensionAppGroupIDNotFound error.

3

Actualice el Info.plist:

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

  • Establezca NSExtensionPrincipalClass a una clase que se conforme a D1IssuerProvisioningExtensionAuthorizationProviding.

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

Integre el SDK para la extensión de UI

El SDK D1 proporciona el D1IssuerProvisioningExtensionAuthorizationProviding protocolo, que extiende el PKIssuerProvisioningExtensionAuthorizationProviding de Apple y añade una login API.

En la extensión de UI, implemente un controlador de vista que se conforme a D1IssuerProvisioningExtensionAuthorizationProviding, autentique al usuario final y llame a login con un token de acceso D1 (por ejemplo, un JWT de su backend). Consulte su documentación de inicio de sesión del SDK para la generación de tokens.

Inicio de sesión con un único issuerId

Inicio de sesión con múltiples issuerIds

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

Extensión sin UI

Crear una extensión sin UI

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

Añada un nuevo objetivo en Xcode de tipo Intents Extension. Borre Incluir extensión de UI porque la extensión de UI se creó previamente.

2

En el nuevo objetivo, habilite el mismo ID de App Group y los mismos valores de derechos que en la aplicación del emisor. Si el ID de App Group difiere, las operaciones del SDK D1 devuelven el walletExtensionAppGroupIDNotFound error.

3

Actualice el Info.plist:

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

  • Establezca NSExtensionPrincipalClass a una clase que extienda D1IssuerProvisioningExtensionHandler.

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

Integre el SDK para la extensión sin UI

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

Manejo de errores

Opcionalmente, anule errorEncountered(_:) en la extensión sin UI para registrar o rastrear 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:

  • Mostrar el diseño de la tarjeta y el nombre del titular.

  • Determinar si hay tarjetas disponibles (elegibilidad) en 100 ms desde que Apple invoca la API.

  • Proporcionar diseño de tarjeta e iconos de la app con bordes cuadrados.

  • Soportar métodos de inicio de sesión manual y biométrico para la autenticación en la extensión de UI.

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 las tarjetas. La aplicación del emisor llama a configure(ConfigParams.walletExtensionConfig()) para proporcionar la lista de tarjetas al SDK D1.

Si un inicio de sesión falla, ¿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 UI. La extensión de UI 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 de la tarjeta digital debe seguir los requisitos funcionales de Apple:

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

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

    • Los archivos PDF incrementan 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 elementos solo 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, reoriente a horizontal.

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

¿Requieren las extensiones nuevos identificadores de paquete (bundle)?

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

Los emisores también deben actualizar los pases existentes en Apple Wallet usando las APIs del PNO. Si el ID de paquete no está incluido, las tarjetas añadidas mediante la extensión de Apple Wallet no podrán ser accedidas por la aplicación del emisor (por ejemplo, para comprobaciones del estado de digitalización).

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

Compruebe lo siguiente:

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

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

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

¿Es obligatorio el aprovisionamiento dentro de la app para que las extensiones de Apple Wallet funcionen?

Sí. La aplicación del emisor debe primero implementar el aprovisionamiento push dentro de la app a las carteras antes de añadir las extensiones de Apple Wallet.

Última actualización

¿Te fue útil?