Ajouter des offres de précommande pour des produits ponctuels

1. Introduction

Dans cet atelier de programmation, vous allez vous concentrer sur la création d'un produit ponctuel et ajouter une offre de précommande pour ce produit.

Remarque : Avant de commencer cet atelier de programmation, vous devez demander l'accès à la fonctionnalité de précommande en remplissant le formulaire de participation au PAA pour les produits ponctuels.

Audience

Cet atelier de programmation s'adresse aux développeurs d'applications Android qui connaissent les produits ponctuels et souhaitent savoir comment ajouter des offres de précommande à leurs produits ponctuels.

Prérequis

Si vous ne connaissez pas les produits ponctuels, nous vous recommandons de suivre l'atelier de programmation Accéder à de nouveaux marchés avec une tarification régionale des produits.

Ce que vous allez apprendre...

  • Comment utiliser la Google Play Console pour créer des offres de précommande pour vos produits ponctuels
  • Comment utiliser les API de la bibliothèque Play Billing pour interroger les produits ponctuels et les détails de l'offre de précommande correspondante

Ce dont vous avez besoin...

2. Créer l'application exemple

Cet atelier de programmation utilise un exemple d'application Android pour vous apprendre à gérer les produits ponctuels. L'application exemple est conçue pour être une application Android entièrement fonctionnelle avec le code source complet, qui présente les aspects suivants :

  • Intégration de l'application à la bibliothèque Play Billing
  • Récupération des produits ponctuels et des offres de précommande associées
  • Exécution des parcours d'achat pour la tarification régionale

La vidéo de démonstration suivante montre l'apparence et le comportement de l'application exemple une fois déployée et exécutée.

Si vous connaissez déjà les produits ponctuels et la bibliothèque Play Billing, vous pouvez télécharger l'application exemple et l'essayer.

Prérequis

Avant de créer et de déployer l'application exemple, procédez comme suit :

Créer

L'objectif de cette étape de compilation est de générer un fichier Android App Bundle signé de l'application exemple.

Pour générer l'Android App Bundle, procédez comme suit :

  1. Téléchargez l'application exemple depuis GitHub.
  2. Créez l'application exemple. Avant de la créer, modifiez le nom du package de l'application exemple, puis créez-la. Si vous avez des packages d'autres applications dans votre Play Console, assurez-vous que le nom de package que vous fournissez pour l'application exemple est unique.

    Remarque : La création de l'application exemple ne crée qu'un fichier APK que vous pouvez utiliser pour les tests locaux. Toutefois, l'exécution de l'application ne récupère pas les produits ni les prix, car les produits n'ont pas été configurés dans la Play Console.
  3. Générez un Android App Bundle signé.
    1. Générer une clé d'importation et un keystore
    2. Signer votre application avec votre clé d'importation
    3. Configurer la signature d'application Play

L'étape suivante consiste à importer l'Android App Bundle dans la Google Play Console.

3. Créer un produit ponctuel avec précommande dans la Play Console

Pour créer des produits ponctuels dans la Google Play Console, vous devez disposer d'une application dans la Play Console. Créez une application dans la Play Console, puis importez l'app bundle signé que vous avez créé précédemment.

Créer une application

Pour créer une application :

  1. Connectez-vous à la Google Play Console à l'aide de votre compte de développeur.
  2. Cliquez sur Créer une application. La page Créer une application s'ouvre.
  3. Saisissez un nom d'application, sélectionnez la langue par défaut et d'autres informations sur l'application.
  4. Cliquez sur Créer une application. Une application est alors créée dans la Google Play Console.

Vous pouvez maintenant importer l'app bundle signé de l'application exemple.

Importer l'app bundle signé

  1. Importez l'app bundle signé dans le canal de test interne de la Google Play Console. Ce n'est qu'après l'importation que vous pourrez configurer les fonctionnalités liées à la monétisation dans la Play Console.
    1. Cliquez sur Test et mise en production > Test > Mise en production interne > Créer une mise en production.
    2. Saisissez un nom de mise en production et importez le fichier APK signé.
    3. Cliquez sur Suivant, puis sur Enregistrer et publier.

Vous pouvez maintenant créer les produits ponctuels.

Créer un produit ponctuel

