Récupérer les paywalls et produits pour les paywalls Remote Config dans le SDK Flutter
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 porte sur les Remote Config et les paywalls personnalisés. Pour savoir comment récupérer les flows et les paywalls personnalisés avec le Paywall Builder, consultez Obtenir les flows et paywalls.
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 à récupérer les paywalls et les produits dans votre application mobile (cliquez pour développer)
-
Créez vos produits dans l’Adapty Dashboard.
-
Créez un paywall et intégrez les produits dans votre paywall dans l’Adapty Dashboard.
-
Créez des placements et intégrez votre paywall dans le placement dans l’Adapty Dashboard.
-
Installez le SDK Adapty dans votre application mobile.
Récupérer les informations d’un flow
Dans Adapty, un produit est une combinaison de produits issus de l’App Store et de Google Play. Ces produits multiplateforme sont intégrés dans 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 récupérer un AdaptyFlow depuis l’un de vos placements via la méthode getFlow.
Ne codez pas les ID de produits en dur. Le seul ID à coder en dur est l’ID du 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.
try {
final flow = await Adapty().getFlow(placementId: 'YOUR_PLACEMENT_ID');
// the requested flow
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
// handle the error
}
| Paramètre | Présence | Description |
|---|---|---|
| placementId | requis | L’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. |
| fetchPolicy | par défaut : .reloadRevalidatingCacheData | Par défaut, le SDK essaie 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 instable, envisagez d’utiliser 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. Le SDK Adapty stocke les paywalls en 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’inaccessibilité du CDN. Ce système est conçu pour garantir que vous obtenez toujours la dernière version de vos paywalls tout en assurant la fiabilité même lorsque la connexion internet est limitée. |
| loadTimeout | par 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 seront renvoyés. Notez que dans de rares cas, cette méthode peut expirer légèrement après le délai spécifié dans |
Dans la v4, getFlow ne prend pas de paramètre locale. Pour les paywalls personnalisés, toutes les localisations disponibles sont retournées dans les Remote Configs du flow (flow.remoteConfigs) — choisissez celle qui correspond à la langue de l’appareil ou au paramètre de l’application. Voir Localisations et codes de langue.
Paramètres de réponse :
| Paramètre | Description |
|---|---|
| Flow | Un objet AdaptyFlow contenant les identifiants du flow (instanceIdentity, variationId), son nom, son placement, ses variantes de paywall (paywalls) et les Remote Configs éventuels (remoteConfigs). |
Récupérer les produits
Une fois que vous disposez du flow, vous pouvez interroger le tableau de produits qui lui correspond :
try {
final products = await Adapty().getPaywallProducts(flow: flow);
// the requested products array
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
// handle the error
}Paramètres de réponse :
| Paramètre | Description |
|---|---|
| Products | Liste d’objets AdaptyPaywallProduct avec : identifiant du produit, nom du produit, prix, devise, 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 depuis l’objet AdaptyPaywallProduct. Les propriétés les plus couramment utilisées sont présenté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 de l’appareil. |
| Price | Pour afficher une version localisée du prix, utilisez product.price.localizedString. La localisation est basée sur les paramètres régionaux de l’appareil. Vous pouvez aussi accéder au prix sous forme numérique via product.price.amount. La valeur est 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.subscription?.localizedPeriod. La localisation est basée sur les paramètres régionaux de l’appareil. Pour récupérer la période d’abonnement par programmation, utilisez product.subscription?.period. Vous pouvez ensuite accéder à l’enum unit pour obtenir la durée (i.e. day, week, month, year ou unknown). La valeur numberOfUnits vous donne le nombre d’unités de période. Par exemple, pour un abonnement trimestriel, vous verrez AdaptyPeriodUnit.month dans la propriété unit, et 3 dans la propriété numberOfUnits. |
| Introductory Offer | Pour afficher un badge ou tout autre indicateur signalant qu’un abonnement contient une offre de lancement, consultez la propriété product.subscription?.offer?.phases. 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 :• paymentMode : un enum avec les valeurs AdaptyPaymentMode.freeTrial, AdaptyPaymentMode.payAsYouGo, AdaptyPaymentMode.payUpFront et AdaptyPaymentMode.unknown. Les essais gratuits correspondent au type AdaptyPaymentMode.freeTrial.• price : le prix remisé sous forme numérique. Pour les essais gratuits, cette valeur est 0.• localizedNumberOfPeriods : une chaîne localisée selon les paramètres régionaux 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.• subscriptionPeriod : vous pouvez également obtenir les détails individuels de la période de l’offre avec cette propriété. Son fonctionnement est identique à ce qui est décrit dans la section précédente pour les offres.• 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 d’un flow avec le flow de l’audience par défaut
En règle générale, les flows sont récupérés quasi instantanément, donc vous n’avez pas à vous soucier de 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 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 essentiel 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 ci-dessus.
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 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 (legacy), soit accepter que les utilisateurs de cette version puissent rencontrer 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 vous prive de tout 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 des flows, utilisez la méthode getFlowForDefaultAudience comme suit. Sinon, restez sur getFlow décrit ci-dessus.
try {
final flow = await Adapty().getFlowForDefaultAudience(placementId: 'YOUR_PLACEMENT_ID');
// the requested flow
} on AdaptyError catch (adaptyError) {
// handle error
} catch (e) {
// handle unknown error
}
| Paramètre | Présence | Description |
|---|---|---|
| placementId | requis | L’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. |
| fetchPolicy | 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 obtiennent toujours les données les plus récentes. Cependant, si vous pensez que vos utilisateurs sont souvent confrontés à une connexion instable, envisagez d’utiliser 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. |
Avant de présenter le Remote Config et les paywalls personnalisés, vous devez récupérer les informations les concernant. Notez que cette rubrique concerne le Remote Config et les paywalls personnalisés. Pour savoir comment récupérer des paywalls créés avec le Paywall Builder, consultez Récupérer les paywalls du Paywall Builder et leur configuration.
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 à récupérer des paywalls et des produits dans votre application mobile (cliquez pour développer)
-
Créez vos produits dans l’Adapty Dashboard.
-
Créez un paywall et intégrez les produits dans votre paywall dans l’Adapty Dashboard.
-
Créez des placements et intégrez votre paywall dans le placement dans l’Adapty Dashboard.
-
Installez le SDK Adapty dans votre application mobile.
Récupérer les informations d’un paywall
Dans Adapty, un produit est une combinaison de produits issus de l’App Store et de Google Play. Ces produits multiplateformes sont intégrés dans des 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 depuis l’un de vos placements avec la méthode getPaywall.
Ne codez pas les ID de produits en dur. Le seul ID à coder en dur est l’ID du 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 renvoie deux produits aujourd’hui et trois demain, affichez-les tous sans modifier le code.
try {
final paywall = await Adapty().getPaywall(placementId: "YOUR_PLACEMENT_ID", locale: "en");
// the requested paywall
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}
| Paramètre | Présence | Description |
|---|---|---|
| placementId | requis | L’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 par défaut : | 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 : Consultez Localisations et codes de langue pour plus d’informations sur les codes de langue et la façon dont nous recommandons de les utiliser. |
| fetchPolicy | par défaut : .reloadRevalidatingCacheData | 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. Toutefois, si vous pensez que vos utilisateurs ont une connexion internet instable, envisagez d’utiliser 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 via un nettoyage manuel. 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. Nous utilisons également un CDN pour récupérer les paywalls plus rapidement, ainsi qu’un serveur de secours indépendant en cas d’inaccessibilité du CDN. Ce système est conçu pour garantir que vous obtenez toujours la dernière version de vos paywalls, tout en assurant la fiabilité même lorsque la connexion internet est limitée. |
| loadTimeout | par 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 retournés. Notez que dans de rares cas, cette méthode peut expirer légèrement après le délai spécifié dans |
N’utilisez pas d’identifiants de produits codés en dur ! Étant donné que 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, elle doit afficher les 3 sans nécessiter de modification du code. La seule chose à coder en dur est l’identifiant de placement.
Paramètres de réponse :
| Paramètre | Description |
|---|---|
| Paywall | Un objet AdaptyPaywall 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
Une fois que vous avez le paywall, vous pouvez récupérer le tableau de produits qui lui correspond :
try {
final products = await Adapty().getPaywallProducts(paywall: paywall);
// the requested products array
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}Paramètres de la réponse :
| Paramètre | Description |
|---|---|
| Products | Liste d’objets AdaptyPaywallProduct avec : identifiant du produit, nom du produit, prix, devise, durée de l’abonnement et plusieurs autres propriétés. |
Lors de la mise en œuvre de votre propre design de paywall, vous aurez probablement besoin d’accéder à ces propriétés depuis l’objet AdaptyPaywallProduct. Les propriétés les plus couramment utilisées sont présenté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 locale de l’appareil. |
| Price | Pour afficher une version localisée du prix, utilisez product.price.localizedString. Cette localisation est basée sur la locale de l’appareil. Vous pouvez également accéder au prix sous forme de nombre avec 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 (par exemple semaine, mois, année, etc.), utilisez product.subscription?.localizedPeriod. Cette localisation est basée sur la locale de l’appareil. Pour récupérer la période d’abonnement par programmation, utilisez product.subscription?.period. Vous pouvez ensuite accéder à l’enum unit pour obtenir la durée (c’est-à-dire 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 AdaptyPeriodUnit.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.subscription?.offer?.phases. Il s’agit d’une liste pouvant contenir jusqu’à deux phases de réduction : la phase d’essai gratuit et la phase de prix de lancement. Chaque objet de phase contient les propriétés utiles suivantes :• paymentMode : un enum avec les valeurs AdaptyPaymentMode.freeTrial, AdaptyPaymentMode.payAsYouGo, AdaptyPaymentMode.payUpFront et AdaptyPaymentMode.unknown. Les essais gratuits seront de type AdaptyPaymentMode.freeTrial.• price : le prix réduit sous forme de nombre. Pour les essais gratuits, cette valeur sera 0.• 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.• subscriptionPeriod : vous pouvez également obtenir les détails individuels de la période de l’offre avec cette propriété. Elle fonctionne de la même manière pour les offres que ce qui est décrit dans la section précédente.• localizedSubscriptionPeriod : une période d’abonnement formatée pour la locale de l’utilisateur. |
Accélérer la récupération des paywalls avec le paywall d’audience par défaut
En général, les paywalls se chargent 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 ont 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 résoudre ce problème, 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.
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 (version actuelle et versions futures), vous pourrez rencontrer des difficultés. Il vous faudra soit concevoir des paywalls compatibles avec la version actuelle (legacy), 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 êtes prêt à accepter 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 avec la méthode getPaywall décrite ci-dessus.
try {
final paywall = await Adapty().getPaywallForDefaultAudience(placementId: 'YOUR_PLACEMENT_ID');
} on AdaptyError catch (adaptyError) {
// handle error
} catch (e) {
// handle unknown error
}La méthode getPaywallForDefaultAudience est disponible à partir de la version 3.2.0 du SDK Flutter.
| Paramètre | Présence | Description |
|---|---|---|
| placementId | requis | L’identifiant du Placement. Il s’agit de la valeur que vous avez spécifiée lors de la création d’un placement dans votre Adapty Dashboard. |
| locale | optionnel défaut : | 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 : Consultez Localisations et codes de langue pour plus d’informations sur les codes de langue et la façon dont nous recommandons de les utiliser. |
| fetchPolicy | défaut : .reloadRevalidatingCacheData | 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 reçoivent toujours les données les plus récentes. Toutefois, si vous pensez que vos utilisateurs sont souvent confrontés à une connexion instable, envisagez d’utiliser Notez que le cache reste intact lors du redémarrage de l’application et n’est effacé que lors d’une réinstallation ou d’un nettoyage manuel. |