Récupérer les flows & paywalls - iOS

Ce que récupère getFlow
Flows Créés dans le Flow Builder — rendus nativement sur l'appareil, sans WebView
Paywalls du Paywall Builder Tout le contenu existant du Paywall Builder

Après avoir conçu votre flow ou paywall avec le Paywall Builder, vous pouvez l’afficher dans votre application mobile. La première étape consiste à récupérer le flow ou le paywall associé au placement ainsi que sa configuration d’affichage, comme décrit ci-dessous.

Tip

Vous souhaitez voir un exemple concret d’intégration du SDK Adapty dans une application mobile ? Consultez nos exemples d’applications, qui illustrent la configuration complète, notamment l’affichage des paywalls, les achats et d’autres fonctionnalités de base.

Avant de commencer
  1. Créez vos produits dans l’Adapty Dashboard.
  2. Créez un flow/paywall et intégrez-y des produits dans l’Adapty Dashboard.
  3. Créez des placements et intégrez-y votre flow/paywall dans l’Adapty Dashboard.
  4. Installez le SDK Adapty dans votre application mobile.

Récupérer un flow/paywall

Si vous avez conçu un flow ou un paywall avec le Flow Builder ou le Paywall Builder, vous n’avez pas à vous soucier de son rendu dans le code de votre application mobile pour l’afficher à l’utilisateur. Un tel flow ou paywall contient à la fois ce qui doit être affiché et la manière dont cela doit l’être. Vous devez néanmoins récupérer son ID via le placement, sa configuration d’affichage, puis le présenter dans votre application mobile.

Récupérez le flow ou le paywall et sa configuration de vue le plus tôt possible — idéalement bien avant de l’afficher. Dès que vous récupérez la configuration de vue, le SDK commence à télécharger et mettre en cache ses images en arrière-plan. Plus tôt vous la récupérez, plus ces téléchargements ont de temps pour se terminer. Au moment où vous affichez le flow ou le paywall, sa configuration et ses images peuvent déjà être mises en cache et prêtes à afficher.

Pour obtenir un flow ou un paywall, utilisez la méthode getFlow :

Paramètres :

ParamètrePrésenceDescription
placementIdrequisL’identifiant du Placement souhaité. C’est la valeur que vous avez indiquée lors de la création d’un placement dans l’Adapty Dashboard.
fetchPolicypar défaut : .reloadRevalidatingCacheData

Par défaut, le SDK tente de charger les données depuis le serveur et renvoie les données en cache en cas d’échec. Nous recommandons cette option, car elle garantit que vos utilisateurs disposent toujours des données les plus récentes.

Cependant, si vous pensez que vos utilisateurs ont une connexion internet instable, envisagez d’utiliser .returnCacheDataElseLoad pour renvoyer les données en cache lorsqu’elles existent. Dans ce cas, les utilisateurs ne disposeront peut-être pas des toutes dernières données, mais les temps de chargement seront plus rapides, quelle que soit la qualité de leur connexion. Le cache est mis à jour régulièrement, il est donc sûr de l’utiliser pendant la session pour éviter les requêtes réseau.

Notez que le cache reste intact après un redémarrage de l’application et n’est effacé qu’en cas de réinstallation ou de nettoyage manuel.

Le SDK Adapty stocke les paywalls localement sur deux couches : le cache mis à jour régulièrement décrit ci-dessus et les paywalls de secours. Nous utilisons également un CDN pour récupérer les paywalls plus rapidement, ainsi qu’un serveur de secours indépendant en cas d’indisponibilité du CDN. Ce système est conçu pour vous garantir toujours la dernière version de vos paywalls, tout en assurant la fiabilité même lorsque la connexion internet est limitée.

loadTimeoutpar défaut : 5 s

Cette valeur limite le délai d’expiration de cette méthode. Si le délai est atteint, les données en cache ou le fallback local sont renvoyés.