Créez maintenant le produit ponctuel que vous souhaitez que les utilisateurs achètent.

  1. Ouvrez l'application exemple dans la Google Play Console, puis accédez à Monétiser avec Play > Produits > Produits ponctuels.
  2. Cliquez sur Créer un produit ponctuel.
  3. Saisissez les informations suivantes sur le produit :
    • Identifiant produit : saisissez un identifiant unique. Par exemple, upcoming_movie_1.
    • (Facultatif) Tags : ajoutez des tags pertinents.
    • Nom : saisissez un nom de produit. Par exemple, Product Movie.
    • Description : saisissez une description du produit. Par exemple, Product Description.
    • (Facultatif) Ajouter une image d'icône : importez une icône représentant votre produit.
    Remarque : Pour les besoins de cet atelier de programmation, vous pouvez ignorer la configuration de la section Taxe, conformité et programmes.
  4. Cliquez sur Suivant.
  5. Ajoutez une option d'achat et configurez sa disponibilité régionale. Un produit ponctuel nécessite au moins une option d'achat, qui définit comment le droit d'accès est accordé, son prix et sa disponibilité régionale. Pour cet atelier de programmation, nous allons ajouter l'option Acheter standard pour le produit.Dans la section Option d'achat, saisissez les informations suivantes :
    • ID de l'option d'achat : saisissez un ID unique. Par exemple, buy-movie.
    • Type d'achat : sélectionnez Acheter.
    • (Facultatif) Tags : ajoutez des tags spécifiques à cette option d'achat.
    • (Facultatif) Cliquez sur Options avancées pour configurer les options avancées. Pour les besoins de cet atelier de programmation, vous pouvez ignorer la configuration des options avancées.
  6. Vous devez ensuite configurer la disponibilité et le prix régionaux pour l'option d'achat. Dans la disponibilité régionale, vous spécifierez les régions dans lesquelles votre produit est disponible, y compris celles où votre application n'a pas encore été publiée. Par défaut, une option d'achat sera disponible dans toutes les régions.Dans la section Disponibilité et tarification, cliquez sur Modifier la disponibilité et l'accès.
    1. Sélectionnez Définir comme indisponible.
    Notez que toutes les régions sont automatiquement sélectionnées et définies sur Disponible.
    1. Désélectionnez uniquement le pays United States, puis cliquez sur Définir comme indisponible. Le produit ponctuel ne sera désormais disponible que dans le pays United States.
    2. Dans le menu déroulant Toutes les régions, sélectionnez Pays et régions disponibles. Vous ne devriez voir que United States.
    3. Cliquez sur l'icône Prix. Une boîte de dialogue s'affiche pour définir le prix.
    4. Saisissez 10 USD, puis cliquez sur Enregistrer.
  7. Cliquez sur Enregistrer comme brouillon.

Remarque : N'activez pas encore l'option d'achat. Nous l'activerons après avoir configuré l'offre de précommande. En effet, vous ne pouvez pas ajouter d'offre de précommande à une option d'achat active dont la disponibilité régionale est définie.

Ajouter une offre de précommande

Vous allez maintenant ajouter une offre de précommande pour l'option d'achat que vous avez créée précédemment. Une offre de précommande permet aux utilisateurs d'acheter votre article avant sa sortie officielle. Notez que les offres de précommande ne sont disponibles que pour l'option d'achat Acheter et ne peuvent être configurées que pour les nouveaux produits dans une région.

L'ajout d'une offre de précommande comporte les deux étapes suivantes :

  1. Préparer l'option d'achat Acheter pour l'offre de précommande
  2. Ajouter l'offre de précommande pour l'option d'achat

Préparer l'option d'achat Acheter pour l'offre de précommande

  1. Ouvrez l'application exemple dans la Google Play Console, puis accédez à Monétiser avec Play > Produits > Produits ponctuels.
  2. Sur la page Produits ponctuels, cliquez sur la flèche vers la droite à côté de votre produit (upcoming_movie_1). La page Modifier le produit ponctuel s'ouvre.
  3. Cliquez sur la flèche vers la droite à côté de l'option d'achat buy-movie que vous avez créée précédemment. La page Modifier l'option d'achat s'ouvre.
  4. Cliquez sur Modifier la disponibilité et l'accès , puis sélectionnez Définir comme disponible et autoriser les utilisateurs à précommander.
  5. Dans le menu déroulant Toutes les régions, sélectionnez Pays et régions disponibles. Vous ne devriez voir que United States, que vous avez configuré précédemment.
  6. Sélectionnez le pays, puis cliquez sur Disponible uniquement en précommande.
  7. Cliquez sur Enregistrer.

