Implémenter les web paywalls dans le SDK iOS

Important

Avant de commencer, assurez-vous d’avoir configuré votre web paywall dans le tableau de bord et d’avoir installé la version 3.6.1 ou ultérieure du SDK Adapty.

Paywalls web ouverts

Si vous travaillez avec un paywall que vous avez développé vous-même, vous devez gérer les paywalls web à l’aide de la méthode SDK. La méthode .openWebPaywall :

  1. Génère une URL unique permettant à Adapty de relier un paywall spécifique affiché à un utilisateur donné à la page web vers laquelle il est redirigé.
  2. Détecte le retour de vos utilisateurs dans l’application, puis appelle .getProfile à intervalles courts pour déterminer si les droits d’accès du profil ont été mis à jour.

Ainsi, si le paiement a réussi et que les droits d’accès ont été mis à jour, l’abonnement s’active dans l’application presque immédiatement.

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

Il existe deux versions de la méthode openWebPaywall :

  1. openWebPaywall(product) qui génère des URLs à partir du paywall et y ajoute les données du produit.
  2. openWebPaywall(paywall) qui génère des URLs à partir du paywall sans ajouter les données du produit. Dans le SDK v4, cette méthode accepte un AdaptyFlowPaywall — une variante paywall du flow récupéré. Vérifiez que flow.paywalls n’est pas vide avant d’y accéder par index, par exemple flow.paywalls[0].

Gérer les erreurs

ErreurDescriptionAction recommandée
AdaptyError.paywallWithoutPurchaseUrlLe paywall ne possède pas d’URL d’achat web configuréeVérifiez que le paywall a bien été configuré dans l’Adapty Dashboard
AdaptyError.productWithoutPurchaseUrlLe produit ne possède pas d’URL d’achat webVérifiez la configuration du produit dans l’Adapty Dashboard
AdaptyError.failedOpeningWebPaywallUrlImpossible d’ouvrir l’URL dans le navigateurVérifiez les paramètres de l’appareil ou proposez une autre méthode d’achat
AdaptyError.failedDecodingWebPaywallUrlÉchec de l’encodage des paramètres dans l’URLVérifiez que les paramètres d’URL sont valides et correctement formatés

Exemple d’implémentation

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) { /* ... */ }
}
Note

Après le retour des utilisateurs dans l’application, actualisez l’interface pour refléter les mises à jour du profil. AdaptyDelegate recevra et traitera les événements de mise à jour du profil.

Ouvrir les paywalls web dans un navigateur intégré

Important

L’ouverture des paywalls web dans un navigateur intégré est prise en charge à partir du SDK Adapty v3.15.

Par défaut, les paywalls web s’ouvrent dans le navigateur externe.

Pour offrir une expérience utilisateur fluide, vous pouvez ouvrir les paywalls web dans un navigateur intégré. La page d’achat web s’affiche alors directement dans votre application, permettant aux utilisateurs de finaliser leurs transactions sans changer d’application.

Pour activer cette option, définissez le paramètre in sur .inAppBrowser :

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