Implementar web paywalls en el SDK de iOS

Antes de empezar, asegúrate de haber configurado tu web paywall en el dashboard y de tener instalada la versión 3.6.1 o posterior del SDK de Adapty.

Abrir web paywalls

Si estás trabajando con un paywall que desarrollaste tú mismo, debes gestionar los web paywalls usando el método del SDK. El método .openWebPaywall:

  1. Genera una URL única que permite a Adapty vincular un paywall específico mostrado a un usuario concreto con la página web a la que es redirigido.
  2. Detecta cuando tus usuarios vuelven a la app y luego solicita .getProfile a intervalos cortos para determinar si los derechos de acceso del perfil se han actualizado.

De este modo, si el pago se ha completado correctamente y los derechos de acceso se han actualizado, la suscripción se activa en la app casi de inmediato.

do {
    try await Adapty.openWebPaywall(for: product)
} catch {
    print("Failed to open web paywall: \(error)")
}

Existen dos versiones del método openWebPaywall:

  1. openWebPaywall(product), que genera URLs a partir del paywall y también añade los datos del producto a las URLs.
  2. openWebPaywall(paywall), que genera URLs a partir del paywall sin añadir los datos del producto. Úsalo cuando tus productos en el paywall de Adapty sean distintos de los del web paywall.

Gestionar errores

ErrorDescripciónAcción recomendada
AdaptyError.paywallWithoutPurchaseUrlEl paywall no tiene configurada una URL de compra webComprueba si el paywall está correctamente configurado en el Adapty Dashboard
AdaptyError.productWithoutPurchaseUrlEl producto no tiene una URL de compra webVerifica la configuración del producto en el Adapty Dashboard
AdaptyError.failedOpeningWebPaywallUrlNo se pudo abrir la URL en el navegadorRevisa la configuración del dispositivo o proporciona un método de compra alternativo
AdaptyError.failedDecodingWebPaywallUrlNo se pudieron codificar correctamente los parámetros de la URLVerifica que los parámetros de la URL sean válidos y estén correctamente formateados

Ejemplo de implementación

class SubscriptionViewController: UIViewController {
    var paywall: AdaptyPaywall?
    
    @IBAction func purchaseButtonTapped(_ sender: UIButton) {
        guard let paywall = paywall, let product = paywall.products.first else { return }
         Task {
            await offerWebPurchase(for: product)
         }
    }
    
    func offerWebPurchase(for paywallProduct: AdaptyPaywallProduct) async {
        do {
            // Attempt to open web paywall
            try await Adapty.openWebPaywall(for: paywallProduct)
        } catch let error as AdaptyError {
            
            switch error {
            case .paywallWithoutPurchaseUrl, .productWithoutPurchaseUrl:
                showAlert(message: "Web purchase is not available for this product.")
            case .failedOpeningWebPaywallUrl:
                showAlert(message: "Could not open web browser. Please try again.")
            default:
                showAlert(message: "An error occurred: \(error.localizedDescription)")
            }
        } catch {
            showAlert(message: "An unexpected error occurred.")
        }
    }
    
    // Helper methods
    private func showAlert(message: String) { /* ... */ }
}

Cuando los usuarios vuelvan a la app, actualiza la interfaz para reflejar los cambios del perfil. AdaptyDelegate recibirá y procesará los eventos de actualización del perfil.

Abrir web paywalls en un navegador in-app

La apertura de web paywalls en un navegador in-app es compatible a partir del SDK de Adapty v. 3.15.

Por defecto, los web paywalls se abren en el navegador externo.

Para ofrecer una experiencia de usuario más fluida, puedes abrir los web paywalls en un navegador in-app. Esto muestra la página de compra web dentro de tu aplicación, permitiendo a los usuarios completar las transacciones sin cambiar de app.

Para activarlo, establece el parámetro in en .inAppBrowser:

do {
    try await Adapty.openWebPaywall(for: product, in: .inAppBrowser) // default – .externalBrowser
} catch {
    print("Failed to open web paywall: \(error)")
}