Plusieurs options et offres d'achat pour les produits uniques

Ce document décrit en détail 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 lié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'API queryProductDetailsAsync(). L'API querySkuDetailsAsync() obsolète n'est pas acceptée. 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 méthode queryProductDetailsAsync() 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 objet ProductDetails, utilisez la méthode getOneTimePurchaseOfferDetailsList(). Seules les offres et les options d'achat pour lesquelles l'utilisateur est éligible seront renvoyées dans cette liste. Votre code dans la méthode onProductDetailsResponse() doit gérer les offres renvoyées.

Lancer 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 à un objet BillingFlowParams contenant l'objet ProductDetails approprié obtenu lors de l'appel de queryProductDetailsAsync(). Pour créer un objet BillingFlowParams, utilisez la classe BillingFlowParams.Builder. Notez que vous devez définir le jeton d'offre correspondant à l'offre sélectionnée par l'utilisateur lorsque vous créez 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 &quot;productDetails&quot; 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);
    
    

Le offerToken se trouve dans le OneTimePurchaseOfferDetails. Lorsque vous présentez l'offre à l'utilisateur, assurez-vous de configurer les paramètres du flux 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 indiquer où et comment vous le vendez.

Google Play est compatible avec les options d'achat suivantes pour les produits ponctuels :

  • Acheter une option d'achat
  • Option d'achat 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 accepte les offres d'achat suivantes pour les produits ponctuels :

  • Offre de précommande (disponible uniquement pour l'option d'achat)
  • Offre de remise (prise en charge pour les options d'achat et de location)

Acheter une option d'achat

Une option d'achat représente un achat standard et direct du produit ponctuel. Il comporte un champ facultatif "legacyCompatible" qui indique si cette option d'achat sera disponible dans les anciens flux de la bibliothèque Play Billing (version 7 ou antérieure) qui ne sont pas compatibles avec le nouveau modèle. Pour la rétrocompatibilité, au moins une option d'achat doit être marquée comme compatible avec les anciennes versions.

Les étapes d'intégration des options d'achat et de location avec PBL sont les mêmes. Pour savoir comment intégrer l'option d'achat avec PBL, consultez Intégrer l'option d'achat avec PBL.

Option d'achat de location

L'option d'achat en 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 la procédure à suivre pour intégrer l'option d'achat de location à la bibliothèque Play Billing (PBL).

Intégrer l'option d'achat ou de location avec PBL

Cette section explique comment intégrer l'option d'achat de location à la bibliothèque Play Billing (PBL). Il suppose que vous connaissez les étapes d'intégration initiales de la bibliothèque Play Billing, comme l'ajout de la dépendance PBL à votre application, l'initialisation de BillingClient et la connexion à Google Play. Cette section se concentre sur les aspects de l'intégration PBL spécifiques à l'option d'achat ou 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 console Play Developer. 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 :

  1. Récupérez les métadonnées de l'option d'achat de location à l'aide de la méthode ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails().

    L'exemple suivant montre comment obtenir les métadonnées d'un achat 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();
              }
            }
          }
        }
      }
    });
  2. 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 à un objet BillingFlowParams contenant l'objet ProductDetails approprié obtenu lors de l'appel de queryProductDetailsAsync(). Pour créer un objet BillingFlowParams, utilisez la classe BillingFlowParams.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'objet BillingFlowParams. Si un utilisateur est éligible à l'option d'achat de location, il recevra une offre avec RentalDetails et offerId dans queryProductDetailsAsync().

    L'exemple suivant montre comment lancer le processus 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.subscriptionOfferDetails()
            // 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<ProductDetailsParams> productDetailsParamsList =
        ImmutableList.of(
            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.subscriptionOfferDetails()
                // 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);

    Le offerToken se trouve dans le 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().

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 d'achat en précommande à la bibliothèque Play Billing (PBL).

Intégrer une offre de précommande à PBL

Cette section explique comment intégrer l'offre de précommande à la bibliothèque Play Billing (PBL). Il suppose que vous connaissez les étapes d'intégration initiales de la bibliothèque Play Billing, comme l'ajout de la dépendance PBL à votre application, l'initialisation de BillingClient et la connexion à Google Play. Cette section se concentre sur les aspects de l'intégration PBL 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 :

  1. Récupérez les métadonnées de l'offre de précommande à l'aide de la méthode ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails(). 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();
              }
            }
          }
        }
      }
    });

  2. 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 à un objet BillingFlowParams contenant l'objet ProductDetails approprié obtenu lors de l'appel de queryProductDetailsAsync(). Pour créer un objet BillingFlowParams, utilisez BillingFlowParams.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'objet BillingFlowParams. Si un utilisateur est éligible à l'offre de précommande, il recevra une offre avec PreorderDetails et offerId dans la méthode queryProductDetailsAsync().

    L'exemple suivant montre comment lancer le processus 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);

    Le offerToken se trouve dans le 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().

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 ponctuelle sur un produit :

  • Prix de l'offre avec remise : indique les détails de la remise en pourcentage ou en valeur absolue par rapport au prix d'origine.

  • Éligibilité par pays ou région : indique la disponibilité des offres de produits ponctuelles dans un pays ou une région.

  • Limite d'achat (facultatif) : vous permet de déterminer le nombre de fois où un utilisateur peut profiter de la même offre. Si un utilisateur dépasse la limite d'achat, il ne pourra pas bénéficier de l'offre.

  • Durée limitée (facultatif) : indique la période pendant laquelle l'offre est disponible. En dehors de cette période, l'offre ne peut pas être achetée.