Notez que dans de rares cas, cette méthode peut expirer légèrement après le délai indiqué dans loadTimeout, car l’opération peut être composée de différentes requêtes en coulisses.

Paramètres de réponse :

ParamètreDescription
FlowUn objet AdaptyFlow contenant le placement, les identifiants (id, variationId), le nom, les Remote Configs, et un indicateur hasViewConfiguration précisant si le flow inclut une configuration de vue. Pour récupérer les produits réels en vue d’un préchargement, d’une interface personnalisée ou de vérifications programmatiques, appelez getPaywallProducts(flow:).

Récupérer la configuration de vue

Après avoir récupéré le flow ou le paywall, vérifiez s’il inclut une configuration de vue via flow.hasViewConfiguration. Ce flag distingue la façon dont le placement a été conçu dans l’Adapty Dashboard :

  • true — le placement a été conçu dans le Flow Builder (un flow) ou le Paywall Builder (un paywall). Adapty génère l’interface utilisateur pour vous. Continuez avec les étapes ci-dessous pour récupérer la configuration de vue et présenter le flow ou le paywall.
  • false — le placement est un paywall personnalisé sans interface Builder.

Utilisez la méthode getFlowConfiguration pour charger la configuration de la vue.


guard flow.hasViewConfiguration else {
    // handle as remote config paywall
    return
}

let flowConfiguration = try await AdaptyUI.getFlowConfiguration(forFlow: flow)

Paramètres :

ParamètrePrésenceDescription
forFlowrequisUn objet AdaptyFlow obtenu via Adapty.getFlow.
locale

optionnel

par défaut : nil

L’identifiant de la localisation du paywall. Attendu sous la forme d’un code de langue avec un ou deux sous-tags séparés par - (ex. : en, pt-br). Voir Localisations et codes de langue.
customLayoutId

optionnel

par défaut : nil

SDK 4.1+

L’ID personnalisé d’un layout défini dans le Flow Builder. Passez-le pour afficher ce layout spécifique plutôt que celui que le SDK sélectionne automatiquement en fonction du type d’appareil et de la taille d’écran. Si aucun layout ne correspond à l’ID, le flow se charge sans configuration de vue.
loadTimeoutpar défaut : 5 secCette valeur limite le délai d’attente de cette méthode. Si le délai est dépassé, les données en cache ou le fallback local seront retournés. Notez que dans de rares cas, cette méthode peut expirer légèrement après la durée spécifiée dans loadTimeout, car l’opération peut impliquer différentes requêtes en arrière-plan.
productsoptionnelFournissez un tableau d’objets AdaptyPaywallProduct pour optimiser le moment d’affichage des produits à l’écran. Si nil est passé, AdaptyUI récupérera automatiquement les produits nécessaires.
systemRequestsHandleroptionnelUn objet conforme à AdaptySystemRequestsHandler qui gère les demandes de permissions système et les demandes d’avis déclenchées par les actions du flow. Requis uniquement si votre flow inclut de telles actions.
assetsResolveroptionnelUn dictionnaire [String: AdaptyCustomAsset] qui remplace les images et vidéos dans le flow/paywall. Voir Personnaliser les assets.
timerResolveroptionnelUn objet conforme à AdaptyTimerResolver qui fournit les dates de fin pour les minuteries définies par le développeur. Voir Configurer les minuteries définies par le développeur.

Une fois chargé, présentez le flow/paywall.

Récupérer un flow ou un paywall pour une audience par défaut afin d’accélérer la récupération

En général, les flows et les paywalls sont récupérés presque instantanément, vous n’avez donc pas à vous soucier d’accélérer ce processus. Cependant, si vous avez de nombreuses audiences et placements, et que vos utilisateurs ont une connexion internet faible, la récupération d’un flow ou d’un paywall peut prendre plus de temps que souhaité. Dans ce cas, vous pouvez afficher un flow ou un paywall par défaut pour garantir une expérience utilisateur fluide plutôt que de ne rien afficher.

