En el comercio móvil actual, la fricción en el momento del pago es el enemigo número uno de las conversiones. Ofrecer un proceso de compra rápido, seguro y sin interrupciones es vital para el éxito de cualquier aplicación móvil. Aquí es donde Apple Pay se convierte en una herramienta indispensable para los desarrolladores de iOS.
Implementar Apple Pay en una aplicación de Swift no solo mejora la experiencia de usuario (UX), sino que también aumenta la tasa de conversión hasta en un 20%. En esta guía completa, aprenderás paso a paso cómo configurar e implementar Apple Pay en tu app utilizando Swift, configurar el entorno de Sandbox para pruebas y realizar una integración segura.
Requisitos previos antes de empezar
Antes de escribir la primera línea de código en Xcode, necesitas asegurarte de tener listos los siguientes elementos:
- Una cuenta activa en el Apple Developer Program (es necesaria para crear los identificadores y certificados de comerciante).
- Xcode instalado en su versión más reciente.
- Un dispositivo iOS físico (opcional, pero altamente recomendado para pruebas de hardware, aunque el simulador de Xcode soporta Apple Pay).
- Una cuenta con una pasarela de pago compatible (como Stripe, Braintree, Adyen, etc.) para procesar los tokens de pago que genera Apple Pay.
Paso 1: Configuración en el portal de Apple Developer
Apple Pay requiere una configuración de seguridad estricta para garantizar que los datos de pago viajen encriptados y seguros. Sigue estos pasos para configurar tu cuenta:
1. Crear un Merchant ID (Identificador de Comerciante)
El Merchant ID identifica tu negocio como receptor de pagos autorizados por Apple Pay.
- Inicia sesión en Apple Developer Portal.
- Ve a Certificates, Identifiers & Profiles > Identifiers.
- Haz clic en el botón de añadir (+) y selecciona Merchant IDs.
- Introduce una descripción y un identificador único (se recomienda usar el formato
merchant.com.tuempresa.tuapp). - Haz clic en Continue y luego en Register.
2. Generar el Certificado de Procesamiento de Pagos (Payment Processing Certificate)
Este certificado se utiliza para encriptar la información de pago. Tu pasarela de pagos (por ejemplo, Stripe) lo usará para desencriptar el token de pago de forma segura.
- Ve a la sección de tu nuevo Merchant ID recién creado.
- En la sección Apple Pay Payment Processing Certificate, haz clic en Create Certificate.
- El portal te pedirá un archivo de solicitud de firma de certificado (.certSigningRequest o CSR). Obtén este archivo desde el panel de control de tu pasarela de pagos.
- Sube el archivo CSR a Apple Developer, descarga el certificado generado (
.cer) y vuelve a subirlo a tu pasarela de pagos.
Paso 2: Configuración del proyecto en Xcode
Una vez que tu cuenta de Apple Developer está configurada, es momento de preparar tu proyecto en Xcode para habilitar las capacidades de Apple Pay.
- Abre tu proyecto en Xcode.
- Selecciona el proyecto en el navegador de la izquierda y ve a la pestaña Signing & Capabilities.
- Haz clic en el botón + Capability en la esquina superior izquierda.
- Busca y añade Apple Pay.
- En la sección de Apple Pay que ahora aparece, verás una lista de Merchant IDs. Marca la casilla del Merchant ID que creaste en el paso anterior. Si no aparece, haz clic en el botón de refrescar.
Nota: Asegúrate de que tu cuenta de Apple Developer esté correctamente vinculada a Xcode en las preferencias de la app.
Paso 3: Implementando Apple Pay con Swift (PassKit)
Para interactuar con Apple Pay en nuestro código, utilizaremos el framework nativo de Apple llamado PassKit.
A continuación, crearemos un servicio sencillo para gestionar la petición de pago.
import Foundation
import PassKit
class PaymentManager: NSObject {
// Define tu Merchant ID y las redes de pago soportadas
private let merchantIdentifier = "merchant.com.tuempresa.tuapp"
private let paymentNetworks: [PKPaymentNetwork] = [.visa, .mastercard, .amex]
// Función para comprobar si el usuario puede realizar pagos
func canMakePayments() -> Bool {
return PKPaymentAuthorizationController.canMakePayments(usingNetworks: paymentNetworks)
}
// Crear la solicitud de pago
func createPaymentRequest(amount: Double, productName: String) -> PKPaymentRequest {
let request = PKPaymentRequest()
request.merchantIdentifier = merchantIdentifier
request.supportedNetworks = paymentNetworks
request.merchantCapabilities = .capability3DS // Requerido en la mayoría de países
request.countryCode = "ES" // Código ISO del país de tu negocio
request.currencyCode = "EUR" // Código de moneda
// Configurar los elementos del carrito de compras
let productItem = PKPaymentSummaryItem(label: productName, amount: NSDecimalNumber(value: amount))
let totalItem = PKPaymentSummaryItem(label: "Tu Empresa S.L.", amount: NSDecimalNumber(value: amount))
request.paymentSummaryItems = [productItem, totalItem]
return request
}
}
Presentar la pantalla de pago en tu ViewController
Ahora, implementaremos la lógica para mostrar la hoja de pago nativa de Apple Pay al usuario cuando pulse un botón.
import UIKit
import PassKit
class CheckoutViewController: UIViewController {
let paymentManager = PaymentManager()
override func viewDidLoad() {
super.viewDidLoad()
setupApplePayButton()
}
func setupApplePayButton() {
// Usamos el botón nativo de Apple Pay para cumplir con las directrices de diseño de Apple
let paymentButton = PKPaymentButton(paymentButtonType: .buy, paymentButtonStyle: .black)
paymentButton.addTarget(self, action: #selector(applePayButtonTapped), for: .touchUpInside)
paymentButton.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(paymentButton)
NSLayoutConstraint.activate([
paymentButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
paymentButton.centerYAnchor.constraint(equalTo: view.centerYAnchor),
paymentButton.widthAnchor.constraint(equalToConstant: 280),
paymentButton.heightAnchor.constraint(equalToConstant: 50)
])
}
@objc func applePayButtonTapped() {
guard paymentManager.canMakePayments() else {
// Mostrar alerta informando que Apple Pay no está disponible o no hay tarjetas configuradas
return
}
let request = paymentManager.createPaymentRequest(amount: 19.99, productName: "Suscripción Premium")
guard let paymentVC = PKPaymentAuthorizationViewController(paymentRequest: request) else { return }
paymentVC.delegate = self
present(paymentVC, animated: true, completion: nil)
}
}
Procesar el resultado del pago (Delegados)
Para manejar la respuesta del usuario (si autoriza el pago con FaceID/TouchID o si cancela), debemos adoptar el protocolo PKPaymentAuthorizationViewControllerDelegate.
extension CheckoutViewController: PKPaymentAuthorizationViewControllerDelegate {
// 1. Procesar el token de pago enviado por Apple
func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
didAuthorizePayment payment: PKPayment,
handler @escaping (PKPaymentAuthorizationResult) -> Void) {
// El objeto `payment.token` contiene los datos encriptados.
// Aquí debes enviar este token a tu servidor backend o directamente a tu pasarela de pagos (Stripe, etc.)
let paymentSuccess = true // Cambiar según la respuesta de tu pasarela de pagos
if paymentSuccess {
handler(PKPaymentAuthorizationResult(status: .success, errors: nil))
} else {
handler(PKPaymentAuthorizationResult(status: .failure, errors: nil))
}
}
// 2. Cerrar la vista de Apple Pay cuando termina el proceso
func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
dismiss(animated: true, completion: nil)
}
}
Paso 4: Configuración del entorno Sandbox (Pruebas)
Nunca utilices tarjetas de crédito reales para probar tu implementación. Apple ofrece un entorno seguro de pruebas (Sandbox) para simular transacciones exitosas y fallidas.
Cómo crear un usuario Sandbox Tester:
- Ve a App Store Connect.
- Selecciona Users and Access (Usuarios y Acceso).
- En el menú de la izquierda, bajo la sección Sandbox, haz clic en Testers.
- Haz clic en el botón + para crear un nuevo usuario de pruebas. Rellena los datos con un correo electrónico real que no esté asociado a ninguna cuenta de Apple existente.
Configurar el dispositivo de pruebas:
- En tu dispositivo iOS de prueba, cierra sesión en tu Apple ID personal (ajustes del sistema).
- Inicia sesión con la cuenta del Sandbox Tester que acabas de crear.
- Abre la app Wallet de Apple.
- Añade una nueva tarjeta de débito/crédito. Utiliza los números de tarjeta de prueba oficiales que proporciona Apple en su documentación o los que provea tu pasarela de pagos (por ejemplo, los números de prueba de Stripe para Apple Pay).
¡Listo! Ahora, cuando ejecutes tu app desde Xcode y presiones el botón de Apple Pay, podrás simular compras completas usando FaceID o TouchID sin gastar dinero real.
Conclusión
Implementar Apple Pay en Swift es un proceso directo que combina una configuración inicial rigurosa en el portal de desarrolladores con un código de Swift limpio gracias a la potencia de PassKit.
Al integrar esta pasarela de pago, no solo mejoras la seguridad de los datos de tus usuarios mediante la tokenización de Apple, sino que también eliminas las barreras de compra en tu aplicación, resultando en un aumento directo de tus ingresos. Sigue estos pasos meticulosamente, haz pruebas exhaustivas en el entorno de Sandbox y estarás listo para lanzar tu app al mercado con una de las mejores experiencias de pago del mundo.