Questo documento descrive in dettaglio l'integrazione dei prodotti a pagamento singolo (OTP) con la Libreria Fatturazione Play. Inoltre, spiega come integrare varie opzioni di acquisto e offerte correlate 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 prenotazione 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()
non è supportata. Per informazioni su come utilizzare
queryProductDetailsAsync()
e la versione di launchBillingFlow()
che accetta ProductDetailsParams
come input, consulta i passaggi della migrazione.
Esegui una 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 di noleggio disponibile per prodotto una tantum. Per ottenere l'elenco di tutte le offerte idonee per ogni oggetto ProductDetails
, utilizza il metodo getOneTimePurchaseOfferDetailsList()
. Nell'ambito di questo elenco verranno restituite solo le offerte e le opzioni di acquisto per le quali l'utente è idoneo. Il 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 prende un riferimento a un oggetto BillingFlowParams
contenente l'oggetto ProductDetails
pertinente ottenuto dalla chiamata a queryProductDetailsAsync()
. Per creare un oggetto
BillingFlowParams
, utilizza la classe BillingFlowParams.Builder
. 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);
offerToken
è disponibile nella sezione 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 indicare dove e come vendi il prodotto.
Google Play supporta le seguenti opzioni di acquisto per i prodotti a pagamento singolo:
- Acquista opzione di acquisto
- Opzione di acquisto con noleggio
Le offerte fanno riferimento a uno schema 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 Acquista)
- Offerta di sconto (supportata sia per le opzioni di acquisto che per quelle di noleggio)
Acquista opzione di acquisto
Un'opzione di acquisto rappresenta un acquisto standard e definitivo del prodotto a pagamento singolo. Dispone di un campo facoltativo legacyCompatible 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 sia di acquisto che di noleggio con PBL sono gli stessi. Per capire come integrare l'opzione di acquisto con la pubblicità basata sui prodotti, consulta Integrare l'opzione di acquisto con la pubblicità basata sui prodotti.
Opzione di acquisto con noleggio
L'opzione di acquisto con noleggio consente agli utenti di accedere ai prodotti a pagamento singolo per una durata specificata. Puoi specificare il periodo di noleggio e la relativa scadenza. Questo documento descrive i passaggi per integrare l'opzione di acquisto di 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 con noleggio con la Play Billing Library (PBL). Si presume che tu abbia familiarità con i passaggi iniziali di integrazione della Libreria Fatturazione Play, ad esempio l'aggiunta della dipendenza dalla Libreria Fatturazione Play alla tua app, l'inizializzazione di BillingClient e la connessione a Google Play. Questa sezione si concentra sugli aspetti di integrazione del PBL specifici per l'opzione di acquisto con noleggio.
Per configurare i prodotti disponibili per il noleggio, dovrai utilizzare il nuovo serviziomonetization.onetimeproducts
dell'API Google Play Developer o l'interfaccia utente di Play 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:
Recupera i metadati dell'opzione di acquisto di noleggio utilizzando il metodo
ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails()
.L'esempio seguente mostra come ottenere i metadati relativi all'acquisto di una casa in affitto:
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 metodo
launchBillingFlow()
dal thread principale dell'app. Questo metodo prende un riferimento a un oggettoBillingFlowParams
contenente l'oggettoProductDetails
pertinente ottenuto dalla chiamata diqueryProductDetailsAsync()
. Per creare un oggettoBillingFlowParams
, 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 con noleggio, 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.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);
offerToken
è disponibile nella sezioneOneTimePurchaseOfferDetails
. 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 prenotazione
La prenotazione ti consente di configurare i prodotti una tantum da acquistare prima del rilascio dell'articolo. Quando un utente prenota il tuo prodotto, accetta di pagare l'articolo al momento della sua uscita, a meno che non annulli la prenotazione prima della data di uscita. Nella data di uscita, all'acquirente viene addebitato l'importo e Google Play lo informa via email dell'uscita dell'articolo.
Questo documento descrive i passaggi per integrare l'offerta di acquisto in prevendita con la Libreria Fatturazione Google Play (PBL).
Integrare l'offerta di preordine con PBL
Questa sezione descrive come integrare l'offerta di prenotazione con la raccolta di fatturazione di Google Play (PBL). Si presume che tu abbia familiarità con i passaggi iniziali di integrazione della Libreria Fatturazione Play, ad esempio l'aggiunta della dipendenza dalla Libreria Fatturazione Play alla tua app, l'inizializzazione di BillingClient e la connessione a Google Play. Questa sezione si concentra sugli aspetti di integrazione PBL specifici per l'offerta di preordine.
Avviare un flusso di acquisto per un'offerta di prenotazione
Per lanciare un flusso di acquisto per un'offerta di prenotazione, svolgi i seguenti passaggi:
Recupera i metadati dell'offerta di prenotazione utilizzando il metodo
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()
. L'esempio seguente 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(); } } } } } });
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 unBillingFlowParams
che contiene l'oggetto pertinenteProductDetails
ottenuto dall'chiamata queryProductDetailsAsync(). Per creare un oggettoBillingFlowParams
, utilizzaBillingFlowParams.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 prenotazione, 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);
offerToken
è disponibile nella sezioneOneTimePurchaseOfferDetails
. 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 una tantum.
In un'offerta di sconto una tantum per un prodotto puoi configurare quattro diversi parametri:
Prezzo dell'offerta scontata: specifica i dettagli della percentuale di sconto o del prezzo assoluto scontato rispetto al prezzo originale.
Idoneità per paesi o regioni: specifica la disponibilità di offerte di prodotti a pagamento singolo in un paese o una regione.
(Facoltativo) Limite di acquisto: consente di determinare quante volte un utente può utilizzare la stessa offerta. Se un utente supera il limite di acquisto, non sarà idoneo per l'offerta.
A 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 scontato dell'offerta
Per un'offerta scontata, puoi recuperare la percentuale di sconto o lo sconto assoluto offerto.
Esempio 1: recupera la percentuale di sconto dell'offerta scontata
L'esempio seguente mostra come ottenere il prezzo pieno originale dell'offerta scontata e la percentuale di sconto. Tieni presente che le informazioni sulla percentuale di sconto vengono riportate 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 pieno originale dell'offerta scontata e lo sconto assoluto in micro. Tieni presente che lo sconto assoluto nelle informazioni su micros viene restituito solo per le offerte scontate. Per un'offerta di sconto è necessario specificare lo sconto assoluto o 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(); } // … } } } });
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 dell'intervallo di tempo 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à massima a livello di offerta di sconto, che viene applicato solo a livello di offerta. Ecco un esempio:
- Super screensaver ha due offerte per il prodotto screensaver: screensaver con opzione di acquisto e screensaver scontato.
- Il salvaschermo con le opzioni di acquisto non ha una quantità limitata impostata.
- Per lo screensaver sconto, la quantità massima consentita a livello di offerta è impostata su 3.
- Il prodotto salvaschermo non ha una quantità massima consentita a livello di prodotto, pertanto gli utenti possono acquistarne quantità illimitate.
- L'utente possiede un salvaschermo con sconto e prevede di acquistarne un altro con il salvaschermo con sconto.
- Quando vengono recuperate le offerte disponibili, il valore LimitedQuantityInfo per lo screensaver dell'opzione di acquisto è nullo e il valore della quantità rimanente per lo screensaver dello sconto è 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 esauriscono le richieste di utilizzo della quantità massima 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 di 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 una tantum consumabili che 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 titoli di proprietà dell'utente, Google Play prende in considerazione gli acquisti consumati o in attesa. Gli acquisti annullati, rimborsati o di storno di addebito non vengono conteggiati ai fini della quantità di proprietà dell'utente. Ad esempio:
I super salvaschermo impostano un'offerta di sconto con una quantità massima consentita di uno, in modo che gli utenti possano acquistare fino a un salvaschermo scontato.
L'utente acquista uno dei salvaschermo scontati. Se l'utente tenta di acquistare il secondo salvaschermo scontato, verrà visualizzato un errore e
PurchasesUpdatedListener
riceverà un codice di risposta ITEM_UNAVAILABLE.L'utente richiede un rimborso per lo screensaver scontato acquistato originariamente e lo riceve correttamente. L'utente tenta di acquistare uno tra i salvaschermo scontati e l'acquisto andrà a buon fine.
Idoneità per paese e regione
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à degli utenti in base al paese di Google Play. Quando configuri la disponibilità regionale per un'offerta, questa verrà restituita come parte di getOneTimePurchaseOfferDetailsList()
solo se l'utente si trova in un paese o in una regione di destinazione, altrimenti non farà parte dell'elenco di offerte restituito quando chiami queryProductDetailsAsync()
.
Tag offerta
L'esempio seguente mostra come recuperare i tag di 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 di offerta
Puoi impostare i tag di offerta per prodotti, opzioni di acquisto o offerte di sconto. Le offerte di sconto ereditano i tag dell'offerta dall'opzione di acquisto. Analogamente, se i tag di offerta sono specificati a livello di prodotto, sia le offerte con opzioni di acquisto che le offerte di sconto ereditano i tag di offerta del prodotto.
Ad esempio, Super screensavers ha due offerte per il prodotto salvaschermo: un salvaschermo con opzione di acquisto e un salvaschermo con sconto.
- Il salvaschermo Super ha il tag dell'offerta del prodotto
SSProductTag
. - Il salvaschermo dell'opzione di acquisto ha il tag dell'offerta
SSPurchaseOptionTag
. - Il salvaschermo dello sconto 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
.