Più opzioni di acquisto e offerte per i prodotti a pagamento singolo

Questo documento descrive in dettaglio l'integrazione dei tuoi prodotti a pagamento singolo con la Libreria Fatturazione Play. Spiega inoltre come integrare varie opzioni di acquisto e offerte relative ai tuoi prodotti a pagamento singolo.

Puoi configurare più opzioni di acquisto e offerte per i tuoi prodotti una tantum. Ad esempio, puoi configurare un'opzione di acquisto e un'offerta di preordine per lo stesso prodotto a pagamento singolo.

Prerequisiti

Per configurare più offerte per i prodotti a pagamento singolo, devi utilizzare l'API queryProductDetailsAsync(). L'API querySkuDetailsAsync() deprecata non è supportata. Per informazioni su come utilizzare queryProductDetailsAsync() e la versione di launchBillingFlow() che accetta ProductDetailsParams come input, consulta i passaggi di migrazione.

Eseguire query sui dettagli del prodotto

Se hai configurato più offerte o opzioni di acquisto per il tuo prodotto una tantum, l'oggetto ProductDetails restituito dal metodo queryProductDetailsAsync() può avere più di un'opzione di acquisto e/o noleggio disponibile per prodotto una tantum. Per ottenere l'elenco di tutte le offerte idonee per ogni oggetto ProductDetails, utilizza il metodo getOneTimePurchaseOfferDetailsList(). Nell'elenco verranno restituite solo le offerte e le opzioni di acquisto per le quali l'utente è idoneo. Il tuo codice nel metodo onProductDetailsResponse() deve gestire le offerte restituite.

Avvia il flusso di fatturazione

Per avviare una richiesta di acquisto dalla tua app, chiama il metodo launchBillingFlow() dal thread principale dell'app. Questo metodo accetta un riferimento a un oggetto BillingFlowParams che contiene l'oggetto ProductDetails pertinente ottenuto chiamando queryProductDetailsAsync(). Per creare un oggetto BillingFlowParams, utilizza la classe BillingFlowParams.Builder. Tieni presente che devi impostare il token dell'offerta corrispondente a quella selezionata dall'utente durante la creazione dell'oggetto BillingFlowParams.

Il seguente esempio mostra come avviare il flusso di acquisto per un prodotto a pagamento singolo con più offerte:

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);
    
    

Il offerToken si trova all'interno del OneTimePurchaseOfferDetails. Quando mostri l'offerta all'utente, assicurati di configurare i parametri del flusso di fatturazione con il token dell'offerta corretto, che puoi ottenere dal metodo oneTimePurchaseOfferDetails.getOfferToken().

Offerte e opzioni di acquisto

Un'opzione di acquisto ti consente di definire in che modo il diritto viene concesso a un utente, il suo prezzo e in quale regione è disponibile il prodotto. Un singolo prodotto può avere più opzioni di acquisto, che possono rappresentare dove e come vendi il tuo prodotto.

Google Play supporta le seguenti opzioni di acquisto per i prodotti a pagamento singolo:

  • Acquista opzione di acquisto
  • Opzione di acquisto del noleggio

Le offerte si riferiscono a un sistema di prezzi che puoi creare per i tuoi prodotti una tantum. Ad esempio, puoi creare un'offerta di sconto per il tuo prodotto una tantum.

