Ce document décrit l'intégration de vos produits ponctuels à la bibliothèque Play Billing. Il explique également comment intégrer différentes options d'achat et offres associées à vos produits ponctuels.
Vous pouvez configurer plusieurs options d'achat et offres pour vos produits ponctuels. Par exemple, vous pouvez configurer une option d'achat et une offre de précommande pour le même produit ponctuel.
Prérequis
Pour configurer plusieurs offres pour des produits ponctuels, vous devez utiliser l'
queryProductDetailsAsync() API. L'API obsolète querySkuDetailsAsync() n'est pas compatible. Pour savoir comment utiliser
queryProductDetailsAsync() et la version de launchBillingFlow()
qui prend ProductDetailsParams comme entrée, consultez les étapes de migration.
Interroger les informations détaillées sur le produit
Si vous avez configuré plusieurs offres ou options d'achat pour votre produit ponctuel, l'objet ProductDetails renvoyé par la
queryProductDetailsAsync() méthode peut comporter plusieurs options d'achat
et/ou de location disponibles par produit ponctuel. Pour obtenir la liste de toutes les
offres éligibles pour chaque ProductDetails objet, utilisez la
getOneTimePurchaseOfferDetailsList() méthode. Seules les offres et les options d'achat pour lesquelles l'utilisateur est éligible seront renvoyées dans cette liste. Votre code
dans la onProductDetailsResponse() méthode doit gérer les offres renvoyées.
Lancer le parcours de facturation
Pour démarrer une demande d'achat depuis votre application, appelez la launchBillingFlow()
méthode à partir du thread principal de votre application. Cette méthode transmet une référence à un
BillingFlowParams objet contenant l'objet ProductDetails
approprié obtenu lors de l'appel de queryProductDetailsAsync(). Pour créer un
BillingFlowParams objet, utilisez la BillingFlowParams.Builder
classe. Notez que vous devez définir le jeton d'offre correspondant à l'offre
sélectionnée par l'utilisateur lors de la création de l'objet BillingFlowParams.
L'exemple suivant montre comment lancer le parcours d'achat pour un produit ponctuel avec plusieurs offres :
Java
// An activity reference from which the billing flow will launch. Activity activity = ...; ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // to get an offer token, call // ProductDetails.getOneTimePurchaseOfferDetailsList() for a list of offers // that are available to the user .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
L'offerToken se trouve dans OneTimePurchaseOfferDetails. Lorsque vous présentez l'offre à l'utilisateur, assurez-vous de configurer les paramètres du parcours de facturation avec le jeton d'offre approprié, que vous pouvez obtenir à partir de la méthode oneTimePurchaseOfferDetails.getOfferToken().
Options d'achat et offres
Une option d'achat vous permet de définir comment le droit d'accès est accordé à un utilisateur, son prix et la région dans laquelle le produit est disponible. Un même produit peut être associé à plusieurs options d'achat, qui peuvent représenter où et comment vous vendez votre produit.
Google Play est compatible avec les options d'achat suivantes pour les produits ponctuels :
- Option d'achat
- Option de location
Les offres font référence à un système de tarification que vous pouvez créer pour vos produits ponctuels. Par exemple, vous pouvez créer une offre de remise pour votre produit ponctuel.
Google Play est compatible avec les offres d'achat suivantes pour les produits ponctuels :
- Offre de précommande (disponible uniquement pour l'option d'achat)
- Offre de remise (disponible pour les options d'achat et de location)
Option d'achat
Une option d'achat représente un achat standard et direct du produit ponctuel. Elle comporte un champ legacyCompatible facultatif, indiquant si cette option d'achat sera disponible dans les anciens parcours de la bibliothèque Play Billing (version 7 ou antérieure) qui ne sont pas compatibles avec le nouveau modèle. Pour assurer la rétrocompatibilité, au moins une option d'achat doit être marquée comme compatible avec l'ancienne version.
Les étapes d'intégration des options d'achat et de location à la bibliothèque Play Billing sont les mêmes. Pour savoir comment intégrer l'option d'achat à la bibliothèque Play Billing, consultez Intégrer l'option de location à la bibliothèque Play Billing.
Option de location
L'option de location permet aux utilisateurs d'accéder aux produits ponctuels pendant une durée spécifiée. Vous pouvez spécifier la période de location et son expiration. Ce document décrit les étapes à suivre pour intégrer l'option de location à la bibliothèque Play Billing.
Intégrer l'option de location à la bibliothèque Play Billing
Cette section explique comment intégrer l'option de location à la bibliothèque Play Billing. Elle suppose que vous connaissez les étapes d'intégration initiales de la bibliothèque Play Billing telles que, l'ajout de la dépendance de la bibliothèque Play Billing à votre application, l'initialisation de BillingClient, et la connexion à Google Play. Cette section se concentre sur les aspects d'intégration de la bibliothèque Play Billing spécifiques à l'option de location.
Pour configurer les produits disponibles à la location, vous devez utiliser le nouveau service monetization.onetimeproducts de l'API Play Developer ou l'interface utilisateur de la Play Console. Pour utiliser le service, vous pouvez appeler directement l'API REST ou
utiliser la bibliothèque cliente Java.
Lancer un parcours d'achat pour l'option de location
Pour lancer un parcours d'achat pour une offre de location, procédez comme suit :
Récupérez les métadonnées de l'option de location à l'aide de la
ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails()méthode.L'exemple suivant montre comment obtenir les métadonnées de l'option de location :
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a rent purchase option. if (oneTimePurchaseOfferDetails.getRentalDetails() != null) { // process the returned RentalDetails OneTimePurchaseOfferDetails.RentalDetails rentalDetails = oneTimePurchaseOfferDetails.getRentalDetails(); // Get rental period in ISO 8601 format. String rentalPeriod = rentalDetails.getRentalPeriod(); // Get rental expiration period in ISO 8601 format, if present. if (rentalDetails.getRentalExpirationPeriod() != null) { String rentalExpirationPeriod = rentalDetails.getRentalExpirationPeriod(); } // Get offer token String offerToken = oneTimePurchaseOfferDetails.getOfferToken(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } });
Lancez le parcours de facturation.
Pour démarrer une demande d'achat depuis votre application, appelez la
launchBillingFlow()méthode à partir du thread principal de votre application. Cette méthode transmet une référence à un objetBillingFlowParamscontenant l'objetProductDetailsapproprié obtenu lors de l'appel dequeryProductDetailsAsync(). Pour créer unBillingFlowParamsobjet, utilisez la classeBillingFlowParams.Builder. Notez que vous devez définir le jeton d'offre correspondant à l'offre sélectionnée par l'utilisateur lors de la création de l'objetBillingFlowParams. Si un utilisateur est éligible à l' option de location, il recevra une offre avec RentalDetails et offerId dansqueryProductDetailsAsync().L'exemple suivant montre comment lancer le parcours de facturation :
Kotlin
// An activity reference from which the billing flow will be launched. val activity : Activity = ... val productDetailsParamsList = listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // Get the offer token: // a. For one-time products, call ProductDetails.getOneTimePurchaseOfferDetailsList() // for a list of offers that are available to the user. // b. For subscriptions, call ProductDetails.getSubscriptionOfferDetails() // for a list of offers that are available to the user. .setOfferToken(selectedOfferToken) .build() ) val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build() // Launch the billing flow val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
Java
// An activity reference from which the billing flow will be launched. Activity activity = ...; ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = ImmutableList.of( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // Get the offer token: // a. For one-time products, call ProductDetails.getOneTimePurchaseOfferDetailsList() // for a list of offers that are available to the user. // b. For subscriptions, call ProductDetails.getSubscriptionOfferDetails() // for a list of offers that are available to the user. .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
L'
offerTokense trouve dansOneTimePurchaseOfferDetails. Lorsque vous présentez l'offre à l'utilisateur, assurez-vous de configurer les paramètres du parcours de facturation avec le jeton d'offre approprié, que vous pouvez obtenir à partir de la méthodeoneTimePurchaseOfferDetails.getOfferToken().
Offre de précommande
La précommande vous permet de configurer des produits ponctuels qui peuvent être achetés avant leur sortie. Lorsqu'un utilisateur précommande votre produit, il accepte de le payer à sa sortie, sauf s'il annule la précommande avant la date de sortie. À la date de sortie, l'acheteur est débité et Play l'informe par e-mail que l'article est disponible.
Ce document décrit les étapes à suivre pour intégrer l'offre de précommande à la bibliothèque Play Billing.
Intégrer l'offre de précommande à la bibliothèque Play Billing
Cette section explique comment intégrer l'offre de précommande à la bibliothèque Play Billing. Elle suppose que vous connaissez les étapes d'intégration initiales de la bibliothèque Play Billing telles que, l'ajout de la dépendance de la bibliothèque Play Billing à votre application, l'initialisation de BillingClient, et la connexion à Google Play. Cette section se concentre sur les aspects d'intégration de la bibliothèque Play Billing spécifiques à l'offre de précommande.
Lancer un parcours d'achat pour une offre de précommande
Pour lancer un parcours d'achat pour une offre de précommande, procédez comme suit :
Récupérez les métadonnées de l'offre de précommande à l'aide de la
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()méthode. L'exemple suivant montre comment obtenir les métadonnées de l'offre de précommande :Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a preorder offer. if (oneTimePurchaseOfferDetails.getPreorderDetails() != null) { // process the returned PreorderDetails OneTimePurchaseOfferDetails.PreorderDetails preorderDetails = oneTimePurchaseOfferDetails.getPreorderDetails(); // Get preorder release time in millis. long preorderReleaseTimeMillis = preorderDetails.getPreorderReleaseTimeMillis(); // Get preorder presale end time in millis. long preorderPresaleEndTimeMillis = preorderDetails.getPreorderPresaleEndTimeMillis(); // Get offer ID String offerId = oneTimePurchaseOfferDetails.getOfferId(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } });
Lancez le parcours de facturation.
Pour démarrer une demande d'achat depuis votre application, appelez la méthode
launchBillingFlow()à partir du thread principal de votre application. Cette méthode transmet une référence à unBillingFlowParamsobjet contenant l'objetProductDetailsapproprié obtenu lors de l'appel de queryProductDetailsAsync(). Pour créer unBillingFlowParamsobjet, utilisez laBillingFlowParams.Builder class. Notez que vous devez définir le jeton d'offre correspondant à l'offre sélectionnée par l'utilisateur lors de la création de l'objetBillingFlowParams. Si un utilisateur est éligible à l'offre de précommande, il recevra une offre avec PreorderDetails et offerId dans la méthodequeryProductDetailsAsync().L'exemple suivant montre comment lancer le parcours de facturation :
Java
// An activity reference from which the billing flow will launch. Activity activity = ...; ImmutableList productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // to get an offer token, call // ProductDetails.getOneTimePurchaseOfferDetailsList() for a list of offers // that are available to the user .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
L'
offerTokense trouve dansOneTimePurchaseOfferDetails. Lorsque vous présentez l'offre à l'utilisateur, assurez-vous de configurer les paramètres du parcours de facturation avec le jeton d'offre approprié, que vous pouvez obtenir à partir de la méthodeoneTimePurchaseOfferDetails.getOfferToken().
Offre de remise
Cette section explique comment configurer des offres de remise pour vos produits ponctuels.
Vous pouvez configurer quatre paramètres différents dans une offre de remise pour un produit ponctuel :
Prix de l'offre avec remise : spécifie des informations sur le pourcentage de remise ou le prix absolu par rapport au prix d'origine.
Éligibilité par pays ou région : spécifie la disponibilité des offres de produits ponctuels dans un pays ou une région.
Limite d'achat (facultatif) : vous permet de déterminer le nombre de fois où un utilisateur peut utiliser la même offre. Si un utilisateur dépasse la limite d'achat, il ne sera pas éligible à l'offre.
Durée limitée (facultatif) : spécifie la période pendant laquelle l'offre est disponible. En dehors de cette période, l'offre n'est pas disponible à l'achat.
Récupérer les informations sur le prix de l'offre avec remise
Pour une offre avec remise, vous pouvez récupérer le pourcentage de remise ou la remise absolue proposée.
Exemple 1 : Récupérer le pourcentage de remise de l'offre avec remise
L'exemple suivant montre comment obtenir le prix d'origine complet de l'offre avec remise et son pourcentage de remise. Notez que les informations sur le pourcentage de remise ne sont renvoyées que pour les offres avec remise.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult){ // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { long discountedOfferPriceMicros = oneTimePurchaseOfferDetails.getPriceAmountMicros(); // process the returned fullPriceMicros and percentageDiscount. if (oneTimePurchaseOfferDetails.getFullPriceMicros() != null) { long fullPriceMicros = oneTimePurchaseOfferDetails.getFullPriceMicros(); } if (oneTimePurchaseOfferDetails.getDiscountDisplayInfo() != null) { long percentageDiscount = oneTimePurchaseOfferDetails .getDiscountDisplayInfo() .getPercentageDiscount(); } // … } } } });
Exemple 2 : Récupérer la remise absolue de l'offre avec remise
L'exemple suivant montre comment obtenir le prix d'origine complet de l'offre avec remise et sa remise absolue en micros. Notez que les informations sur la remise absolue en micros ne sont renvoyées que pour les offres avec remise. La remise absolue ou le pourcentage de remise doivent être spécifiés pour une offre de remise.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { long discountedOfferPriceMicros = oneTimePurchaseOfferDetails.getPriceAmountMicros(); // process the returned fullPriceMicros and absolute DiscountAmountMicros. if (oneTimePurchaseOfferDetails.getFullPriceMicros() != null) { long fullPriceMicros = oneTimePurchaseOfferDetails.getFullPriceMicros(); } if (oneTimePurchaseOfferDetails.getDiscountDisplayInfo() != null) { long discountAmountMicros = oneTimePurchaseOfferDetails .getDiscountDisplayInfo() .getDiscountAmount() .getDiscountAmountMicros(); } // … } } } });
Obtenir la période de validité d'une offre
Vous pouvez utiliser la méthode OneTimePurchaseOfferDetails.getValidTimeWindow() pour obtenir la période de validité d'une offre. Cet objet contient l'heure de début et l'heure de fin de la période en millisecondes.
L'exemple suivant montre comment obtenir la période de validité d'une offre :
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { if (oneTimePurchaseOfferDetails.getValidTimeWindow() != null) { // process the returned startTimeMillis and endTimeMillis. ValidTimeWindow validTimeWindow = oneTimePurchaseOfferDetails.getValidTimeWindow(); long startTimeMillis = validTimeWindow.getStartTimeMillis(); long endTimeMillis = validTimeWindow.getEndTimeMillis(); // … } } } } });
Quantité limitée au niveau de l'offre de remise
Vous pouvez spécifier la limite de quantité maximale au niveau de l'offre de remise, qui n'est appliquée qu'au niveau de l'offre. Voici un exemple pour illustrer :
- Super screensavers propose deux offres pour le produit "Écran de veille" : l'option d'achat "Écran de veille" et l'offre de remise "Écran de veille".
- Aucune quantité limitée n'est configurée pour l'option d'achat "Écran de veille".
- La quantité maximale autorisée au niveau de l'offre pour l'offre de remise "Écran de veille" est définie sur 3.
- Le produit "Écran de veille" n'a pas de quantité maximale autorisée au niveau du produit. Les utilisateurs peuvent donc acheter des quantités illimitées de ce produit.
- L'utilisateur possède un écran de veille avec remise et prévoit d'en acheter un autre avec l'offre de remise.
- Lors de la récupération des offres disponibles, le champ LimitedQuantityInfo pour l'option d'achat "Écran de veille" est défini sur "null", et la valeur de la quantité restante pour l'offre de remise "Écran de veille" est de 2.
L'exemple suivant montre comment obtenir la quantité limitée au niveau de l'offre de remise :
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { if (oneTimePurchaseOfferDetails.getLimitedQuantityInfo() != null) { // process the returned maximumQuantity and remainingQuantity. LimitedQuantityInfo limitedQuantityInfo = oneTimePurchaseOfferDetails.getLimitedQuantityInfo(); int maximumQuantity = limitedQuantityInfo.getMaximumQuantity(); int remainingQuantity = limitedQuantityInfo.getRemainingQuantity(); // … } } } } });
Lorsque les utilisateurs ont utilisé le nombre maximal d'utilisations pour une offre, celle-ci n'est pas renvoyée par la méthode getOneTimePurchaseOfferDetailsList().
Calculer la limite d'utilisation
L'exemple suivant montre comment obtenir les informations sur la quantité limitée pour une offre de remise spécifique. Vous pouvez obtenir la quantité maximale autorisée et la quantité restante pour l'utilisateur actuel. Notez que la fonctionnalité de quantité limitée s'applique aux offres de produits ponctuels consommables et non consommables. Cette fonctionnalité n'est disponible qu'au niveau de l'offre.
Google Play calcule la quantité restante en soustrayant la quantité possédée par l'utilisateur à la quantité maximale autorisée que vous avez configurée. Lors du calcul de la quantité possédée par l'utilisateur, Google Play prend en compte les achats consommés ou en attente. Les achats qui ont été annulés, remboursés ou débités ne sont pas pris en compte dans la quantité possédée par l'utilisateur. Exemple :
Super screensavers a configuré une offre de remise avec une quantité maximale autorisée de 1. Les utilisateurs peuvent donc acheter jusqu'à un écran de veille avec remise.
L'utilisateur achète l'un des écrans de veille avec remise. S'il tente ensuite d'acheter le deuxième écran de veille avec remise, une erreur se produit et
PurchasesUpdatedListenerreçoit un code de réponse ITEM_UNAVAILABLE.L'utilisateur demande le remboursement de l'écran de veille avec remise qu'il a acheté à l'origine et reçoit le remboursement. L'utilisateur tente d'acheter l'un des écrans de veille avec remise, et l'achat est effectué.
Éligibilité par pays et région
Vous pouvez choisir les pays ou régions dans lesquels l'offre d'option d'achat ou l'offre de remise seront disponibles pour les utilisateurs. Google Play évalue l'éligibilité des utilisateurs en fonction du pays Play. Lorsque vous configurez la disponibilité régionale pour une offre, elle n'est renvoyée dans getOneTimePurchaseOfferDetailsList() que si l'utilisateur se trouve dans un pays ou une région ciblée. Sinon, elle ne fait pas partie de la liste des offres renvoyées lorsque vous appelez queryProductDetailsAsync().
Tags d'offre
L'exemple suivant montre comment récupérer les tags d'offre associés à une offre.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // process the returned offer tags. ImmutableList<String> offerTags = oneTimePurchaseOfferDetails.getOfferTagsList(); // … } } } });
Héritage des tags d'offre
Vous pouvez définir des tags d'offre pour un produit, une option d'achat ou une offre de remise. Les offres de remise héritent des tags d'offre de leur offre d'option d'achat. De même, si des tags d'offre sont spécifiés au niveau du produit, l'offre d'option d'achat et les offres de remise héritent des tags d'offre du produit.
Par exemple, Super screensavers propose deux offres pour le produit "Écran de veille" : l'option d'achat "Écran de veille" et l'offre de remise "Écran de veille".
- Super screensavers possède le tag d'offre de produit
SSProductTag. - L'option d'achat "Écran de veille" possède le tag d'offre
SSPurchaseOptionTag. - L'offre de remise "Écran de veille" possède le tag d'offre
SSDiscountOfferTag.
Dans cet exemple, la méthode oneTimePurchaseOfferDetails.getOfferTagsList() pour l'offre d'option d'achat renvoie SSProductTag et SSPurchaseOptionTag. Pour l'offre de remise, la méthode renvoie SSProductTag, SSPurchaseOptionTag et SSDiscountOfferTag.