Pour y remédier, vous pouvez utiliser la méthode getFlowForDefaultAudience, qui récupère le flow ou le paywall du placement spécifié pour l’audience All Users. Cependant, il est essentiel de comprendre que l’approche recommandée est de récupérer le flow ou le paywall via la méthode getFlow, comme décrit dans la section Récupérer les informations du paywall ci-dessus.

Warning

Pourquoi nous recommandons d’utiliser getFlow

La méthode getFlowForDefaultAudience présente quelques inconvénients majeurs :

  • Problèmes potentiels de compatibilité ascendante : Si vous devez afficher des paywalls différents selon les versions de l’application (version actuelle et versions futures), vous pourrez rencontrer des difficultés. Vous devrez soit concevoir des paywalls compatibles avec la version actuelle (ancienne), soit accepter que les utilisateurs de cette version puissent rencontrer des problèmes avec des paywalls non affichés.
  • Perte de ciblage : Tous les utilisateurs verront le même paywall conçu pour l’audience All Users, ce qui signifie que vous perdez le ciblage personnalisé (notamment selon les pays, l’attribution marketing ou vos propres attributs personnalisés).

Si vous acceptez ces inconvénients pour bénéficier d’une récupération plus rapide du flow ou du paywall, utilisez la méthode getFlowForDefaultAudience comme suit. Sinon, restez sur getFlow décrit ci-dessus.

Adapty.getFlowForDefaultAudience(placementId: "YOUR_PLACEMENT_ID") { result in
    switch result {
        case let .success(flow):
            // the requested flow
        case let .failure(error):
            // handle the error
    }
}
ParamètrePrésenceDescription
placementIdrequisL’identifiant du Placement. C’est la valeur que vous avez spécifiée lors de la création d’un placement dans votre Adapty Dashboard.
fetchPolicypar défaut : .reloadRevalidatingCacheData

Par défaut, le SDK tente de charger les données depuis le serveur et renvoie les données mises en cache en cas d’échec. Nous recommandons cette option, car elle garantit que vos utilisateurs reçoivent toujours les données les plus récentes.

Cependant, si vous pensez que vos utilisateurs ont une connexion internet instable, envisagez d’utiliser .returnCacheDataElseLoad pour renvoyer les données mises en cache si elles existent. Dans ce cas, les utilisateurs ne disposeront peut-être pas des toutes dernières données, mais les temps de chargement seront plus rapides, quelle que soit la qualité de leur connexion. Le cache est mis à jour régulièrement, il est donc sûr de l’utiliser pendant la session pour éviter les requêtes réseau.

Notez que le cache reste intact après le redémarrage de l’application et n’est effacé que lors de la désinstallation ou d’un nettoyage manuel.

Personnaliser les ressources

Pour personnaliser les images et vidéos de votre paywall/flow, implémentez des ressources personnalisées.

Les images et vidéos hero ont des identifiants prédéfinis : hero_image et hero_video. Dans un bundle de ressources personnalisées, vous ciblez ces éléments par leurs identifiants et personnalisez leur comportement.

Pour les autres images et vidéos, vous devez définir un identifiant personnalisé dans l’Adapty Dashboard.

Par exemple, vous pouvez :

  • Afficher une image ou vidéo différente à certains utilisateurs.
  • Afficher une image de prévisualisation locale pendant le chargement d’une image principale distante.
  • Afficher une image de prévisualisation avant de lancer une vidéo.
  • Fournir la résolution en pixels d’une vidéo afin que le lecteur réserve l’espace de mise en page (ratio = width / height) avant le chargement de la vidéo. Passez nil pour ignorer cela.

Voici un exemple de la façon dont vous pouvez fournir des ressources personnalisées via un simple dictionnaire :