Google Play supporta le seguenti offerte di acquisto per i prodotti a pagamento singolo:

  • Offerta di pre-ordine (supportata solo per l'opzione di acquisto)
  • Offerta con sconto (supportata per le opzioni di acquisto e noleggio)

Acquista opzione di acquisto

Un'opzione di acquisto rappresenta un acquisto standard e definitivo del prodotto a pagamento singolo. Dispone di un campo legacyCompatible facoltativo, che indica se questa opzione di acquisto sarà disponibile nei flussi precedenti della Libreria Fatturazione Play (versione 7 o precedente) che non supportano il nuovo modello. Per la compatibilità con le versioni precedenti, almeno un'opzione di acquisto deve essere contrassegnata come compatibile con le versioni precedenti.

I passaggi per integrare le opzioni di acquisto e noleggio con PBL sono gli stessi. Per capire come integrare l'opzione di acquisto con PBL, vedi Integrare l'opzione di acquisto con PBL.

Opzione di acquisto del noleggio

L'opzione di acquisto del noleggio consente agli utenti di accedere ai prodotti a pagamento singolo per un periodo di tempo specificato. Puoi specificare il periodo di noleggio e la relativa scadenza. Questo documento descrive i passaggi per integrare l'opzione di acquisto del noleggio con la Libreria Fatturazione Google Play (PBL).

Integrare l'opzione di acquisto a noleggio con PBL

Questa sezione descrive come integrare l'opzione di acquisto del noleggio con la libreria Play Billing Library (PBL). Presuppone che tu conosca i passaggi iniziali di integrazione della Libreria Fatturazione Play, ad esempio l'aggiunta della dipendenza della Libreria Fatturazione Play alla tua app, l'inizializzazione di BillingClient e la connessione a Google Play. Questa sezione si concentra sugli aspetti dell'integrazione di Acquisto e noleggio specifici per l'opzione di acquisto.

Per configurare i prodotti disponibili per il noleggio, devi utilizzare il nuovo servizio monetization.onetimeproducts dell'API Play Developer o l'UI di Play Developer Console. Per utilizzare il servizio, puoi chiamare direttamente l'API REST o utilizzare la libreria client Java.

Avvia un flusso di acquisto per l'opzione di noleggio

Per avviare un flusso di acquisto per un'offerta di noleggio:

  1. Recupera i metadati dell'opzione di acquisto del noleggio utilizzando il metodo ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails().

    Il seguente esempio mostra come ottenere i metadati dell'acquisto del noleggio:

    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. Avvia il flusso di fatturazione.

    Per avviare una richiesta di acquisto dalla tua app, chiama il metodo launchBillingFlow() dal thread principale dell'app. Questo metodo accetta un riferimento a un oggetto BillingFlowParams che contiene l'oggetto ProductDetails pertinente ottenuto chiamando queryProductDetailsAsync(). Per creare un oggetto BillingFlowParams, utilizza la classe BillingFlowParams.Builder. Tieni presente che devi impostare il token dell'offerta corrispondente a quella selezionata dall'utente quando crei l'oggetto BillingFlowParams. Se un utente è idoneo per l'opzione di acquisto del noleggio, riceverà un'offerta con RentalDetails e offerId in queryProductDetailsAsync().

    Il seguente esempio mostra come avviare il flusso di fatturazione:

    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);

    Il offerToken si trova all'interno del OneTimePurchaseOfferDetails. Quando mostri l'offerta all'utente, assicurati di configurare i parametri del flusso di fatturazione con il token dell'offerta corretto, che puoi ottenere dal metodo oneTimePurchaseOfferDetails.getOfferToken().

Offerta di prenotazione

La prenotazione ti consente di configurare prodotti una tantum da acquistare prima che l'articolo venga rilasciato. Quando un utente prenota il tuo prodotto, accetta di pagare l'articolo al momento del lancio, a meno che non annulli la prenotazione prima della data di uscita. Nella data di uscita, all'acquirente viene addebitato l'importo e Play lo avvisa via email che l'articolo è stato rilasciato.

Questo documento descrive i passaggi per integrare l'offerta di acquisto in preordine con la libreria Fatturazione Google Play (PBL).

Integrare l'offerta di preordine con PBL

Questa sezione descrive come integrare l'offerta di preordine con la libreria Google Play Billing Library (PBL). Presuppone che tu conosca i passaggi iniziali di integrazione della Libreria Fatturazione Play, ad esempio l'aggiunta della dipendenza della Libreria Fatturazione Play alla tua app, l'inizializzazione di BillingClient e la connessione a Google Play. Questa sezione si concentra sugli aspetti dell'integrazione di PBL specifici per l'offerta di preordine.

Avviare un flusso di acquisto per un'offerta di prenotazione

