---
title: "Récupérer les paywalls et produits pour les paywalls de Remote Config dans le SDK Android"
description: "Récupérez les paywalls et produits dans le SDK Android Adapty pour améliorer la monétisation des utilisateurs."
---

Avant d'afficher un Remote Config ou des paywalls personnalisés, vous devez récupérer les informations les concernant. Notez que cette rubrique concerne les Remote Config et les paywalls personnalisés. Pour récupérer des flows ou des paywalls personnalisés dans le **Flow Builder** ou le **Paywall Builder**, consultez [Obtenir des flows et des paywalls](android-get-pb-paywalls).

:::tip

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

:::

<details>
   <summary>Avant de commencer à récupérer les flows et les produits dans votre application mobile (cliquez pour développer)</summary>

   1. [Créez vos produits](create-product) dans l'Adapty Dashboard.

2. [Créez un flow ou un paywall et intégrez-y les produits](create-paywall) dans l'Adapty Dashboard.

3. [Créez des placements et intégrez votre flow ou paywall dans le placement](create-placement) dans l'Adapty Dashboard.

4. [Installez le SDK Adapty](sdk-installation-android) dans votre application mobile.
</details>

## Récupérer les informations d'un flow \{#fetch-flow-information\}

Dans Adapty, un [produit](product) est une combinaison de produits issus de l'App Store et de Google Play. Ces produits multi-plateformes sont intégrés dans des flows et des paywalls, ce qui vous permet de les présenter dans des placements spécifiques de votre application mobile.

Pour afficher les produits, vous devez obtenir un `AdaptyFlow` depuis l'un de vos [placements](placements) à l'aide de la méthode `getFlow`.