let customAssets: [String: AdaptyCustomAsset] = [
    // Show a local image using a custom ID
    "custom_image": .image(
        .uiImage(value: UIImage(named: "image_name")!)
    ),

    // Show a local preview image while a remote main image is loading
    "hero_image": .image(
        .remote(
            url: URL(string: "https://example.com/image.jpg")!,
            preview: UIImage(named: "preview_image")
        )
    ),

    // Show a local video with a preview image and a known resolution
    "hero_video": .video(
        .file(
            url: Bundle.main.url(forResource: "custom_video", withExtension: "mp4")!,
            preview: .uiImage(value: UIImage(named: "video_preview")!),
            resolution: CGSize(width: 1080, height: 1920)
        )
    ),
]

let flowConfig = try await AdaptyUI.getFlowConfiguration(
    forFlow: flow,
    assetsResolver: customAssets
)
Note

Si une ressource est introuvable, le paywall/flow reviendra à son apparence par défaut.

Configurer les minuteries définies par le développeur

Pour utiliser des minuteries personnalisées dans votre application mobile, créez un objet qui suit le protocole AdaptyTimerResolver. Cet objet définit comment chaque minuterie personnalisée doit être rendue. Si vous préférez, vous pouvez utiliser directement un dictionnaire [String: Date], car il est déjà conforme à ce protocole. Voici un exemple :

@MainActor
struct AdaptyTimerResolverImpl: AdaptyTimerResolver {
    func timerEndAtDate(for timerId: String) -> Date {
        switch timerId {
        case "CUSTOM_TIMER_6H":
            Date(timeIntervalSinceNow: 3600.0 * 6.0) // 6 hours
        case "CUSTOM_TIMER_NY":
            Calendar.current.date(from: DateComponents(year: 2025, month: 1, day: 1)) ?? Date(timeIntervalSinceNow: 3600.0)
        default:
            Date(timeIntervalSinceNow: 3600.0) // 1 hour
        }
    }
}

Dans cet exemple, CUSTOM_TIMER_NY et CUSTOM_TIMER_6H sont les Timer IDs des minuteurs définis par le développeur que vous avez configurés dans l’Adapty Dashboard. Le timerResolver garantit que votre application met à jour dynamiquement chaque minuteur avec la valeur correcte. Par exemple :

  • CUSTOM_TIMER_NY : le temps restant jusqu’à la fin du minuteur, par exemple le Jour de l’An.
  • CUSTOM_TIMER_6H : le temps restant dans une période de 6 heures qui a démarré lorsque l’utilisateur a ouvert le paywall.

Après avoir conçu la partie visuelle de votre paywall avec le Paywall Builder dans l’Adapty Dashboard, vous pouvez l’afficher dans votre application mobile. La première étape consiste à récupérer le paywall associé au placement et sa configuration d’affichage, comme décrit ci-dessous.

Notez que cette rubrique concerne les paywalls personnalisés avec le Paywall Builder. Si vous implémentez vos paywalls manuellement, consultez Récupérer les paywalls et produits pour les paywalls en Remote Config.

Tip

Vous souhaitez voir un exemple concret d’intégration du SDK Adapty dans une application mobile ? Consultez nos exemples d’applications, qui illustrent la configuration complète, notamment l’affichage des paywalls, les achats et d’autres fonctionnalités de base.

Avant de commencer à afficher des paywalls dans votre application mobile
  1. Créez vos produits dans l’Adapty Dashboard.
  2. Créez un paywall et intégrez-y les produits dans l’Adapty Dashboard.
  3. Créez des placements et intégrez-y votre paywall dans l’Adapty Dashboard.
  4. Installez le SDK Adapty dans votre application mobile.

Récupérer un paywall conçu avec le Paywall Builder

Si vous avez conçu un paywall avec le Paywall Builder, vous n’avez pas à vous soucier de son rendu dans le code de votre application mobile pour l’afficher à l’utilisateur. Un tel paywall contient à la fois ce qui doit être affiché et la manière dont cela doit l’être. Vous devez néanmoins récupérer son identifiant via le placement, sa configuration d’affichage, puis le présenter dans votre application mobile.

