Questo documento descrive in dettaglio l'integrazione dei tuoi prodotti a pagamento singolo con la Libreria Fatturazione Play. Spiega inoltre come integrare varie offerte e opzioni di acquisto relative ai tuoi prodotti a pagamento singolo.
Puoi configurare più offerte e opzioni di acquisto per i tuoi prodotti a pagamento singolo. Ad esempio, puoi configurare un'opzione di acquisto e un'offerta di pre-ordine per lo stesso prodotto a pagamento singolo.
Prerequisiti
Per configurare più offerte per i prodotti a pagamento singolo, devi utilizzare l'
queryProductDetailsAsync() API. L'API querySkuDetailsAsync() obsoleta non è supportata. Per informazioni su come utilizzare
queryProductDetailsAsync() e la versione di launchBillingFlow()
che accetta ProductDetailsParams come input, consulta i passaggi di migrazione.
Eseguire una query sui dettagli del prodotto
Se hai configurato più offerte o opzioni di acquisto per il tuo prodotto a pagamento singolo, l'oggetto ProductDetails restituito dal metodo
queryProductDetailsAsync() può avere più di un'opzione di acquisto Acquista
e/o Noleggia disponibile per ogni prodotto a pagamento singolo. Per ottenere l'elenco di tutte le
offerte idonee per ogni ProductDetails oggetto, utilizza il
getOneTimePurchaseOfferDetailsList() metodo. In questo elenco verranno restituite solo le offerte e le opzioni di acquisto per le quali l'utente è idoneo. Il codice
nel onProductDetailsResponse() metodo deve gestire le offerte restituite.
Avviare il flusso di fatturazione
Per avviare una richiesta di acquisto dalla tua app, chiama il launchBillingFlow()
metodo dal thread principale dell'app. Questo metodo accetta un riferimento a un
BillingFlowParams oggetto che contiene l'oggetto ProductDetails
pertinente ottenuto chiamando queryProductDetailsAsync(). Per creare un
BillingFlowParams oggetto, utilizza la BillingFlowParams.Builder
classe. Tieni presente che devi impostare il token dell'offerta corrispondente all'offerta
selezionata dall'utente quando crei l'oggetto BillingFlowParams.
L'esempio seguente 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 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 è disponibile come parte di 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 relativo prezzo e la regione in cui è 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:
- Opzione di acquisto Acquista
- Opzione di acquisto Noleggia
Le offerte si riferiscono a uno schema di prezzi che puoi creare per i tuoi prodotti a pagamento singolo. Ad esempio, puoi creare un'offerta di sconto per il tuo prodotto a pagamento singolo.
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 Acquista)
- Offerta di sconto (supportata sia per le opzioni di acquisto Acquista che Noleggia)
Opzione di acquisto Acquista
Un'opzione di acquisto Acquista rappresenta un acquisto standard e definitivo del prodotto a pagamento singolo. Ha un campo legacyCompatible facoltativo, che indica se questa opzione di acquisto sarà disponibile nei flussi precedenti della Libreria Fatturazione Play (versione 7 o precedenti) che non supportano il nuovo modello. Per la compatibilità con le versioni precedenti, almeno un'opzione di acquisto deve essere contrassegnata come compatibile con versioni precedenti.
I passaggi per integrare le opzioni di acquisto Acquista e Noleggia con la Libreria Fatturazione Play sono gli stessi. Per capire come integrare l'opzione di acquisto Acquista con la Libreria Fatturazione Play, consulta Integrare l'opzione di acquisto Noleggia con la Libreria Fatturazione Play.
Opzione di acquisto Noleggia
L'opzione di acquisto Noleggia 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 Noleggia con la Libreria Fatturazione Play.
Integrare l'opzione di acquisto Noleggia con la Libreria Fatturazione Play
Questa sezione descrive come integrare l'opzione di acquisto Noleggia con la Libreria Fatturazione Play. Si presuppone che tu conosca i passaggi di integrazione iniziali 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 di integrazione della Libreria Fatturazione Play specifici per l'opzione di acquisto Noleggia.
Per configurare i prodotti disponibili per il noleggio, dovrai utilizzare il nuovo servizio monetization.onetimeproducts dell'API Play Developer o l'interfaccia utente di Play Developer Console. Per utilizzare il servizio, puoi chiamare direttamente l'API REST o
utilizzare la libreria client Java.
Avviare un flusso di acquisto per l'opzione Noleggia
Per avviare un flusso di acquisto per un'offerta di noleggio, svolgi i seguenti passaggi:
Recupera i metadati dell'opzione di acquisto Noleggia utilizzando il
ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails()metodo.L'esempio seguente mostra come ottenere i metadati dell'opzione di acquisto Noleggia:
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(); } } } } } });
Avvia il flusso di fatturazione.
Per avviare una richiesta di acquisto dalla tua app, chiama il
launchBillingFlow()metodo dal thread principale dell'app. Questo metodo accetta un riferimento a un oggettoBillingFlowParamsche contiene l'oggettoProductDetailspertinente ottenuto chiamandoqueryProductDetailsAsync(). Per creare unBillingFlowParamsoggetto, utilizza la classeBillingFlowParams.Builder. Tieni presente che devi impostare il token dell'offerta corrispondente all'offerta selezionata dall'utente quando crei l'oggettoBillingFlowParams. Se un utente è idoneo per l' opzione di acquisto Noleggia, riceverà un'offerta con RentalDetails e offerId inqueryProductDetailsAsync().L'esempio seguente 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.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);
Il
offerTokenè disponibile come parte diOneTimePurchaseOfferDetails. 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 metodooneTimePurchaseOfferDetails.getOfferToken().
Offerta di pre-ordine
Il pre-ordine ti consente di configurare i prodotti a pagamento singolo in modo che possano essere acquistati prima della loro uscita. Quando un utente pre-ordina il tuo prodotto, accetta di pagare l'articolo al momento dell'uscita del prodotto, a meno che l'utente non annulli il pre-ordine prima della data di uscita. Alla data di uscita, all'acquirente viene addebitato l'importo e riceve una notifica via email da Play che lo informa dell'uscita dell'articolo.
Questo documento descrive i passaggi per integrare l'offerta di acquisto di pre-ordine con la Libreria Fatturazione Play.
Integrare l'offerta di pre-ordine con la Libreria Fatturazione Play
Questa sezione descrive come integrare l'offerta di pre-ordine con la Libreria Fatturazione Play. Si presuppone che tu conosca i passaggi di integrazione iniziali 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 di integrazione della Libreria Fatturazione Play specifici per l'offerta di pre-ordine.
Avviare un flusso di acquisto per un'offerta di pre-ordine
Per avviare un flusso di acquisto per un'offerta di pre-ordine, svolgi i seguenti passaggi:
Recupera i metadati dell'offerta di pre-ordine utilizzando il
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()metodo. L'esempio seguente mostra come ottenere i metadati dell'offerta di pre-ordine: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(); } } } } } });
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 unBillingFlowParamsoggetto che contiene l'ProductDetailsoggetto pertinente ottenuto chiamando queryProductDetailsAsync(). Per creare unBillingFlowParamsoggetto, utilizza laBillingFlowParams.Builder class. Tieni presente che devi impostare il token dell'offerta corrispondente all'offerta selezionata dall'utente quando crei l'oggettoBillingFlowParams. Se un utente è idoneo per l'offerta di pre-ordine, riceverà un'offerta con PreorderDetails e offerId nel metodoqueryProductDetailsAsync().L'esempio seguente 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è disponibile come parte diOneTimePurchaseOfferDetails. 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 metodooneTimePurchaseOfferDetails.getOfferToken().
Offerta di sconto
Questa sezione descrive come configurare le offerte di sconto per i tuoi prodotti a pagamento singolo.
Esistono quattro parametri diversi che puoi configurare in un'offerta di sconto per un prodotto a pagamento singolo:
Prezzo dell'offerta scontata: specifica i dettagli relativi alla percentuale di sconto o al prezzo assoluto rispetto al prezzo originale.
Idoneità di paesi o regioni: specifica la disponibilità delle 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 sarà idoneo per l'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 relativa percentuale di sconto. Tieni presente che le informazioni sulla percentuale di sconto 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: recuperare lo sconto assoluto dell'offerta scontata
L'esempio seguente mostra come ottenere il prezzo intero originale dell'offerta scontata e lo sconto assoluto in micro. Tieni presente che le informazioni sullo sconto assoluto in micro vengono restituite solo per le offerte scontate. Per un'offerta di sconto è necessario specificare lo sconto assoluto o la percentuale di 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()) { 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(); } // … } } } });
Ottenere 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 di quantità massimo a livello di offerta di sconto, che viene applicato solo a livello di offerta. Ecco un esempio per illustrare:
- Super screensavers ha 2 offerte per il prodotto screensaver: screensaver con opzione di acquisto e screensaver scontato.
- Lo screensaver con opzione di acquisto non ha una quantità limitata impostata.
- Lo screensaver scontato ha la quantità massima consentita a livello di offerta impostata su 3.
- Il prodotto screensaver non ha una quantità massima consentita a livello di prodotto, quindi gli utenti possono acquistare quantità illimitate di questo prodotto.
- L'utente possiede 1 screensaver scontato e prevede di acquistarne un altro con lo screensaver scontato.
- Quando recuperi le offerte disponibili, LimitedQuantityInfo per lo screensaver con opzione di acquisto è null e il valore della quantità rimanente per lo screensaver scontato è 2.
L'esempio seguente mostra come ottenere la quantità limitata a livello di offerta di 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 utilizzano il numero massimo di utilizzi per un'offerta, l'offerta non viene restituita dal metodo getOneTimePurchaseOfferDetailsList().
Calcolare il limite di utilizzo
L'esempio seguente mostra come ottenere le informazioni sulla quantità limitata per una determinata offerta di 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 a pagamento singolo consumabili che 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 conta la quantità di proprietà dell'utente, Google Play considera gli acquisti consumati o in attesa. Gli acquisti annullati, rimborsati o stornati non vengono conteggiati nella quantità di proprietà dell'utente. Ad esempio:
Super screensavers ha configurato un'offerta di sconto con una quantità massima consentita di uno, quindi gli utenti possono acquistare fino a uno screensaver scontato.
L'utente acquista uno degli screensaver scontati. Se l'utente tenta di acquistare il secondo screensaver scontato, si verifica un errore e
PurchasesUpdatedListenerriceve un codice di risposta ITEM_UNAVAILABLE.L'utente chiede un rimborso dello screensaver scontato acquistato originariamente e lo riceve. L'utente tenta di acquistare uno degli screensaver scontati e l'acquisto andrà a buon fine.
Idoneità di paesi e regioni
Puoi scegliere i paesi o le regioni in cui l'offerta di opzione di acquisto o l'offerta di sconto sarà disponibile per gli utenti. Google Play valuterà l'idoneità dell'utente 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 target, altrimenti non farà parte dell'elenco delle offerte restituite quando chiami queryProductDetailsAsync().
Tag delle offerte
L'esempio seguente mostra come recuperare i tag delle offerte 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 delle offerte
Puoi impostare i tag delle offerte per il prodotto, l'opzione di acquisto o l'offerta di sconto. Le offerte di sconto ereditano i tag delle offerte dall'offerta dell'opzione di acquisto. Allo stesso modo, se i tag delle offerte sono specificati a livello di prodotto, sia l'offerta dell'opzione di acquisto sia le offerte di sconto ereditano i tag delle offerte del prodotto.
Ad esempio, Super screensavers ha due offerte per il prodotto screensaver: screensaver con opzione di acquisto e screensaver scontato.
- Super screensaver ha il tag dell'offerta del prodotto
SSProductTag. - Lo screensaver con opzione di acquisto ha il tag dell'offerta
SSPurchaseOptionTag. - Lo screensaver scontato ha il tag dell'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.