Questo documento contiene le note di rilascio della Libreria Fatturazione Google Play.
Uscita della versione 7.1.1 della Libreria Fatturazione Google Play (3/10/2024)
Ora è disponibile la versione 7.1.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Correzioni di bug
- È stato corretto un bug nella Libreria Fatturazione Play 7.1.0 relativo al
test dei codici di risposta
BillingResult
.
Rilascio della versione 7.1.0 della libreria Fatturazione Google Play (19/09/2024)
Ora è disponibile la versione 7.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
- Sicurezza del thread migliorata in relazione allo stato e alla gestione della connessione.
- Sono state introdotte modifiche parziali per il test dei codici di risposta
BillingResult
, che sono stati rilasciati completamente nella versione 7.1.1 della Libreria Fatturazione Play. Per testare la tua integrazione utilizzando questa funzionalità, devi eseguire l'upgrade alla Libreria Fatturazione Play 7.1.1. Esiste un bug che interessa solo le applicazioni con test di override della fatturazione abilitati e non influisce sull'utilizzo regolare. Per ulteriori informazioni, consulta Testare i codici di rispostaBillingResult
.
Rilascio della Libreria Fatturazione Google Play 7.0.0 (14/05/2024)
Ora è disponibile la versione 7.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
Sono state aggiunte API per supportare gli abbonamenti a rate.
- È stato aggiunto
ProductDetails.InstallmentPlanDetails
per i piani base con rate che gli utenti possono acquistare. Questa API aiuta la tua app a identificare il piano di rateizzazione e la relativa configurazione dell'impegno per fornire all'utente informazioni correlate. Per saperne di più, consulta la nostra guida alle rate dell'abbonamento.
- È stato aggiunto
Sono stati aggiunti
PendingPurchasesParams
eBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
per sostituireBillingClient.Builder.enablePendingPurchases()
, che è stato ritirato in questa release.enablePendingPurchases()
, deprecato, è funzionalmente equivalente aenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.
Sono state aggiunte API per supportare le transazioni in sospeso per i piani di abbonamento prepagati:
- Utilizza
PendingPurchasesParams.Builder.enablePrepaidPlans()
insieme aBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
per attivare le transazioni in attesa per i piani di abbonamento prepagati. Quando aggiungi il supporto, assicurati che la tua app gestisca correttamente anche i cicli di vita degli abbonamenti. Per scoprire di più, consulta la nostra guida agli acquisti in attesa. - Sono stati aggiunti
Purchase.PendingPurchaseUpdate
ePurchase.getPendingPurchaseUpdate()
per recuperare il ricaricamento in attesa o l'upgrade o il downgrade a un abbonamento esistente.
- Utilizza
BillingClient.Builder.enableAlternativeBilling()
,AlternativeBillingListener
, eAlternativeChoiceDetails
sono stati rimossi .- Gli sviluppatori dovrebbero utilizzare
BillingClient.Builder.enableUserChoiceBilling()
conUserChoiceBillingListener
eUserChoiceDetails
nel callback dell'ascoltatore.
- Gli sviluppatori dovrebbero utilizzare
BillingFlowParams.ProrationMode
,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
, eBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
sono stati rimossi.- Gli sviluppatori devono utilizzare
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
conBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
. BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
.BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Gli sviluppatori devono utilizzare
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()
rimosso.- Gli sviluppatori devono utilizzare invece
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)
.
- Gli sviluppatori devono utilizzare invece
BillingClient.queryPurchaseHistoryAsync()
è stata deprecata e verrà rimossa in una release futura. Gli sviluppatori devono utilizzare le seguenti alternative:- Acquisti confermati e in attesa: utilizza
BillingClient.queryPurchasesAsync()
per recuperare gli acquisti attivi. - Acquisti consumati: gli sviluppatori devono tenere traccia degli acquisti consumati sui propri server.
- Acquisti annullati: utilizza l'API sviluppatore voided-purchases.
- Per maggiori dettagli, consulta Eseguire query sulla cronologia acquisti
- Acquisti confermati e in attesa: utilizza
BillingFlowParams.ProductDetailsParams.setOfferToken()
ora genera un'eccezione quando gli sviluppatori specificano unofferToken
vuoto.minSdkVersion
aggiornato a 21 etargetSdkVersion
a 34.
Uscita della versione 6.2.1 della libreria Fatturazione Google Play (16/04/2024)
Ora è disponibile la versione 6.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
- È stato corretto un bug in
BillingClient.showAlternativeBillingOnlyInformationDialog()
per cuiAlternativeBillingOnlyInformationDialogListener
potrebbe non essere chiamato in alcuni casi al termine della finestra di dialogo.
Uscita della versione 6.2.0 della Libreria Fatturazione Google Play (6/03/2024)
Ora è disponibile la versione 6.2.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
- Sono state aggiunte API per supportare le offerte esterne.
- È stato aggiunto
BillingClient.Builder.enableExternalOffer()
per consentire di fornire offerte esterne. - È stato aggiunto
BillingClient.isExternalOfferAvailableAsync()
per controllare la disponibilità della funzionalità di offerta esterna. - È stato aggiunto
BillingClient.showExternalOfferInformationDialog()
per mostrare agli utenti una finestra di dialogo informativa prima di indirizzarli all'esterno dell'app. - È stato aggiunto
BillingClient.createExternalOfferReportingDetailsAsync()
per creare un payload necessario per segnalare le transazioni effettuate tramite offerte esterne.
- È stato aggiunto
Uscita della versione 6.1.0 della libreria Fatturazione Google Play (14/11/2023)
Ora è disponibile la versione 6.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
- Sono state aggiunte API per supportare la sola fatturazione alternativa (ovvero senza scelta dell'utente)
- È stato aggiunto
BillingClient.Builder.enableAlternativeBillingOnly()
per attivare funzionalmente la possibilità di offrire solo la fatturazione alternativa. - È stato aggiunto
BillingClient.isAlternativeBillingOnlyAvailableAsync()
per verificare la disponibilità di offrire solo la fatturazione alternativa. - È stato aggiunto
BillingClient.showAlternativeBillingOnlyInformationDialog()
per mostrare una finestra di dialogo informativa che informa gli utenti quando viene utilizzata solo la fatturazione alternativa. - È stato aggiunto
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
per creare un payload obbligatorio per segnalare le transazioni effettuate solo tramite fatturazione alternativa.
- È stato aggiunto
- Aggiornamento delle API di fatturazione scelta dall'utente
- È stato aggiunto
UserChoiceBillingListener
per sostituire AlternativeBillingListener, che è stato contrassegnato come deprecato. - È stato aggiunto
UserChoiceDetails
per sostituireAlternativeChoiceDetails
, che è stato contrassegnato come deprecato. - È stato aggiunto
BillingClient.Builder.enableUserChoiceBilling()
per sostituireBillingClient.Builder.enableAlternativeBilling()
, che è stato contrassegnato come deprecato.
- È stato aggiunto
- È stato aggiunto
BillingClient.getBillingConfigAsync()
per recuperare il paese di Google Play.
Rilascio della versione 6.0.1 della Libreria Fatturazione Google Play (22/06/2023)
Ora è disponibile la versione 6.0.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
Aggiorna Libreria Fatturazione Play in modo che sia compatibile con Android 14.
Rilascio della Libreria Fatturazione Google Play 6.0 (10/05/2023)
Ora è disponibile la versione 6.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
È stato aggiunto un nuovo enumerato
ReplacementMode
per sostituireProrationMode
.Tieni presente che
ProrationMode
è ancora disponibile per motivi di compatibilità con le versioni precedenti.È stato rimosso l'ID ordine per gli acquisti di
PENDING
.In precedenza, l'ID ordine veniva sempre creato anche se l'acquisto era in attesa. A partire dalla versione 6.0.0, non verrà creato un ID ordine per gli acquisti in attesa e per questi acquisti l'ID ordine verrà inserito dopo che l'acquisto è stato spostato nello stato
PURCHASED
.Sono stati rimossi i metodi
queryPurchases
elaunchPriceConfirmationFlow
.I metodi
queryPurchases
elaunchPriceConfirmationFlow
che sono stati precedentemente contrassegnati come deprecati sono stati rimossi nella Play Billing Library 6.0.0. Gli sviluppatori devono utilizzarequeryPurchasesAsync
invece diqueryPurchases
. Per le alternative alaunchPriceConfirmationFlow
, consulta Variazioni di prezzo.È stato aggiunto un nuovo codice di risposta di errore di rete.
È stato aggiunto un nuovo codice di risposta di errore di rete,
NETWORK_ERROR
, a partire dalla versione 6.0.0 della Libreria Fatturazione Play. Questo codice viene restituito quando si verifica un errore a causa di un problema di connessione di rete. Questi errori di connessione alla rete erano stati precedentemente segnalati comeSERVICE_UNAVAILABLE
.Aggiornato
SERVICE_UNAVAILABLE
eSERVICE_TIMEOUT
.A partire dalla versione 6.0.0 di PBL, gli errori dovuti a timeout nell'elaborazione verranno riportati come
SERVICE_UNAVAILABLE
anziché comeSERVICE_TIMEOUT
.Il comportamento non cambia nelle versioni precedenti di PBL.
SERVICE_TIMEOUT
rimosso.A partire dalla versione 6.0.0 di PBL,
SERVICE_TIMEOUT
non verrà più restituito. Le versioni precedenti di PBL continueranno a restituire questo codice.È stato aggiunto un ulteriore logging.
La release 6 della Libreria Fatturazione Play include un logging aggiuntivo, che fornisce informazioni sull'utilizzo dell'API (ad esempio successo e fallimento) e sui problemi di connessione al servizio. Queste informazioni verranno utilizzate per migliorare il rendimento della libreria di fatturazione di Google Play e fornire una migliore assistenza per gli errori.
Rilascio della versione 5.2.1 della Libreria Fatturazione Google Play (22/06/2023)
Ora è disponibile la versione 5.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
Aggiorna Libreria Fatturazione Play in modo che sia compatibile con Android 14.
Rilascio della versione 5.2 della libreria Fatturazione Google Play (6/04/2023)
Ora è disponibile la versione 5.2.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
- Sono state aggiunte classi per supportare i flussi di fatturazione alternativa su dispositivi mobili/tablet per gli utenti in Corea del Sud:
- È stato aggiunto il metodo
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
per specificare l'ID transazione esterno dell'abbonamento di origine. - È stato aggiunto il metodo
BillingClient.Builder.enableAlternativeBilling()
per consentire agli utenti in Corea del Sud di selezionare un'opzione di fatturazione alternativa.
Rilascio della Libreria Fatturazione Google Play 5.1 (31/10/2022)
Ora è disponibile la versione 5.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Questa versione contiene le seguenti modifiche.
Riepilogo delle modifiche
- È stato aggiunto il metodo
ProductDetails.SubscriptionOfferDetails.getOfferId()
per recuperare l'ID offerta. - È stato aggiunto il metodo
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
per recuperare l'ID piano base. targetSdkVersion
aggiornato a 31.
Uscita della versione 5.0 della Libreria Fatturazione Google Play (11/05/2022)
Ora è disponibile la versione 5.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Questa versione contiene le seguenti modifiche.
Riepilogo delle modifiche
- È stato introdotto un nuovo modello per gli abbonamenti, incluse nuove entità che consentono di creare più offerte per un singolo prodotto in abbonamento. Per ulteriori informazioni, consulta la guida alla migrazione.
- È stato aggiunto
BillingClient.queryProductDetailsAsync()
per sostituireBillingClient.querySkuDetailsAsync()
. - È stato aggiunto il metodo
setIsOfferPersonalized()
per i requisiti di divulgazione dei prezzi personalizzati dell'UE. Per scoprire di più su come utilizzare questo metodo, consulta Indicare un prezzo personalizzato. - È stato rimosso
queryPurchases()
, che in precedenza era stato deprecato e sostituito da queryPurchasesAsync introdotto nella versione 4.0.0 della Libreria Fatturazione Google Play. launchPriceChangeFlow
è deprecato e verrà rimosso in una futura release. Per scoprire di più sulle alternative, consulta Avvia un flusso di conferma della modifica del prezzo.- È stato rimosso
setVrPurchaseFlow()
, che in precedenza veniva utilizzato per l'inizializzazione di un flusso di acquisto. Nelle versioni precedenti, questo metodo reindirizzava l'utente a completare l'acquisto sul suo dispositivo Android. Una volta rimosso questo metodo, gli utenti completeranno l'acquisto tramite il flusso di acquisto standard.
Uscita della versione 4.1 della Libreria Fatturazione Google Play (23/02/2022)
Ora è disponibile la versione 4.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Questa versione contiene le seguenti modifiche.
Riepilogo delle modifiche
- È stato aggiunto
BillingClient.showInAppMessages()
per aiutarti a gestire i rifiuti di pagamento dell'abbonamento. Per scoprire di più su come utilizzare la messaggistica in-app per gestire i rifiuti di pagamento degli abbonamenti, consulta Gestire i rifiuti di pagamento.
Rilascio della versione 4.0 della libreria Fatturazione Google Play (18/05/2021)
Ora è disponibile la versione 4.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin.
Riepilogo delle modifiche
È stato aggiunto
BillingClient.queryPurchasesAsync()
per sostituireBillingClient.queryPurchases()
, che verrà rimosso in una release futura.È stata aggiunta la nuova modalità di sostituzione dell'abbonamento
IMMEDIATE_AND_CHARGE_FULL_PRICE
.È stato aggiunto il metodo
BillingClient.getConnectionState()
per recuperare lo stato di connessione della raccolta di fatturazione di Google Play.Javadoc e implementazione aggiornati per indicare su quale thread è possibile chiamare un metodo e quali risultati del thread vengono pubblicati.
È stato aggiunto
BillingFlowParams.Builder.setSubscriptionUpdateParams()
come nuovo modo per avviare gli aggiornamenti degli abbonamenti. SostituisceBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
,BillingFlowParams.Builder#setOldSku
che sono stati rimossi.Sono stati aggiunti
Purchase.getQuantity()
ePurchaseHistoryRecord.getQuantity()
.Sono stati aggiunti
Purchase#getSkus()
ePurchaseHistoryRecord#getSkus()
. Questi sostituisconoPurchase#getSku
ePurchaseHistoryRecord#getSku
, che sono stati rimossi.BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
eBillingFlowParams#getSkuType
sono stati rimossi.
Rilascio della Libreria Fatturazione Google Play 3.0.3 (12/03/2021)
Ora è disponibile la versione 3.0.3 della Libreria Fatturazione Google Play, dell'estensione Kotlin e del plug-in Unity.
Correzioni di bug di Java e Kotlin
- Correggere la perdita di memoria quando viene chiamato
endConnection()
. - Risolvere il problema quando la Libreria Fatturazione Google Play viene utilizzata dalle app che utilizzano la modalità di lancio di un'unica attività. Un callback
onPurchasesUpdated()
viene attivato quando un'app viene ripresa dal programma di avvio Android e la finestra di dialogo di fatturazione era visibile prima della sospensione.
Correzioni di bug di Unity
- Esegui l'aggiornamento alla versione Java 3.0.3 per correggere la perdita di memoria e risolvere il problema che impedisce gli acquisti quando un'app viene ripresa dal programma di avvio di Android e la finestra di dialogo di fatturazione era visibile prima della sospensione.
Uscita della versione 3.0.2 della libreria Fatturazione Google Play (24/11/2020)
La versione 3.0.2 della Libreria Fatturazione Google Play e l'estensione Kotlin sono ora disponibili.
Correzioni di bug
- È stato corretto un bug nell'estensione Kotlin per cui la coroutine non andava a buon fine con l'errore "Already resumed" (Riprendi già eseguita).
- Sono stati corretti i riferimenti non risolti quando l'estensione Kotlin viene utilizzata con la versione 1.4 o successive della libreria kotlinx.coroutines.
Rilascio della versione 3.0.1 della Libreria Fatturazione Google Play (30/09/2020)
La versione 3.0.1 della Libreria Fatturazione Google Play e l'estensione Kotlin sono ora disponibili.
Correzioni di bug
- È stato corretto un bug per cui, se l'app veniva interrotta e ripristinata durante il flusso di fatturazione,
PurchasesUpdatedListener
potrebbe non essere chiamato con il risultato dell'acquisto.
Rilascio della Libreria Fatturazione Google Play 3.0 (8 giugno 2020)
La versione 3.0.0 della Libreria Fatturazione Google Play, dell'estensione Kotlin e del plug-in Unity è ora disponibile.
Riepilogo delle modifiche
- È stato rimosso il supporto degli SKU con premio.
- Sono stati rimossi i parametri
ChildDirected
eUnderAgeOfConsent
. - Sono stati rimossi i metodi di payload per gli sviluppatori deprecati.
- Sono stati rimossi i metodi deprecati
BillingFlowParams.setAccountId()
eBillingFlowParams.setDeveloperId()
. - Sono stati rimossi i metodi deprecati
BillingFlowParams.setOldSkus(String oldSku)
eBillingFlowParams.addOldSku(String oldSku)
. - Sono state aggiunte annotazioni sulla nullabilità.
Correzioni di bug
SkuDetails.getIntroductoryPriceCycles()
ora restituisceint
anzichéString
.- È stato corretto un bug per cui il flusso di fatturazione veniva considerato come contenente parametri aggiuntivi anche se non erano stati impostati.
Rilascio della versione 2.2.1 della Libreria Fatturazione Google Play (20/05/2020)
La versione 2.2.1 della libreria Fatturazione Google Play è ora disponibile.
Correzioni di bug
- È stata aggiornata la versione predefinita della libreria Java Play Billing su cui si basa l'estensione Kotlin.
Rilascio della versione 2.2.0 della Libreria Fatturazione Play e supporto di Unity (23/03/2020)
La versione 2.2.0 di Fatturazione Google Play fornisce funzionalità che aiutano gli sviluppatori ad assicurarsi che gli acquisti vengano attribuiti all'utente corretto. Queste modifiche eliminano la necessità di creare soluzioni personalizzate in base al payload dello sviluppatore. Come parte di questo aggiornamento, la funzionalità del payload per gli sviluppatori è stata ritirata e verrà rimossa in una release futura. Per ulteriori informazioni, tra cui le alternative consigliate, consulta Payload per sviluppatori.
Libreria Fatturazione Google Play 2 per Unity
Oltre alle attuali versioni Java e Kotlin di Libreria Fatturazione Google Play 2, abbiamo rilasciato una versione della libreria da utilizzare con Unity. Gli sviluppatori di giochi che utilizzano l'API di acquisto in-app di Unity possono eseguire l'upgrade ora per usufruire di tutte le funzionalità di Libreria Fatturazione Google Play 2 e semplificare gli upgrade successivi alle versioni future della libreria.
Per scoprire di più, consulta Utilizzare Fatturazione Google Play con Unity.
Riepilogo delle modifiche
- Libreria Java per la fatturazione di Google Play
- In
AcknowledgePurchaseParams
, metodisetDeveloperPayload()
egetDeveloperPayload()
obsoleti. - In
ConsumeParams
, metodisetDeveloperPayload()
egetDeveloperPayload()
obsoleti. - In
BillingFlowParams
, è stato rinominatosetAccountId()
insetObfuscatedAccountId()
, e sono state documentate la limitazione di lunghezza di 64 caratteri e la limitazione che non consente informazioni che consentono l'identificazione personale (PII) in questo campo.setAccountId()
è stata contrassegnata come deprecata e verrà rimossa in una futura versione della libreria. - In
BillingFlowParams
, è stato aggiuntosetObfuscatedProfileId()
che funziona in modo simile asetObfuscatedAccountId()
. Per saperne di più, consulta Aggiornamenti e alternative per il payload per sviluppatori. - In
Purchase
, è stato aggiunto il metodogetAccountIdentifiers()
per restituire gli identificatori account offuscati impostati inBillingFlowParams
. - In
BillingClient
, il metodoloadRewardedSku()
è stato contrassegnato come deprecato nell'ambito del ritiro degli SKU con premio. Puoi trovare maggiori informazioni sul ritiro nel Centro assistenza Play Console.
- In
Rilascio della versione 2.1.0 di Libreria Fatturazione Google Play e della versione 2.1.0 di Kotlin Extension (10/12/2019)
La versione 2.1.0 della libreria Fatturazione Google Play e la nuova estensione Kotlin sono ora disponibili. L'estensione Kotlin della libreria di fatturazione di Play fornisce alternative alle API idiomatiche per l'utilizzo di Kotlin, con una maggiore sicurezza null e le coroutine. Per esempi di codice, consulta Utilizzare la Libreria Fatturazione Google Play.
Questa versione contiene le seguenti modifiche.
Riepilogo delle modifiche
- In
BillingFlowParams
, è stato ritiratosetOldSku(String oldSku)
e sostituito consetOldSku(String oldSku, String purchaseToken)
per distinguere i casi in cui più account sul dispositivo possiedono lo stesso sku.
Rilascio della versione 2.0.3 della libreria Fatturazione Google Play (05/08/2019)
La versione 2.0.3 della libreria Fatturazione Google Play è ora disponibile.
Correzioni di bug
- È stato corretto un bug per cui a volte
querySkuDetailsAsync()
non andava a buon fine con il codiceDEVELOPER_ERROR
anziché restituire un risultato positivo.
Release della libreria Fatturazione Google Play 2.0.2 (08/07/2019)
La versione 2.0.2 della Libreria Fatturazione Google Play è ora disponibile. Questa release contiene aggiornamenti alla documentazione di riferimento e non modifica la funzionalità della libreria.
Rilascio della versione 2.0.1 della Libreria Fatturazione Google Play (06/06/2019)
La versione 2.0.1 della Libreria Fatturazione Google Play è ora disponibile. Questa versione contiene le seguenti modifiche.
Correzioni di bug
- È stato corretto un bug per cui in alcuni casi i messaggi di debug venivano restituiti come
null
. - È stato risolto un potenziale problema di perdita di memoria.
Rilascio della Libreria Fatturazione Google Play 2.0 (7 maggio 2019)
È ora disponibile la versione 2.0 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.
Gli acquisti devono essere confermati entro tre giorni
Google Play supporta l'acquisto di prodotti all'interno della tua app (in-app) o al di fuori della tua app (out-of-app). Affinché Google Play possa garantire un'esperienza di acquisto coerente, indipendentemente da dove l'utente acquista il tuo prodotto, devi confermare tutti gli acquisti ricevuti tramite la Libreria Fatturazione Google Play il prima possibile dopo aver concesso il diritto all'utente. Se
non confermi un acquisto entro tre giorni, l'utente riceve automaticamente un rimborso e Google Play revoca l'acquisto. Per le
transazioni in attesa (novità della versione 2.0), il periodo di tre giorni
inizia quando l'acquisto passa allo stato PURCHASED
e non si applica
mentre l'acquisto è in stato PENDING
.
Per gli abbonamenti, devi confermare qualsiasi acquisto con un nuovo token di acquisto. Ciò significa che tutti gli acquisti iniziali, le modifiche al piano e le nuove registrazioni devono essere confermati, ma non è necessario confermare i rinnovi successivi. Per determinare se un acquisto richiede l'acknowledgment, puoi controllare il campo di acknowledgment nell'acquisto.
L'oggetto Purchase
ora include un metodo
isAcknowledged()
che indica se un acquisto è stato confermato. Inoltre, l'API Google Play Developer include valori booleani di conferma sia per Purchases.products
sia per Purchases.subscriptions
.
Prima di confermare un acquisto, assicurati di utilizzare questi metodi per determinare se l'acquisto è già stato confermato.
Puoi confermare un acquisto utilizzando uno dei seguenti metodi:
- Per i prodotti di consumo, utilizza
consumeAsync()
, disponibile nell'API client. - Per i prodotti che non vengono consumati, utilizza
acknowledgePurchase()
, disponibile nell'API client. - Nell'API Server è disponibile anche un nuovo metodo
acknowledge()
.
BillingFlowParams.setSku() è stato rimosso
Il metodo BillingFlowParams#setSku()
precedentemente deprecato è stato rimosso
in questa release. Prima di visualizzare i prodotti in un flusso di acquisto, ora devi chiamare
BillingClient.querySkuDetailsAsync()
,
passando l'oggetto
SkuDetails
risultante a
BillingFlowParams.Builder.setSkuDetails()
.
Per esempi di codice, consulta Utilizzare la Libreria Fatturazione Google Play.
Il payload dello sviluppatore è supportato
La versione 2.0 della libreria di fatturazione di Google Play aggiunge il supporto per il caricamento dello sviluppatore: stringhe arbitrarie che possono essere associate agli acquisti. Puoi collegare un parametro del payload dello sviluppatore a un acquisto, ma solo quando l'acquisto viene confermato o utilizzato. A differenza del payload sviluppatore in AIDL, dove il payload poteva essere specificato al momento del lancio del flusso di acquisto. Poiché ora gli acquisti possono essere avviati dall'esterno dell'app, questa modifica garantisce che tu abbia sempre la possibilità di aggiungere un payload agli acquisti.
Per accedere al payload nella nuova libreria, gli oggetti Purchase
ora includono un metodo
getDeveloperPayload()
.
Offerte coerenti
Quando offri uno SKU scontato, ora Google Play restituisce il prezzo originale dello SKU in modo da poter mostrare agli utenti che stanno ricevendo uno sconto.
SkuDetails
contiene due
metodi nuovi per recuperare il prezzo SKU originale:
getOriginalPriceAmountMicros()
: restituisce il prezzo originale non formattato dello SKU prima dello sconto.getOriginalPrice()
: restituisce il prezzo originale con una formattazione aggiuntiva della valuta.
Transazioni in sospeso
Con la versione 2.0 della libreria di fatturazione di Google Play, devi supportare gli acquisti per i quali è richiesta un'azione aggiuntiva prima di concedere il diritto. Ad esempio, un utente potrebbe scegliere di acquistare il tuo prodotto in-app in un negozio fisico utilizzando i contanti. Ciò significa che la transazione viene completata al di fuori della tua app. In questo scenario, devi concedere il diritto solo dopo che l'utente ha completato la transazione.
Per attivare gli acquisti in attesa, chiama
enablePendingPurchases()
nell'ambito dell'inizializzazione dell'app.
Utilizza Purchase.getPurchaseState()
per determinare se lo stato dell'acquisto è PURCHASED
o PENDING
. Tieni presente che
devi concedere il diritto solo quando lo stato è PURCHASED
. Per verificare gli aggiornamenti dello stato di Purchase
:
- Quando avvii l'app, chiama
BillingClient.queryPurchases()
per recuperare l'elenco dei prodotti non consumati associati all'utente. - Chiama
Purchase.getPurchaseState()
su ogni oggettoPurchase
restituito. - Implementa il metodo
onPurchasesUpdated()
per rispondere alle modifiche agli oggettiPurchase
.
Inoltre, l'API Google Play Developer include uno stato PENDING
per Purchases.products
.
Le transazioni in attesa non sono supportate per gli abbonamenti.
Questa release introduce anche un nuovo tipo di notifica in tempo reale per gli sviluppatori,OneTimeProductNotification
. Questo tipo di notifica contiene un singolo messaggio
il cui valore è ONE_TIME_PRODUCT_PURCHASED
o
ONE_TIME_PRODUCT_CANCELED
. Questo tipo di notifica viene inviato solo per gli acquisti associati a forme di pagamento con ritardo, come il pagamento in contanti.
Quando confermi gli acquisti in attesa, assicurati di farlo solo quando lo stato dell'acquisto è PURCHASED
e non PENDING
.
Modifiche all'API
La versione 2.0 della libreria Fatturazione Google Play contiene diverse modifiche all'API per supportare nuove funzionalità e chiarire quelle esistenti.
consumeAsync
consumeAsync()
ora accetta un
oggetto
ConsumeParams
instead of a purchaseToken
. ConsumeParams
contiene purchaseToken
nonché un payload facoltativo per gli sviluppatori.
La versione precedente di consumeAsync()
è stata rimossa in questa release.
queryPurchaseHistoryAsync
Per ridurre al minimo la confusione,
queryPurchaseHistoryAsync()
ora restituisce un
PurchaseHistoryRecord
oggetto anziché un oggetto Purchase
. L'oggetto PurchaseHistoryRecord
è uguale a un oggetto Purchase
, tranne per il fatto che riflette solo i valori restituiti da queryPurchaseHistoryAsync()
e non contiene i campi autoRenewing
, orderId
e packageName
. Tieni presente che non è cambiato nulla per i dati restituiti: queryPurchaseHistoryAsync()
restituisce gli stessi dati di prima.
Valori restituiti di BillingResult
Le API che in precedenza restituivano un valore intero BillingResponse
ora restituiscono un oggetto
BillingResult
. BillingResult
contiene il numero intero BillingResponse
e una
stringa di debug che puoi utilizzare per diagnosticare gli errori. La stringa di debug utilizza una lingua
en-US e non è destinata a essere mostrata agli utenti finali.
Correzioni di bug
SkuDetails.getIntroductoryPriceAmountMicros()
ora restituisce unlong
anziché unString
.
Release della libreria Fatturazione Google Play 1.2.2 (7 marzo 2019)
È ora disponibile la versione 1.2.2 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.
Correzioni di bug
- È stato risolto un problema di threading introdotto nella versione 1.2.1. Le chiamate in background non bloccano più il thread principale.
Altre modifiche
- Sebbene l'utilizzo del thread principale sia ancora consigliato, ora puoi creare un'istanza della Libreria Fatturazione Google Play da un thread in background.
- È stata eseguita la migrazione completa dell'inizializzazione al thread in background per ridurre la probabilità di causare ANR.
Rilascio della Libreria Fatturazione Play 1.2.1 (04/03/2019)
La versione 1.2.1 della libreria Fatturazione Google Play è ora disponibile. Questa versione contiene le seguenti modifiche.
Modifiche principali
- È stato aggiunto il supporto per i prodotti con premio. Per saperne di più sulle opzioni di monetizzazione, consulta Aggiungere funzionalità specifiche per i prodotti con premio.
Altre modifiche
- Sono stati aggiunti i costruttori pubblici per
PurchasesResult
eSkuDetailsResult
per semplificare il test. - Gli oggetti
SkuDetails
possono utilizzare un nuovo metodo,getOriginalJson()
. - Ora tutte le chiamate di servizio AIDL vengono gestite da thread in background.
Correzioni di bug
- Gli ascoltatori di callback null non vengono più passati alle API pubbliche.
Rilascio della versione 1.2 della libreria Fatturazione Google Play (18/10/2018)
È ora disponibile la versione 1.2 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.
Riepilogo delle modifiche
- La libreria di fatturazione di Google Play è ora concessa in licenza ai sensi del Contratto di licenza del Software Development Kit Android.
- È stata aggiunta l'API
launchPriceChangeConfirmationFlow
, che chiede agli utenti di esaminare una modifica in attesa al prezzo di un abbonamento. - È stato aggiunto il supporto di una nuova modalità di ripartizione,
DEFERRED
, per l'upgrade o il downgrade dell'abbonamento di un utente. - Nella classe
BillingFlowParams
,setSku()
è stato sostituito consetSkuDetails()
. - Correzioni di bug minori e ottimizzazioni del codice.
Conferma della variazione di prezzo
Ora puoi modificare il prezzo di un abbonamento in Google Play Console e chiedere agli utenti di esaminare e accettare il nuovo prezzo quando accedono alla tua app.
Per utilizzare questa API, crea un oggetto PriceChangeFlowParams
utilizzando il valore skuDetails
del prodotto in abbonamento e poi chiama launchPriceChangeConfirmationFlow()
. Implementa PriceChangeConfirmationListener
per gestire il risultato al termine del flusso di conferma della variazione di prezzo, come mostrato nello snippet di codice seguente:
Kotlin
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
Java
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
Il flusso di conferma della variazione di prezzo mostra una finestra di dialogo contenente le nuove informazioni sui prezzi e chiede agli utenti di accettare il nuovo prezzo. Questo flusso restituisce un
codice di risposta di tipo
BillingClient.BillingResponse
.
Nuova modalità di proporzionamento
Quando esegui l'upgrade o il downgrade dell'abbonamento di un utente, puoi utilizzare una nuova modalità di proporzionamento, DEFERRED
. Questa modalità aggiorna l'abbonamento dell'utente al successivo rinnovo. Per scoprire di più su come impostare questa modalità di ripartizione, consulta Impostare la modalità di ripartizione.
Nuovo metodo per impostare i dettagli dello SKU
Nella classe BillingFlowParams
, il metodo setSku()
è stato deprecato.
Questa modifica serve a ottimizzare il flusso di Fatturazione Google Play.
Quando crei una nuova istanza di BillingFlowParams
nel client di fatturazione in-app, ti consigliamo di utilizzare direttamente l'oggetto JSON utilizzando setSkuDetails()
, come mostrato nel seguente snippet di codice:
Nella classe BillingFlowParams
Builder, il metodo setSku()
è stato ritirato. Utilizza invece il metodo setSkuDetails()
, come mostrato nello snippet di codice seguente. L'oggetto passato all'oggetto setSkuDetails()
proviene dal metodo
querySkuDetailsAsync()
.
Kotlin
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
Java
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
Rilascio della Libreria Fatturazione Play 1.1 (07/05/2018)
La versione 1.1 della Libreria Fatturazione Google Play è ora disponibile. Questa versione contiene le seguenti modifiche.
Riepilogo delle modifiche
- È stato aggiunto il supporto per specificare una modalità di ripartizione in
BillingFlowParams
durante l'upgrade/il downgrade di un abbonamento esistente. - Il flag booleano
replaceSkusProration
inBillingFlowParams
non è più supportato. Utilizza invecereplaceSkusProrationMode
. launchBillingFlow()
ora attiva un callback per le risposte non riuscite.
Modifiche al comportamento
La versione 1.1 della Libreria Fatturazione Google Play contiene le seguenti modifiche al comportamento.
Gli sviluppatori possono impostare replaceSkusProrationMode
nella classe BillingFlowParams
Un ProrationMode
fornisce ulteriori dettagli sul tipo di ripartizione proporzionale durante l'upgrade o il downgrade dell'abbonamento di un utente.
Kotlin
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Java
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Al momento, Google Play supporta le seguenti modalità di ripartizione:
IMMEDIATE_WITH_TIME_PRORATION |
La sostituzione ha effetto immediato e il nuovo termine di scadenza verrà ripartito proporzionalmente e accreditato o addebitato all'utente. Questo è il comportamento predefinito attuale. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
La sostituzione diventa effettiva immediatamente e il ciclo di fatturazione rimane invariato. Ti verrà addebitato il prezzo per il periodo rimanente.
Nota: questa opzione è disponibile solo per l'upgrade dell'abbonamento. |
IMMEDIATE_WITHOUT_PRORATION |
La sostituzione diventa effettiva immediatamente e il nuovo prezzo verrà addebitato al successivo rinnovo. Il ciclo di fatturazione rimane invariato. |
replaceSkusProration
non è più supportato nel tipo di visualizzazione BillingFlowParams
In precedenza, gli sviluppatori potevano impostare un flag booleano per addebitare un importo proporzionale per una richiesta di upgrade dell'abbonamento. Poiché supportiamo ProrationMode
, che contiene istruzioni di proporzionamento più dettagliate, questo flag booleano non è più supportato.
launchBillingFlow()
ora attiva un callback per le risposte non andate a buon fine
La Libreria Fatturazione attiverà sempre il callback PurhcasesUpdatedListener
e restituirà un BillingResponse
in modo asincrono. Viene mantenuto anche il valore restituito sincrono di BillingResponse
.
Correzioni di bug
- Esce correttamente in anticipo nei metodi asincroni quando il servizio è disconnesso.
- Gli oggetti param di
Builder
non modificano più gli oggetti costruiti. - Problema 68087141:
launchBillingFlow()
ora attiva il callback per le risposte non riuscite.
Rilascio della versione 1.0 della libreria Fatturazione Google Play (19/09/2017, annuncio)
È ora disponibile la versione 1.0 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.
Modifiche importanti
- Autorizzazione di fatturazione incorporata all'interno del file manifest della raccolta. Non è più necessario aggiungere l'autorizzazione
com.android.vending.BILLING
all'interno del file manifest di Android. - Nuovo generatore aggiunto al corso
BillingClient.Builder
. - È stato introdotto il pattern di creazione per la classe
SkuDetailsParams
da utilizzare nei metodi per eseguire query sugli SKU. - Diversi metodi dell'API sono stati aggiornati per garantire la coerenza (stessa ordine e stessi nomi degli argomenti restituiti).
Modifiche al comportamento
La versione 1.0 della libreria Fatturazione Google Play contiene le seguenti modifiche al comportamento.
Classe BillingClient.Builder
BillingClient.Builder
viene ora inizializzato tramite il pattern newBuilder:
Kotlin
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Java
billingClient = BillingClient.newBuilder(context).setListener(this).build();
Il metodo launchBillingFlow ora viene chiamato utilizzando una classe BillingFlowParams
Per avviare il flusso di fatturazione per un acquisto o un abbonamento, il metodo
launchBillingFlow()
riceve un'istanza
BillingFlowParams
inizializzata con parametri specifici per la richiesta:
Kotlin
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
Java
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
Nuovo modo per eseguire query sui prodotti disponibili
Gli argomenti per i metodi queryPurchaseHistoryAsync()
e querySkuDetailsAsync()
sono stati inseriti in un pattern Builder:
Kotlin
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
Java
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
Per praticità e per garantire la coerenza della nostra API, il risultato viene ora restituito tramite il codice risultato e un elenco di oggetti SkuDetails
anziché tramite la classe wrapper precedente:
Kotlin
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Java
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Ordine dei parametri modificato nel metodo onConsumeResponse()
L'ordine degli argomenti per onConsumeResponse
dell'interfaccia ConsumeResponseListener
è stato modificato per garantire la coerenza all'interno della nostra API:
Kotlin
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Java
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Oggetto PurchaseResult non impacchettato
PurchaseResult
è stato simballato per garantire la coerenza all'interno della nostra API:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Correzioni di bug
- Nessun codice di risposta nel bundle PURCHASES_UPDATED
- Correzione dei problemi di ProxyBillingActivity e PurchasesUpdatedListener durante la rotazione del dispositivo
Release Anteprima per gli sviluppatori 1 (12/06/2017, annuncio)
È stata lanciata l'anteprima per sviluppatori, che mira a semplificare il processo di sviluppo in termini di fatturazione, consente agli sviluppatori di concentrarsi sull'implementazione della logica specifica dell'app per Android, come l'architettura dell'applicazione e la struttura di navigazione.
La libreria include diverse classi e funzionalità utili da utilizzare per integrare le tue app per Android con l'API Google Play Billing. La libreria fornisce anche un livello di astrazione sopra il servizio Android Interface Definition Language (AIDL), consentendo agli sviluppatori di definire più facilmente l'interfaccia tra l'app e l'API Google Play Billing.