Pour garantir des performances optimales, il est essentiel de récupérer le paywall et sa configuration de vue le plus tôt possible, afin de laisser suffisamment de temps aux images de se télécharger avant de les afficher à l’utilisateur.

Pour obtenir un paywall, utilisez la méthode getPaywall :

Paramètres :

ParamètrePrésenceDescription
placementIdobligatoireL’identifiant du Placement souhaité. C’est la valeur que vous avez indiquée lors de la création d’un placement dans l’Adapty Dashboard.
locale

optionnel

par défaut : en

L’identifiant de la localisation du paywall. Ce paramètre doit être un code de langue composé d’un ou deux sous-tags séparés par le caractère moins (-). Le premier sous-tag correspond à la langue, le second à la région.

Exemple : en désigne l’anglais, pt-br représente le portugais brésilien.

Consultez Localisations et codes de locale pour plus d’informations sur les codes de locale et nos recommandations d’utilisation.

fetchPolicypar défaut : .reloadRevalidatingCacheData

Par défaut, le SDK tente de charger les données depuis le serveur et renvoie les données en cache en cas d’échec. Nous recommandons cette option, car elle garantit que vos utilisateurs disposent toujours des données les plus récentes.

Toutefois, si vous pensez que vos utilisateurs ont une connexion instable, envisagez d’utiliser .returnCacheDataElseLoad pour renvoyer les données en cache lorsqu’elles existent. Dans ce cas, les utilisateurs n’obtiendront peut-être pas les toutes dernières données, mais les temps de chargement seront plus rapides, quelle que soit la qualité de leur connexion. Le cache est mis à jour régulièrement, il est donc fiable pour éviter des requêtes réseau pendant la session.

Notez que le cache est conservé lors du redémarrage de l’application et n’est effacé que lors d’une réinstallation ou d’un nettoyage manuel.

Le SDK Adapty stocke les paywalls localement sur deux couches : le cache mis à jour régulièrement décrit ci-dessus et les paywalls de secours. Nous utilisons également un CDN pour récupérer les paywalls plus rapidement et un serveur de secours indépendant en cas d’indisponibilité du CDN. Ce système est conçu pour vous garantir toujours la dernière version de vos paywalls, tout en assurant la fiabilité même lorsque la connexion internet est limitée.

loadTimeoutpar défaut : 5 sec

Cette valeur limite le délai d’expiration de cette méthode. Si le délai est atteint, les données en cache ou le fallback local sont renvoyés.

Notez que dans de rares cas, cette méthode peut expirer légèrement après le délai indiqué dans loadTimeout, car l’opération peut reposer sur différentes requêtes en arrière-plan.

ParamètreDescription
PaywallUn objet AdaptyPaywall contenant une liste d’identifiants de produits, l’identifiant du paywall, le Remote Config, ainsi que plusieurs autres propriétés.

Récupérer la configuration de vue d’un paywall créé avec Paywall Builder

Important

Assurez-vous d’activer le bouton Show on device dans le Paywall Builder. Si cette option n’est pas activée, la configuration de vue ne sera pas disponible.

Après avoir récupéré le paywall, vérifiez s’il contient une configuration de vue, ce qui indique qu’il a été créé avec Paywall Builder. Cela vous guidera sur la façon d’afficher le paywall. Si la configuration de vue est présente, traitez-le comme un paywall Paywall Builder ; sinon, gérez-le comme un paywall Remote Config.

Utilisez la méthode getPaywallConfiguration pour charger la configuration de la vue.


guard paywall.hasViewConfiguration else {
    //  use your custom logic
    return
}

do {
    let paywallConfiguration = try await AdaptyUI.getPaywallConfiguration(
            forPaywall: paywall,
            products: products
    )
    // use loaded configuration
} catch {
    // handle the error
}

Paramètres :