Per avviare un flusso di acquisto per un'offerta di prenotazione, svolgi i seguenti passaggi:

  1. Recupera i metadati dell'offerta di prenotazione utilizzando il metodo ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails(). Il seguente esempio mostra come ottenere i metadati dell'offerta di prenotazione:

    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. Avvia il flusso di fatturazione.

    Per avviare una richiesta di acquisto dalla tua app, chiama il metodo launchBillingFlow() dal thread principale dell'app. Questo metodo accetta un riferimento a un oggetto BillingFlowParams che contiene l'oggetto ProductDetails pertinente ottenuto chiamando queryProductDetailsAsync(). Per creare un oggetto BillingFlowParams, utilizza BillingFlowParams.Builder class. Tieni presente che devi impostare il token dell'offerta corrispondente a quella selezionata dall'utente durante la creazione dell'oggetto BillingFlowParams. Se un utente è idoneo per l'offerta di preordine, riceverà un'offerta con PreorderDetails e offerId nel metodo queryProductDetailsAsync().

    Il seguente esempio mostra come avviare il flusso di fatturazione:

    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);

    Il offerToken si trova all'interno del OneTimePurchaseOfferDetails. Quando mostri l'offerta all'utente, assicurati di configurare i parametri del flusso di fatturazione con il token dell'offerta corretto, che puoi ottenere dal metodo oneTimePurchaseOfferDetails.getOfferToken().

Offerta di sconto

Questa sezione descrive come configurare le offerte di sconto per i tuoi prodotti una tantum.

Esistono quattro parametri diversi che puoi configurare in un'offerta di sconto una tantum per i prodotti:

  • Prezzo dell'offerta scontato: specifica i dettagli dello sconto percentuale o del prezzo assoluto rispetto al prezzo originale.

  • Idoneità di paesi o regioni: specifica la disponibilità di offerte di prodotti a pagamento singolo in un paese o in una regione.

  • Limite di acquisto (facoltativo): consente di determinare il numero di volte in cui un utente può utilizzare la stessa offerta. Se un utente supera il limite di acquisto, non potrà usufruire dell'offerta.

  • Tempo limitato (facoltativo): specifica il periodo di tempo in cui l'offerta è disponibile. Al di fuori del periodo di tempo, l'offerta non è idonea per l'acquisto.

Recuperare le informazioni sul prezzo dell'offerta scontata

Per un'offerta scontata, puoi recuperare la percentuale di sconto o lo sconto assoluto offerto.

Esempio 1: recuperare la percentuale di sconto dell'offerta scontata

L'esempio seguente mostra come ottenere il prezzo intero originale dell'offerta scontata e la percentuale di sconto. Tieni presente che le informazioni sullo sconto percentuale vengono restituite solo per le offerte scontate.

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();
            }
            // …
          }
        }
      }
    });
    
Esempio 2: recupera lo sconto assoluto dell'offerta scontata

L'esempio seguente mostra come ottenere il prezzo pieno originale dell'offerta scontata e lo sconto assoluto in micro. Tieni presente che lo sconto assoluto in microinformazioni viene restituito solo per le offerte scontate. Per un'offerta di sconto, è necessario specificare lo sconto assoluto o lo sconto percentuale.

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();
            }
            // …
          }
        }
      }
    });
    

Recuperare la finestra temporale valida di un'offerta

Puoi utilizzare il metodo OneTimePurchaseOfferDetails.getValidTimeWindow() per ottenere la finestra temporale valida per un'offerta. Questo oggetto contiene l'ora di inizio e di fine della finestra temporale in millisecondi.

L'esempio seguente mostra come ottenere la finestra temporale valida di un'offerta:

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à limitata a livello di offerta di sconto

Puoi specificare il limite massimo di quantità a livello di offerta di sconto, ovvero applicato solo a livello di offerta. Ecco un esempio:

  1. Super screensavers offre due opzioni per il prodotto salvaschermo: l'acquisto del salvaschermo e il salvaschermo scontato.
    1. Il salvaschermo dell'opzione di acquisto non ha una quantità limitata configurata.
    2. Il salvaschermo con sconti ha la quantità massima consentita a livello di offerta impostata su 3.
  2. Il prodotto screensaver non ha una quantità massima consentita a livello di prodotto, pertanto gli utenti possono acquistare quantità illimitate di questo prodotto.
  3. L'utente possiede un salvaschermo scontato e prevede di acquistarne un altro con il salvaschermo scontato.
  4. Quando recupera le offerte disponibili, LimitedQuantityInfo per il screensaver dell'opzione di acquisto è null e il valore della quantità rimanente per il screensaver dello sconto è 2.