Notez que vous n'avez toujours pas ajouté d'offre de précommande à votre option d'achat. L'étape suivante consiste à ajouter l'offre de précommande.

Ajouter une offre de précommande

  1. Ouvrez l'application exemple dans la Google Play Console, puis accédez à Monétiser avec Play > Produits > Produits ponctuels.
  2. Sur la page Produits ponctuels, cliquez sur Ajouter une offre > Précommande pour votre produit (upcoming_movie_1). La page Ajouter une précommande s'ouvre.
  3. Saisissez les informations de la précommande :
    • ID de la précommande : saisissez preorder-offer-1.
    • (Facultatif) Ajouter une remise : vous pouvez sélectionner Aucune, Pourcentage ou Absolue. Pour les besoins de cet atelier de programmation, sélectionnez Aucune.
    • (Facultatif) Tags : ajoutez des tags pertinents.
    • Date et heure de début : définissez une date au moins trois jours dans le futur.
    • Date et heure de fin : définissez une date au moins 24 heures après la date de début.
    • Disponibilité après la précommande : indiquez si le produit devient disponible immédiatement après la période de précommande ou à une date/heure ultérieure spécifique.
    • (Facultatif) Garantie du prix le plus bas : sélectionnez cette option si vous souhaitez que les utilisateurs soient facturés au prix le plus bas entre leur prix de précommande et le prix au moment de la sortie. Cela peut être une forte incitation pour les premiers acheteurs.
  4. Cliquez sur Enregistrer.
  5. Ouvrez la page Modifier le produit ponctuel pour votre produit ponctuel (upcoming_movie_1).
  6. Cliquez sur Activer pour l'option d'achat (buy-movie).
  7. Cliquez sur Activer pour l'offre de précommande (preorder-offer-1) sous l'option d'achat. L'offre de précommande est alors activée et mise en ligne à la date que vous avez configurée précédemment dans les informations de la précommande.

Vidéo de création d'une offre de précommande

La vidéo suivante montre les étapes de création d'une offre de précommande décrites précédemment.

4. Intégrer à la bibliothèque Play Billing