ParamètrePrésenceDescription
paywallobligatoireUn objet AdaptyPaywall permettant d’obtenir un contrôleur pour le paywall souhaité.
loadTimeoutdéfaut : 5 secCette valeur limite le délai d’expiration de cette méthode. Si le délai est atteint, les données en cache ou le fallback local seront retournés. Notez que dans de rares cas, cette méthode peut expirer légèrement après la durée indiquée dans loadTimeout, car l’opération peut reposer sur différentes requêtes en coulisses.
productsoptionnelFournissez un tableau d’objets AdaptyPaywallProduct pour optimiser le moment d’affichage des produits à l’écran. Si nil est passé, AdaptyUI récupérera automatiquement les produits nécessaires.
Note

Si vous utilisez plusieurs langues, découvrez comment ajouter une localisation Paywall Builder et comment utiliser correctement les codes de langue ici.

Une fois chargé, présentez le paywall.

Obtenir un paywall pour l’audience par défaut afin d’accélérer le chargement

En règle générale, les paywalls sont récupérés presque instantanément, donc vous n’avez pas à vous soucier d’accélérer ce processus. Cependant, si vous avez de nombreuses audiences et paywalls et que vos utilisateurs disposent d’une connexion internet faible, la récupération d’un paywall peut prendre plus de temps que souhaité. Dans ce cas, vous pouvez afficher un paywall par défaut pour garantir une expérience fluide plutôt que de ne rien afficher du tout.

Pour y remédier, vous pouvez utiliser la méthode getPaywallForDefaultAudience, qui récupère le paywall du placement spécifié pour l’audience All Users. Il est cependant essentiel de comprendre que l’approche recommandée est de récupérer le paywall via la méthode getPaywall, comme indiqué dans la section Récupérer les informations du paywall ci-dessus.

Warning

Pourquoi nous recommandons d’utiliser getPaywall

La méthode getPaywallForDefaultAudience présente quelques inconvénients importants :

  • Problèmes potentiels de compatibilité ascendante : si vous devez afficher des paywalls différents selon les versions de l’application (version actuelle et versions futures), vous risquez de rencontrer des difficultés. Vous devrez soit concevoir des paywalls compatibles avec la version actuelle (ancienne), soit accepter que les utilisateurs de cette version puissent rencontrer des problèmes avec des paywalls non affichés.
  • Perte de ciblage : tous les utilisateurs verront le même paywall conçu pour l’audience All Users, ce qui signifie que vous perdez le ciblage personnalisé (notamment par pays, attribution marketing ou attributs personnalisés).

Si vous acceptez ces inconvénients pour bénéficier d’une récupération plus rapide du paywall, utilisez la méthode getPaywallForDefaultAudience comme suit. Sinon, restez sur getPaywall décrit ci-dessus.

Adapty.getPaywallForDefaultAudience(placementId: "YOUR_PLACEMENT_ID", locale: "en") { result in
    switch result {
        case let .success(paywall):
            // the requested paywall
        case let .failure(error):
            // handle the error
    }
}
Note

La méthode getPaywallForDefaultAudience est disponible à partir de la version 2.11.2 du SDK iOS.

ParamètrePrésenceDescription
placementIdrequisL’identifiant du Placement. C’est la valeur que vous avez spécifiée lors de la création d’un placement dans votre Adapty Dashboard.
locale

optionnel

défaut : en

L’identifiant de la localisation du paywall. Ce paramètre doit être un code de langue composé d’un ou plusieurs sous-tags séparés par le caractère moins (-). Le premier sous-tag correspond à la langue, le second à la région.

Exemple : en désigne l’anglais, pt-br représente le portugais brésilien.

Consultez Localisations et codes de langue pour plus d’informations sur les codes de langue et nos recommandations d’utilisation.

fetchPolicydéfaut : .reloadRevalidatingCacheData

Par défaut, le SDK tente de charger les données depuis le serveur et renvoie les données en cache en cas d’échec. Nous recommandons cette option, car elle garantit que vos utilisateurs disposent toujours des données les plus récentes.