:::important
**N'écrivez pas les identifiants de produits en dur dans le code.** Le seul identifiant à coder en dur est celui du placement. Les flows sont configurés à distance, donc le nombre de produits et les offres disponibles peuvent changer à tout moment. Votre application doit gérer ces changements de manière dynamique — si un flow renvoie deux produits aujourd'hui et trois demain, affichez-les tous sans modifier le code.
:::

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getFlow("YOUR_PLACEMENT_ID") { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val flow = result.value
            // the requested flow
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Adapty.getFlow("YOUR_PLACEMENT_ID", result -> {
    if (result instanceof AdaptyResult.Success) {
        AdaptyFlow flow = ((AdaptyResult.Success<AdaptyFlow>) result).getValue();
        // the requested flow
      
    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // handle the error
      
    }
});
```
</TabItem>
</Tabs>

| Paramètre | Présence | Description |
|---------|--------|-----------|
| **placementId** | requis | L'identifiant du [Placement](placements). C'est la valeur que vous avez spécifiée lors de la création d'un placement dans votre Adapty Dashboard. || **fetchPolicy** | par défaut : `.reloadRevalidatingCacheData` | <p>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 disposent toujours des données les plus récentes.</p><p></p><p>Toutefois, si vous pensez que vos utilisateurs sont souvent confrontés à une connexion instable, envisagez d'utiliser `.returnCacheDataElseLoad` pour renvoyer les données mises en cache si elles existent. Dans ce cas, les utilisateurs n'auront peut-être pas accès aux toutes dernières données, mais ils bénéficieront de temps de chargement plus rapides, quelle que soit la qualité de leur connexion. Le cache est mis à jour régulièrement, ce qui le rend fiable pendant la session pour éviter des requêtes réseau inutiles.</p><p></p><p>Notez que le cache est conservé après le redémarrage de l'application et n'est effacé que lors de la réinstallation de l'application ou d'un nettoyage manuel.</p><p></p><p>Le SDK Adapty stocke les flows et les paywalls en deux couches : le cache mis à jour régulièrement décrit ci-dessus et les [paywalls de secours](android-use-fallback-paywalls). Nous utilisons également un CDN pour récupérer les flows et les paywalls plus rapidement, ainsi qu'un serveur de secours autonome au cas où le CDN serait inaccessible.</p> |
| **loadTimeout** | par défaut : 5 sec | <p>Cette valeur limite le délai d'attente pour cette méthode. Si le délai est atteint, les données mises en cache ou le fallback local sont renvoyés.</p><p></p><p>Notez que dans de rares cas, cette méthode peut expirer légèrement après le délai spécifié dans `loadTimeout`, car l'opération peut regrouper différentes requêtes en arrière-plan.</p> |

N'encodez pas les IDs de produit en dur ! Comme les flows sont configurés à distance, les produits disponibles, leur nombre et les offres spéciales (comme les essais gratuits) peuvent changer à tout moment. Assurez-vous que votre code gère ces scénarios.

Par exemple, si vous récupérez initialement 2 produits, votre application doit afficher ces 2 produits. Mais si vous en récupérez ensuite 3, votre application doit tous les afficher sans nécessiter de modification du code. La seule chose à encoder en dur est l'ID de placement.

Paramètres de la réponse :

| Paramètre | Description                                                                                                                                                  |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Flow      | Un objet `AdaptyFlow` contenant le placement, les identifiants (`id`, `variationId`), le nom, un tableau `remoteConfigs` (une entrée par locale configurée) et un indicateur `hasViewConfiguration`. Pour récupérer les produits du flow, appelez `getPaywallProducts(flow)`. |

:::note
Dans la v4, le paramètre `locale` a été déplacé hors de `getFlow` et dans `getFlowConfiguration` (utilisé uniquement lors du rendu avec AdaptyUI). Pour les paywalls personnalisés, toutes les locales disponibles sont renvoyées ensemble dans `flow.remoteConfigs` — choisissez la locale qui correspond à la langue de l'appareil de l'utilisateur ou au paramètre de votre application.
:::

## Récupérer les produits \{#fetch-products\}

Une fois que vous avez le flow, vous pouvez récupérer le tableau de produits qui lui correspond :

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getPaywallProducts(flow) { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val products = result.value
            // the requested products
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Adapty.getPaywallProducts(flow, result -> {
    if (result instanceof AdaptyResult.Success) {
        List<AdaptyPaywallProduct> products = ((AdaptyResult.Success<List<AdaptyPaywallProduct>>) result).getValue();
        // the requested products
      
    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // handle the error
      
    }
});
```
</TabItem>
</Tabs>

Paramètres de réponse :

| Paramètre | Description                                                                                                                                                                                 |
| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Products  | Liste d'objets [`AdaptyPaywallProduct`](https://android.adapty.io/adapty/com.adapty.models/-adapty-paywall-product/) contenant : l'identifiant du produit, son nom, son prix, la devise, la durée de l'abonnement et plusieurs autres propriétés. |

Lorsque vous implémentez votre propre design de flow, vous aurez probablement besoin d'accéder à ces propriétés de l'objet [`AdaptyPaywallProduct`](https://android.adapty.io/adapty/com.adapty.models/-adapty-paywall-product/). Les propriétés les plus couramment utilisées sont illustrées ci-dessous, mais consultez le document lié pour obtenir des détails complets sur toutes les propriétés disponibles.

| Propriété               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Title**               | Pour afficher le titre du produit, utilisez `product.localizedTitle`. La localisation est basée sur le pays du store sélectionné par l'utilisateur, et non sur la locale de l'appareil.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **Price**               | Pour afficher le prix dans sa version localisée, utilisez `product.price.localizedString`. La localisation est basée sur les informations de locale de l'appareil. Vous pouvez également accéder au prix sous forme de nombre via `product.price.amount`. La valeur sera fournie dans la devise locale. Pour obtenir le symbole de devise associé, utilisez `product.price.currencySymbol`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **Subscription Period** | Pour afficher la période (ex. : semaine, mois, année, etc.), utilisez `product.subscriptionDetails?.localizedSubscriptionPeriod`. La localisation est basée sur la locale de l'appareil. Pour récupérer la période d'abonnement par programmation, utilisez `product.subscriptionDetails?.subscriptionPeriod`. Vous pouvez alors accéder à l'enum `unit` pour obtenir la durée (c.-à-d. DAY, WEEK, MONTH, YEAR ou UNKNOWN). La valeur `numberOfUnits` vous donnera le nombre d'unités de période. Par exemple, pour un abonnement trimestriel, vous verrez `MONTH` dans la propriété unit et `3` dans la propriété numberOfUnits.                                                                                                                                                                                                                                                                                       |
| **Introductory Offer**  | Pour afficher un badge ou un autre indicateur signalant qu'un abonnement contient une offre de lancement, consultez la propriété `product.subscriptionDetails?.introductoryOfferPhases`. Il s'agit d'une liste pouvant contenir jusqu'à deux phases de remise : la phase d'essai gratuit et la phase de prix de lancement. Chaque objet de phase contient les propriétés utiles suivantes :<br/>• `paymentMode` : un enum avec les valeurs `FREE_TRIAL`, `PAY_AS_YOU_GO`, `PAY_UPFRONT` et `UNKNOWN`. Les essais gratuits correspondent au type `FREE_TRIAL`.<br/>• `price` : le prix réduit sous forme de nombre. Pour les essais gratuits, attendez-vous à voir `0` ici.<br/>• `localizedNumberOfPeriods` : une chaîne localisée selon la locale de l'appareil, décrivant la durée de l'offre. Par exemple, une offre d'essai de trois jours affiche `3 days` dans ce champ.<br/>• `subscriptionPeriod` : vous pouvez également obtenir les détails individuels de la période d'offre avec cette propriété. Elle fonctionne de la même manière pour les offres que dans la section précédente.<br/>• `localizedSubscriptionPeriod` : une période d'abonnement formatée pour la remise, selon la locale de l'utilisateur. |

## Accélérer la récupération des flows avec un flow d'audience par défaut \{#speed-up-flow-fetching-with-default-audience-flow\}

En général, les flows sont récupérés presque instantanément, vous n'avez donc pas à vous en préoccuper. Cependant, si vous avez de nombreuses audiences et placements, et que vos utilisateurs disposent d'une connexion internet faible, la récupération d'un flow peut prendre plus de temps que souhaité. Dans ce cas, vous pouvez afficher un flow par défaut pour garantir une expérience fluide plutôt que de ne rien afficher du tout.

Pour remédier à cela, vous pouvez utiliser la méthode `getFlowForDefaultAudience`, qui récupère le flow du placement spécifié pour l'audience **All Users**. Cependant, il est crucial de comprendre que l'approche recommandée est de récupérer le flow via la méthode `getFlow`, comme décrit dans la section [Récupérer les informations du flow](fetch-paywalls-and-products-android#fetch-flow-information) ci-dessus.

:::warning
Pourquoi nous recommandons d'utiliser `getFlow`

La méthode `getFlowForDefaultAudience` présente quelques inconvénients importants :

- **Problèmes potentiels de compatibilité ascendante** : Si vous devez afficher des flows différents selon les versions de l'application (actuelle et future), vous risquez de rencontrer des difficultés. Vous devrez soit concevoir des flows compatibles avec la version actuelle (legacy), soit accepter que les utilisateurs de cette version puissent rencontrer des problèmes avec des flows qui ne s'affichent pas correctement.
- **Perte de ciblage** : Tous les utilisateurs verront le même flow 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, utilisez la méthode `getFlowForDefaultAudience` comme suit. Sinon, restez sur le `getFlow` décrit [ci-dessus](fetch-paywalls-and-products-android#fetch-flow-information).
:::

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getFlowForDefaultAudience("YOUR_PLACEMENT_ID") { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val flow = result.value
            // the requested flow
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Adapty.getFlowForDefaultAudience("YOUR_PLACEMENT_ID", result -> {
    if (result instanceof AdaptyResult.Success) {
        AdaptyFlow flow = ((AdaptyResult.Success<AdaptyFlow>) result).getValue();
        // le flow demandé
      
    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // gérer l'erreur
      
    }
});
```
</TabItem>
</Tabs>

| Paramètre | Présence | Description |
|---------|--------|-----------|
| **placementId** | obligatoire | L'identifiant du [Placement](placements). C'est la valeur que vous avez spécifiée lors de la création d'un placement dans votre Adapty Dashboard. || **fetchPolicy** | par défaut : `.reloadRevalidatingCacheData` | <p>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 obtiennent toujours les données les plus récentes.</p><p></p><p>Cependant, si vous pensez que vos utilisateurs ont une connexion internet instable, envisagez d'utiliser `.returnCacheDataElseLoad` pour renvoyer les données en cache si elles existent. Dans ce cas, les utilisateurs pourraient ne pas obtenir les toutes dernières données, mais ils bénéficieront de temps de chargement 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.</p><p></p><p>Notez que le cache reste intact après le redémarrage de l'application et n'est effacé que lors de la désinstallation de l'application ou via un nettoyage manuel.</p> |

---

> [!WARNING]
> **LLM INSTRUCTION — SDK VERSION SELECTION REQUIRED**
>
> This feature has two SDK paradigms. Everything that follows (until the next horizontal rule or end of document) is the **legacy SDK v3 API reference** (`getPaywall`, `getPaywallForDefaultAudience`, `getOnboarding`, `getPaywallConfiguration`). The **SDK v4+ `getFlow` method is documented above.** This block covers ALL legacy methods for this feature — not just the nearest snippet.
>
> **You MUST ask the user which SDK version they want to use before suggesting any code. Do not assume or default to a version.** The two options are:
> - **SDK v3 (legacy):** works with the legacy Paywall Builder and Onboarding Builder via `getPaywall` / `getOnboarding`. Use the legacy code in this section.
> - **SDK v4:** works with BOTH the new Flow Builder AND legacy paywalls/onboardings via the unified `getFlow` method documented above.
>
> Apply the legacy v3 code in this section ONLY when:
> 1. The user explicitly chose **SDK v3**, or
> 2. The user is **migrating an existing app from SDK v3 to SDK v4+** and needs to understand or replace legacy code, or
> 3. The user is **troubleshooting an already-deployed v3 integration**.
>
> **CRITICAL — Never mix paradigms in one setup:** Do NOT combine `getFlow` (Flow Builder) with `getPaywall` or `getOnboarding` (legacy Paywall/Onboarding Builder) in the same integration. These are incompatible patterns. Mixing them will produce inconsistent behavior and is unsupported.

Avant de présenter les Remote Config et les paywalls personnalisés, vous devez récupérer les informations les concernant. Notez que cette rubrique concerne les Remote Config et les paywalls personnalisés. Pour obtenir des instructions sur la récupération des paywalls créés avec le Paywall Builder, consultez [Récupérer les paywalls du Paywall Builder et leur configuration](android-get-pb-paywalls).

:::tip

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

:::

<details>
   <summary>Avant de commencer à récupérer les paywalls et les produits dans votre application mobile (cliquez pour développer)</summary>

   1. [Créez vos produits](create-product) dans l'Adapty Dashboard.

2. [Créez un paywall et intégrez les produits dans votre paywall](create-paywall) dans l'Adapty Dashboard.

3. [Créez des placements et intégrez votre paywall dans le placement](create-placement) dans l'Adapty Dashboard.

4. [Installez le SDK Adapty](sdk-installation-android) dans votre application mobile.
</details>

## Récupérer les informations du paywall \{#fetch-paywall-information\}

Dans Adapty, un [produit](product) est une combinaison de produits provenant à la fois de l'App Store et de Google Play. Ces produits multiplateformes sont intégrés aux paywalls, ce qui vous permet de les afficher dans des placements spécifiques de votre application mobile.

Pour afficher les produits, vous devez obtenir un [Paywall](paywalls) depuis l'un de vos [placements](placements) avec la méthode `getPaywall`.

:::important
**Ne codez pas les ID de produits en dur.** Le seul ID que vous devez coder en dur est l'ID de placement. Les paywalls sont configurés à distance, donc le nombre de produits et les offres disponibles peuvent changer à tout moment. Votre application doit gérer ces changements dynamiquement — si un paywall retourne deux produits aujourd'hui et trois demain, affichez-les tous sans modifier le code.
:::

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getPaywall("YOUR_PLACEMENT_ID", locale = "en") { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val paywall = result.value
            // the requested paywall
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Adapty.getPaywall("YOUR_PLACEMENT_ID", "en", result -> {
    if (result instanceof AdaptyResult.Success) {
        AdaptyPaywall paywall = ((AdaptyResult.Success<AdaptyPaywall>) result).getValue();
        // the requested paywall
      
    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // handle the error
      
    }
});
```
</TabItem>
</Tabs>

| Paramètre | Présence | Description |
|---------|--------|-----------|
| **placementId** | requis | L'identifiant du [Placement](placements). C'est la valeur que vous avez spécifiée lors de la création d'un placement dans votre Adapty Dashboard. |
| **locale** | <p>optionnel</p><p>par défaut : `en`</p> | <p>L'identifiant de la [localisation du paywall](add-remote-config-locale). 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.</p><p></p><p>Exemple : `en` désigne l'anglais, `pt-br` représente le portugais brésilien.</p><p></p><p>Consultez [Localisations et codes de langue](android-localizations-and-locale-codes) pour plus d'informations sur les codes de langue et nos recommandations d'utilisation.</p> |
| **fetchPolicy** | par défaut : `.reloadRevalidatingCacheData` | <p>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 reçoivent toujours les données les plus récentes.</p><p></p><p>Toutefois, si 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'auront pas forcément 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, ce qui permet de l'utiliser en toute sécurité pendant la session pour éviter les requêtes réseau.</p><p></p><p>Notez que le cache est conservé après un redémarrage de l'application et n'est effacé que lors d'une réinstallation ou d'un nettoyage manuel.</p><p></p><p>Le SDK Adapty stocke les paywalls sur deux couches : le cache mis à jour régulièrement décrit ci-dessus et les [paywalls de secours](android-use-fallback-paywalls). 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 garantit que vous obtenez toujours la dernière version de vos paywalls, tout en assurant la fiabilité même lorsque la connexion est limitée.</p> |
| **loadTimeout** | par défaut : 5 sec | <p>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.</p><p></p><p>Notez que dans de rares cas, cette méthode peut expirer légèrement après le délai spécifié dans `loadTimeout`, car l'opération peut comprendre plusieurs requêtes en arrière-plan.</p> |

N'encodez pas les identifiants de produits en dur ! Puisque les paywalls sont configurés à distance, les produits disponibles, leur nombre et les offres spéciales (comme les essais gratuits) peuvent évoluer au fil du temps. Assurez-vous que votre code gère ces scénarios.

Par exemple, si vous récupérez initialement 2 produits, votre application doit afficher ces 2 produits. Mais si vous en récupérez ensuite 3, votre application doit tous les afficher sans nécessiter de modification du code. La seule chose à encoder en dur est l'identifiant du placement.

Paramètres de réponse :

| Paramètre | Description                                                                                                                                                  |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Paywall   | Un objet [`AdaptyPaywall`](https://android.adapty.io/adapty/com.adapty.models/-adapty-paywall/) contenant : une liste d'identifiants de produits, l'identifiant du paywall, le Remote Config et plusieurs autres propriétés. |

## Récupérer les produits \{#fetch-products\}

Une fois que vous avez le paywall, vous pouvez récupérer le tableau de produits qui lui correspond :

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getPaywallProducts(paywall) { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val products = result.value
            // the requested products
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Adapty.getPaywallProducts(paywall, result -> {
    if (result instanceof AdaptyResult.Success) {
        List<AdaptyPaywallProduct> products = ((AdaptyResult.Success<List<AdaptyPaywallProduct>>) result).getValue();
        // the requested products
      
    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // handle the error
      
    }
});
```
</TabItem>
</Tabs>

Paramètres de réponse :

| Paramètre | Description                                                                                                                                                                                 |
| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Products  | Liste d'objets [`AdaptyPaywallProduct`](https://android.adapty.io/adapty/com.adapty.models/-adapty-paywall-product/) contenant : l'identifiant du produit, le nom du produit, le prix, la devise, la durée de l'abonnement, et plusieurs autres propriétés. |

Lors de l'implémentation de votre propre design de paywall, vous aurez probablement besoin d'accéder à ces propriétés de l'objet [`AdaptyPaywallProduct`](https://android.adapty.io/adapty/com.adapty.models/-adapty-paywall-product/). Les propriétés les plus couramment utilisées sont illustrées ci-dessous, mais consultez le document lié pour obtenir tous les détails sur l'ensemble des propriétés disponibles.

| Propriété               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Title**               | Pour afficher le titre du produit, utilisez `product.localizedTitle`. La localisation est basée sur le pays du store sélectionné par l'utilisateur, et non sur la langue du terminal.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **Price**               | Pour afficher une version localisée du prix, utilisez `product.price.localizedString`. La localisation est basée sur les paramètres régionaux du terminal. Vous pouvez également accéder au prix sous forme de nombre avec `product.price.amount`. La valeur est exprimée dans la devise locale. Pour obtenir le symbole de devise associé, utilisez `product.price.currencySymbol`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **Subscription Period** | Pour afficher la période (semaine, mois, année, etc.), utilisez `product.subscriptionDetails?.localizedSubscriptionPeriod`. La localisation est basée sur les paramètres régionaux du terminal. Pour récupérer la période d'abonnement par programmation, utilisez `product.subscriptionDetails?.subscriptionPeriod`. Vous pouvez ensuite accéder à l'enum `unit` pour obtenir la durée (DAY, WEEK, MONTH, YEAR ou UNKNOWN). La valeur `numberOfUnits` indique le nombre d'unités de période. Par exemple, pour un abonnement trimestriel, `unit` vaut `MONTH` et `numberOfUnits` vaut `3`.                                                                                                                                                                                                                                                                                                       |
| **Introductory Offer**  | Pour afficher un badge ou un indicateur signalant qu'un abonnement contient une offre de lancement, consultez la propriété `product.subscriptionDetails?.introductoryOfferPhases`. Il s'agit d'une liste pouvant contenir jusqu'à deux phases de remise : la phase d'essai gratuit et la phase de prix de lancement. Chaque objet de phase expose les propriétés utiles suivantes :<br/>• `paymentMode` : un enum avec les valeurs `FREE_TRIAL`, `PAY_AS_YOU_GO`, `PAY_UPFRONT` et `UNKNOWN`. Les essais gratuits correspondent au type `FREE_TRIAL`.<br/>• `price` : le prix remisé sous forme de nombre. Pour les essais gratuits, cette valeur est `0`.<br/>• `localizedNumberOfPeriods` : une chaîne localisée selon les paramètres régionaux du terminal, décrivant la durée de l'offre. Par exemple, un essai de trois jours affiche `3 days` dans ce champ.<br/>• `subscriptionPeriod` : vous pouvez également obtenir les détails individuels de la période de l'offre avec cette propriété, qui fonctionne de la même manière que décrit dans la section précédente.<br/>• `localizedSubscriptionPeriod` : une période d'abonnement formatée pour la remise, selon les paramètres régionaux de l'utilisateur. |

## Accélérer la récupération des paywalls avec le paywall d'audience par défaut \{#speed-up-paywall-fetching-with-default-audience-paywall\}

En général, les paywalls sont récupérés presque instantanément, vous n'avez donc pas à vous en préoccuper. 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 ces situations, vous pouvez afficher un paywall par défaut pour garantir une expérience utilisateur fluide plutôt que de ne rien afficher du tout.

Pour remédier à cela, vous pouvez utiliser la méthode `getPaywallForDefaultAudience`, qui récupère 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 paywall via la méthode `getPaywall`, comme décrit dans la section [Récupérer les informations du paywall](fetch-paywalls-and-products-android#fetch-paywall-information) ci-dessus.

:::warning
Pourquoi nous recommandons d'utiliser `getPaywall`

La méthode `getPaywallForDefaultAudience` 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 (actuelle et future), vous pourrez rencontrer des difficultés. Vous devrez soit concevoir des paywalls compatibles avec la version actuelle (legacy), soit accepter que les utilisateurs de cette version puissent avoir des problèmes avec des paywalls non rendus.
- **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é (y compris par pays, 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 des paywalls, utilisez la méthode `getPaywallForDefaultAudience` comme suit. Sinon, restez sur `getPaywall` décrit [ci-dessus](fetch-paywalls-and-products-android#fetch-paywall-information).
:::

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getPaywallForDefaultAudience("YOUR_PLACEMENT_ID", locale = "en") { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val paywall = result.value
            // the requested paywall
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Adapty.getPaywallForDefaultAudience("YOUR_PLACEMENT_ID", "en", result -> {
    if (result instanceof AdaptyResult.Success) {
        AdaptyPaywall paywall = ((AdaptyResult.Success<AdaptyPaywall>) result).getValue();
        // the requested paywall
      
    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // handle the error
      
    }
});
```
</TabItem>
</Tabs>

:::note
La méthode `getPaywallForDefaultAudience` est disponible à partir de la version 2.11.3 du SDK Android.
:::

| Paramètre | Présence | Description |
|---------|--------|-----------|
| **placementId** | requis | L'identifiant du [Placement](placements). C'est la valeur que vous avez spécifiée lors de la création d'un placement dans votre Adapty Dashboard. |
| **locale** | <p>optionnel</p><p>par défaut : `en`</p> | <p>L'identifiant de la [localisation du paywall](add-remote-config-locale). 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.</p><p></p><p>Exemple : `en` désigne l'anglais, `pt-br` représente le portugais brésilien.</p><p></p><p>Consultez [Localisations et codes de langue](android-localizations-and-locale-codes) pour plus d'informations sur les codes de langue et la façon dont nous recommandons de les utiliser.</p> |
| **fetchPolicy** | par défaut : `.reloadRevalidatingCacheData` | <p>Par défaut, le SDK tente de charger les données depuis le serveur et retourne les données en cache en cas d'échec. Nous recommandons cette option car elle garantit que vos utilisateurs obtiennent toujours les données les plus récentes.</p><p></p><p>Cependant, si vous pensez que vos utilisateurs ont une connexion internet instable, envisagez d'utiliser `.returnCacheDataElseLoad` pour retourner les données en cache si elles existent. Dans ce cas, les utilisateurs pourraient ne pas obtenir les toutes dernières données, mais ils bénéficieront de temps de chargement plus rapides, quelle que soit la qualité de leur connexion. Le cache est mis à jour régulièrement, il est donc sans risque de l'utiliser pendant la session pour éviter les requêtes réseau.</p><p></p><p>Notez que le cache reste intact après le redémarrage de l'application et n'est effacé que lors de la réinstallation de l'application ou via un nettoyage manuel.</p> |

---