Récupérer les informations sur le prix de l'offre avec remise

Pour une offre à prix réduit, vous pouvez récupérer le pourcentage de remise ou la remise absolue proposée.

Exemple 1 : Récupérer le pourcentage de remise d'une offre promotionnelle

L'exemple suivant montre comment obtenir le prix plein d'origine de l'offre à prix réduit et le pourcentage de remise. Notez que les informations sur le pourcentage de remise ne sont renvoyées que pour les offres à prix réduit.

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 d'une offre à prix réduit

L'exemple suivant montre comment obtenir le prix total initial de l'offre à prix réduit 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. Vous devez spécifier la remise absolue ou la remise en pourcentage 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 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, c'est-à-dire qu'elle ne s'applique qu'au niveau de l'offre. Voici un exemple pour illustrer :

  1. Super Screensavers propose deux offres pour le produit Économiseur d'écran : l'option d'achat et l'économiseur d'écran à prix réduit.
    1. L'économiseur d'écran avec option d'achat ne comporte pas de limite de quantité.
    2. L'économiseur d'écran de remise a défini la quantité maximale autorisée au niveau de l'offre sur 3.
  2. Le produit Écran de veille n'a pas de quantité maximale autorisée au niveau du produit. Les utilisateurs peuvent donc en acheter une quantité illimitée.
  3. L'utilisateur possède un économiseur d'écran avec remise et prévoit d'en acheter un autre avec cette remise.
  4. Lors de la récupération des offres disponibles, LimitedQuantityInfo pour l'économiseur d'écran d'option d'achat est nul et la valeur de quantité restante pour l'économiseur d'écran de remise 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 de bons de réduction 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 des informations sur la quantité limitée d'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 de la quantité maximale autorisée que vous avez configurée. Lorsque Google Play comptabilise la quantité possédée par l'utilisateur, il prend en compte les achats consommés ou en attente. Les achats annulés, remboursés ou rejetés ne sont pas comptabilisés dans la quantité possédée par l'utilisateur. Exemple :

  1. Les super économiseurs d'écran proposent une offre de remise avec une quantité maximale autorisée de un, ce qui permet aux utilisateurs d'acheter jusqu'à un économiseur d'écran à prix réduit.

  2. L'utilisateur achète l'un des économiseurs d'écran à prix réduit. Si l'utilisateur tente ensuite d'acheter le deuxième économiseur d'écran à prix réduit, une erreur se produit et le PurchasesUpdatedListener reçoit un code de réponse ITEM_UNAVAILABLE.

  3. L'utilisateur demande le remboursement de l'économiseur d'écran initialement acheté à prix réduit et l'obtient. L'utilisateur essaie d'acheter l'un des économiseurs d'écran à prix réduit, et l'achat est effectué.

Éligibilité des pays et des régions

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 d'une offre, elle n'est renvoyée dans getOneTimePurchaseOfferDetailsList() que si l'utilisateur se trouve dans un pays ou une région ciblés. 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 option d'achat. De même, si des tags d'offre sont spécifiés au niveau du produit, les offres 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 "économiseur d'écran" : un économiseur d'écran avec option d'achat et un économiseur d'écran avec remise.

  • L'économiseur d'écran Super économiseur d'écran comporte le tag d'offre de produit SSProductTag.
  • L'économiseur d'écran de l'option d'achat comporte le tag d'offre SSPurchaseOptionTag.
  • L'économiseur d'écran de remise comporte 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.