Cependant, si votre application est souvent utilisée avec une connexion instable, envisagez d’utiliser .returnCacheDataElseLoad pour renvoyer les données en cache lorsqu’elles existent. Dans ce cas, les utilisateurs n’auront peut-être pas les toutes dernières données, mais les temps de chargement seront plus rapides, quelle que soit la qualité de leur connexion. Le cache est mis à jour régulièrement, il est donc sûr de l’utiliser pendant la session pour éviter des requêtes réseau inutiles.

Notez que le cache est conservé après un redémarrage de l’application et n’est effacé qu’à la désinstallation ou lors d’un nettoyage manuel.

Personnaliser les ressources

Pour personnaliser les images et vidéos de votre paywall, implémentez des ressources personnalisées.

Les images et vidéos hero ont des ID prédéfinis : hero_image et hero_video. Dans un bundle de ressources personnalisées, vous ciblez ces éléments par leur ID et personnalisez leur comportement.

Pour les autres images et vidéos, vous devez définir un ID personnalisé dans l’Adapty Dashboard.

Par exemple, vous pouvez :

  • Afficher une image ou une vidéo différente à certains utilisateurs.
  • Afficher une image de prévisualisation locale pendant le chargement d’une image principale distante.
  • Afficher une image de prévisualisation avant de lancer une vidéo.
Important

Pour utiliser cette fonctionnalité, mettez à jour le SDK iOS Adapty vers la version 3.7.0 ou supérieure.

Voici un exemple montrant comment fournir des ressources personnalisées via un simple dictionnaire :

let customAssets: [String: AdaptyCustomAsset] = [
    // Show a local image using a custom ID
    "custom_image": .image(
        .uiImage(value: UIImage(named: "image_name")!)
    ),

    // Show a local preview image while a remote main image is loading
    "hero_image": .image(
        .remote(
            url: URL(string: "https://example.com/image.jpg")!,
            preview: UIImage(named: "preview_image")
        )
    ),

    // Show a local video with a preview image
    "hero_video": .video(
        .file(
            url: Bundle.main.url(forResource: "custom_video", withExtension: "mp4")!,
            preview: .uiImage(value: UIImage(named: "video_preview")!)
        )
    ),
]

let paywallConfig = try await AdaptyUI.getPaywallConfiguration(
    forPaywall: paywall,
    assetsResolver: customAssets
)
Note

Si un élément est introuvable, le paywall reviendra à son apparence par défaut.

Configurer des minuteurs définis par le développeur

Pour utiliser des minuteurs personnalisés dans votre application mobile, créez un objet qui suit le protocole AdaptyTimerResolver. Cet objet définit comment chaque minuteur personnalisé doit être rendu. Si vous préférez, vous pouvez utiliser directement un dictionnaire [String: Date], car il est déjà conforme à ce protocole. Voici un exemple :

@MainActor
struct AdaptyTimerResolverImpl: AdaptyTimerResolver {
    func timerEndAtDate(for timerId: String) -> Date {
        switch timerId {
        case "CUSTOM_TIMER_6H":
            Date(timeIntervalSinceNow: 3600.0 * 6.0) // 6 hours
        case "CUSTOM_TIMER_NY":
            Calendar.current.date(from: DateComponents(year: 2025, month: 1, day: 1)) ?? Date(timeIntervalSinceNow: 3600.0)
        default:
            Date(timeIntervalSinceNow: 3600.0) // 1 hour
        }
    }
}

Dans cet exemple, CUSTOM_TIMER_NY et CUSTOM_TIMER_6H sont les Timer IDs des minuteries définies par le développeur que vous avez configurées dans l’Adapty Dashboard. Le timerResolver garantit que votre application met dynamiquement à jour chaque minuterie avec la valeur correcte. Par exemple :

  • CUSTOM_TIMER_NY : le temps restant jusqu’à la fin de la minuterie, comme le Jour de l’An.
  • CUSTOM_TIMER_6H : le temps restant dans une période de 6 heures qui a démarré lorsque l’utilisateur a ouvert le paywall.