Pour intégrer votre application à la bibliothèque Play Billing, procédez comme suit :

  1. Ajoutez la dépendance de la bibliothèque Play Billing à l'application exemple.
    dependencies {
    val billing_version = "8.1.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. Initialisez le BillingClient. Le BillingClient est le SDK client qui réside dans votre application et communique avec la bibliothèque Play Billing. L'extrait de code suivant montre comment initialiser le client de facturation.
    private BillingClient createBillingClient() {
    return BillingClient.newBuilder(activity)
        .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
        // For one-time products, add a listener to process and acknowledge the purchases. This will notify
        // Google the purchase was processed.
        // For client-only apps, use billingClient.acknowledgePurchase().
        // If you have a secure backend, you must acknowledge purchases on your server using the
        // server-side API.
        // See https://developer.android.com/google/play/billing/security#acknowledge
        // In this sample snippet purchases aren't processed. You must
        // implement your business logic to process and acknowledge the purchases.
        .setListener((billingResult, purchases) -> {})
        .enableAutoServiceReconnection()
        .build();
     }
    
  3. Connectez-vous à Google Play.L'extrait de code suivant montre comment se connecter à Google Play.
    /**
    * Starts the billing connection with Google Play. This method should be called exactly once
    * before any other methods in this class.
    *
    * @param productList The list of products to query for after the connection is established.
    */
    public void startBillingConnection(List<Product> productList) {
        billingClient.startConnection(
            new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                Log.d(TAG, "Billing Client Connection Successful");
                queryProductDetails(productList);
                } else {
                Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage());
                listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user.
                }
            }
    
            @Override
            public void onBillingServiceDisconnected() {
                Log.e(TAG, "Billing Client Connection Lost");
                listener.onBillingError("Billing Connection Lost");
            }
            });
    }
    
  4. Récupérez les informations sur le produit ponctuel.Une fois votre application intégrée à la bibliothèque Play Billing, vous devez récupérer les informations sur le produit ponctuel dans votre application. L'extrait de code suivant montre comment récupérer les informations sur le produit ponctuel dans votre application.
    private void queryProductDetails(List<Product> productList) {
        QueryProductDetailsParams queryProductDetailsParams =
            QueryProductDetailsParams.newBuilder().setProductList(productList).build();
    
        billingClient.queryProductDetailsAsync(
            queryProductDetailsParams,
            new ProductDetailsResponseListener() {
            @Override
            public void onProductDetailsResponse(
                BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                List<ProductDetails> productDetailsList =
                    productDetailsResponse.getProductDetailsList();
                    listener.onProductDetailsResponse(productDetailsList);
                } else {
                Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage());
                listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode());
                }
            }
            });
    }
    
    La récupération du produit ponctuel (upcoming_movie_1 dans cet exemple) dans ProductDetails génère une réponse semblable à la suivante :
    {
        "productId": "upcoming_movie_1",
        "type": "inapp",
        "title": "Purrfect Mayhem: The Final Playback (Movies All Day | Play Samples)",
        "name": "Purrfect Mayhem: The Final Playback",
        "description": "Yolo and Thorne must reach the original broadcasting site to initiate the \"Final Playback\" and save the timeline. Follow them through their race against the Clockinators.",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 8500000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$8.50",
                "offerIdToken": "<---offerIdToken--->",
                "offerId": "preorder",
                "purchaseOptionId": "buy-option",
                "offerTags": [],
                "validTimeWindow": {
                    "startTimeMillis": 1756771200000,
                    "endTimeMillis": 1785542400000
                },
                "preorderDetails": {
                    "preorderReleaseTimeMillis": 1785542400000,
                    "preorderPresaleEndTimeMillis": 1785542400000
                }
            }
        ]
    }
    
    Notez que les informations sur l'offre de précommande sont disponibles dans oneTimePurchaseOfferDetailsList. Cette liste comporte une option d'achat (buy-option) pour laquelle une offre de précommande a été configurée dans la Play Console. Vous pouvez identifier chaque option d'achat de manière unique par son offerIdToken.
  5. Récupérez le jeton d'offre ainsi que les informations sur l'offre de précommande. Vous avez besoin du jeton d'offre pour lancer le parcours de facturation à l'étape 6.
    @Override
    public void onProductDetailsResponse(List<ProductDetails> productDetailsList) {
    
    if (productDetailsList != null && !productDetailsList.isEmpty()) {
    
    // 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();
          }
        }
      }
      }
      } else {
            Log.e(TAG, "No product details found for " + productId);
        }
    }
    
  6. Lancez le parcours de facturation.
    /**
     * Launches the billing flow for the product with the given offer token.
    *
    * @param activity The activity instance from which the billing flow will be launched.
    * @param productDetails The product details of the product to purchase.
    * @param offerToken The offer token of the product to purchase.
    * @return The result of the billing flow.
    */
    public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) {
        ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList =
            ImmutableList.of(
                BillingFlowParams.ProductDetailsParams.newBuilder()
                    .setProductDetails(productDetails)
                    .setOfferToken(offerToken)
                    .build());
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(productDetailsParamsList)
            .build();
        billingClient.launchBillingFlow(activity, billingFlowParams);
    }
    

5. Tester les options d'achat

Avant de rendre vos produits ponctuels disponibles dans votre application en production, vous pouvez tester votre intégration à la bibliothèque Play Billing à l'aide de testeurs de licence et de l'application Play Billing Lab.

Pour savoir comment tester vos options d'achat à l'aide de l'application Play Billing Lab, consultez l'atelier de programmation Accéder à de nouveaux marchés avec une tarification régionale des produits.

6. Étapes suivantes

Documents de référence

7. Félicitations !

Félicitations ! Vous avez réussi à naviguer dans la Google Play Console pour créer une offre de précommande pour un produit ponctuel. Vous comprenez maintenant mieux le catalogue de produits flexible de Google Play pour les achats ponctuels.

Enquête

Vos commentaires sur cet atelier de programmation sont très importants. N'hésitez pas à prendre quelques minutes pour répondre à notre enquête.