Il seguente esempio mostra come ottenere la quantità limitata a livello di offerta con sconto:

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();
              // …
            }
          }
        }
      }
    });
    

Quando gli utenti esauriscono il numero massimo di utilizzi per un'offerta, questa non viene restituita dal metodo getOneTimePurchaseOfferDetailsList().

Calcolare il limite di utilizzo

L'esempio seguente mostra come ottenere le informazioni sulla quantità limitata di una determinata offerta con sconto. Puoi ottenere la quantità massima consentita e la quantità rimanente per l'utente corrente. Tieni presente che la funzionalità di quantità limitata è applicabile sia alle offerte di prodotti una tantum consumabili sia a quelle non consumabili. Questa funzionalità è supportata solo a livello di offerta.

Google Play calcola la quantità rimanente sottraendo la quantità di proprietà dell'utente dalla quantità massima consentita che hai configurato. Quando conteggia la quantità di proprietà dell'utente, Google Play prende in considerazione gli acquisti consumati o in attesa. Gli acquisti annullati, rimborsati o stornati non vengono conteggiati ai fini della quantità di proprietà dell'utente. Ad esempio:

  1. I super salvaschermi configurano un'offerta di sconto con la quantità massima consentita di uno, in modo che gli utenti possano acquistare fino a un salvaschermo scontato.

  2. L'utente acquista uno dei salvaschermi scontati. Se l'utente tenta di acquistare il secondo salvaschermo scontato, si verifica un errore e il PurchasesUpdatedListener riceve un codice di risposta ITEM_UNAVAILABLE.

  3. L'utente chiede un rimborso dello screensaver scontato acquistato originariamente e lo riceve. L'utente tenta di acquistare uno dei salvaschermo scontati e l'acquisto andrà a buon fine.

Idoneità di paesi e regioni

Puoi scegliere i paesi o le regioni in cui l'offerta o lo sconto dell'opzione di acquisto saranno disponibili per gli utenti. Google Play valuterà l'idoneità degli utenti in base al paese di Play. Quando configuri la disponibilità regionale per un'offerta, questa verrà restituita solo come parte di getOneTimePurchaseOfferDetailsList() se l'utente si trova in un paese o in una regione di destinazione, altrimenti non farà parte dell'elenco delle offerte restituite quando chiami queryProductDetailsAsync().

Tag offerta

Il seguente esempio mostra come recuperare i tag offerta associati a un'offerta.

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();
            // …
          }
        }
      }
    });
    
    

Ereditarietà dei tag dell'offerta

Puoi impostare i tag delle offerte per il prodotto, l'opzione di acquisto o l'offerta di sconto. Le offerte scontate ereditano i tag offerta dall'offerta dell'opzione di acquisto. Allo stesso modo, se i tag offerta sono specificati a livello di prodotto, sia l'offerta di opzione di acquisto sia le offerte di sconto ereditano i tag offerta prodotto.

Ad esempio, Super screensaver ha due offerte per il prodotto salvaschermo: un salvaschermo con opzione di acquisto e un salvaschermo scontato.

  • Il salvaschermo avanzato ha il tag dell'offerta del prodotto SSProductTag.
  • Il salvaschermo dell'opzione di acquisto ha il tag dell'offerta SSPurchaseOptionTag.
  • Il salvaschermo con lo sconto ha il tag offerta SSDiscountOfferTag.

In questo esempio, il metodo oneTimePurchaseOfferDetails.getOfferTagsList() per l'offerta dell'opzione di acquisto restituisce SSProductTag e SSPurchaseOptionTag. Per l'offerta di sconto, il metodo restituisce SSProductTag, SSPurchaseOptionTag e SSDiscountOfferTag.