Note di rilascio della Libreria Fatturazione Google Play

Questo documento contiene le note di rilascio per la libreria Fatturazione Google Play.

Rilascio della libreria Fatturazione Google Play 8.1.0 (06/11/2025)

Sono ora disponibili la versione 8.1.0 della libreria Google Play Billing Library e le estensioni Kotlin.

Riepilogo delle modifiche

  • Abbonamenti sospesi

    È stato aggiunto un nuovo parametro al metodo BillingClient.queryPurchasesAsync() per includere gli abbonamenti sospesi durante l'esecuzione di query sugli abbonamenti. Gli abbonamenti sospesi vengono comunque attribuiti all'utente, ma non sono attivi, perché l'utente ha messo in pausa l'abbonamento o il metodo di pagamento per il rinnovo è stato rifiutato.

    L'oggetto Purchase restituito nel listener restituirà isSuspended() = true per tutti gli abbonamenti sospesi. In questo caso, non devi concedere l'accesso all'abbonamento acquistato e devi invece indirizzare l'utente al centro abbonamenti dove può gestire i metodi di pagamento o lo stato di pausa per riattivare l'abbonamento.

  • Aggiornamenti agli abbonamenti:

    • L'oggetto BillingFlowParams.ProductDetailsParams ora ha il metodo setSubscriptionProductReplacementParams() in cui puoi specificare le informazioni di sostituzione a livello di prodotto.

    • L'oggetto SubscriptionProductReplacementParams ha due metodi setter:

      • setOldProductId: Il vecchio prodotto che deve essere sostituito dal prodotto nell'attuale ProductDetails.
      • setReplacementMode: Questa è la modalità di sostituzione a livello di articolo. Le modalità sono essenzialmente le stesse di SubscriptionUpdateParams, ma la mappatura dei valori è stata aggiornata. È stata introdotta una nuova modalità di sostituzione KEEP_EXISTING che ti consente di mantenere invariato il programma di pagamento esistente per un articolo.
    • SubscriptionUpdateParams setSubscriptionReplacementMode verrà ritirato. Dovresti usare invece SubscriptionProductReplacementParams.setReplacementMode.

  • Aggiornamento di minSdkVersion alla versione 23.

  • Sono state abilitate le API per la prenotazione per i prodotti a pagamento singolo

    L'API ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() che recupera i dettagli della prenotazione è ora disponibile per l'utilizzo.

  • La libreria Fatturazione Google Play ora supporta Kotlin versione 2.2.0.

Rilascio della libreria Fatturazione Google Play 8.0.0 (30/06/2025)

Sono ora disponibili la versione 8.0.0 della Libreria Fatturazione Google Play e le estensioni Kotlin.

Riepilogo delle modifiche

  • Gli articoli in-app ora verranno chiamati prodotti a pagamento singolo.

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

    Ora puoi avere più opzioni di acquisto e offerte per i tuoi prodotti a pagamento singolo. In questo modo hai flessibilità nella vendita dei tuoi prodotti e riduci la complessità della loro gestione.

  • È stato migliorato il metodo queryProductDetailsAsync().

    Prima di PBL 8.0.0, il metodo queryProductDetailsAsync() non restituiva i prodotti che non potevano essere recuperati. Ciò potrebbe essere dovuto a motivi quali il prodotto non è stato trovato o non sono disponibili offerte per l'utente. Con PBL 8.0.0, i prodotti non recuperati vengono restituiti con un nuovo codice di stato a livello di prodotto che fornisce informazioni sui prodotti non recuperati. Tieni presente che è stata modificata la firma di ProductDetailsResponseListener.onProductDetailsResponse(), il che richiede modifiche alla tua app. Per ulteriori informazioni, consulta Elaborare il risultato.

  • Riconnessione automatica del servizio.

    Il nuovo parametro BillingClient.Builder.enableAutoServiceReconnection() builder consente agli sviluppatori di attivare la riconnessione automatica del servizio, che semplifica la gestione delle connessioni gestendo automaticamente le riconnessioni al servizio di fatturazione Google Play ed eliminando la necessità di chiamare manualmente startConnection() in caso di disconnessione del servizio. Per saperne di più, vedi Ristabilire automaticamente una connessione.

  • Codici di risposta secondari per il metodo launchBillingFlow().

    Il valore BillingResult restituito da launchBillingFlow() ora include un campo del codice di risposta secondario. Questo campo verrà compilato solo in alcuni casi per fornire un motivo più specifico del mancato caricamento. Con PBL 8.0.0, viene restituito un codice secondario PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS nel caso in cui i fondi dell'utente siano inferiori al prezzo dell'articolo che sta tentando di acquistare.

  • È stato rimosso il metodo queryPurchaseHistory().

    Il metodo queryPurchaseHistory() precedentemente contrassegnato come obsoleto è stato rimosso. Consulta Query Purchase History per informazioni dettagliate sulle API alternative da utilizzare.

  • È stato rimosso il metodo querySkuDetailsAsync().

    Il metodo querySkuDetailsAsync() precedentemente contrassegnato come deprecato è stato rimosso. Devi utilizzare invece queryProductDetailsAsync.

  • È stato rimosso il metodo BillingClient.Builder.enablePendingPurchases().

    Il metodo enablePendingPurchases() senza parametri precedentemente contrassegnato come deprecato è stato rimosso. Dovresti usare enablePendingPurchases(PendingPurchaseParams params). Tieni presente che il valore enablePendingPurchases() deprecato è funzionalmente equivalente a enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).

  • È stato rimosso il metodo queryPurchasesAsync() sovraccarico che accetta un skuType.

    Il metodo queryPurchasesAsync(String skuType, PurchasesResponseListener listener) precedentemente contrassegnato come obsoleto è stato rimosso. In alternativa, utilizza queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener).

Rilascio della libreria Fatturazione Google Play 7.1.1 (3/10/2024)

Le versioni 7.1.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin sono ora disponibili.

Correzioni di bug

Rilascio della libreria Fatturazione Google Play 7.1.0 (19/09/2024)

Sono ora disponibili la versione 7.1.0 della Libreria Fatturazione Google Play e le estensioni Kotlin.

Riepilogo delle modifiche

  • Maggiore sicurezza dei thread relativa allo stato e alla gestione della connessione.
  • Sono state introdotte modifiche parziali per i codici di risposta [BillingResult][billing-result] per i test, che verranno rilasciati completamente nella Libreria Fatturazione Play 7.1.1. Per testare l'integrazione utilizzando questa funzionalità, devi eseguire l'upgrade alla Libreria Fatturazione Play 7.1.1. Esiste un bug che influisce solo sulle applicazioni con [test di override della fatturazione abilitato][enable-billing-overrides-testing] e non influisce sull'utilizzo normale. Per maggiori informazioni, consulta Testa i codici di risposta BillingResult. [billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing

Rilascio della libreria Fatturazione Google Play 7.0.0 (14/05/2024)

La versione 7.0.0 della Libreria Fatturazione Google Play e le estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 6.2.1 (16/04/2024)

Le versioni 6.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 6.2.0 (6/03/2024)

La versione 6.2.0 della Libreria Fatturazione Google Play e le estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 6.1.0 (14/11/2023)

Le versioni 6.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 6.0.1 (22/06/2023)

Le versioni 6.0.1 di Libreria Fatturazione Google Play e delle estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Aggiorna Libreria Fatturazione Play per renderla compatibile con Android 14.

Rilascio della libreria Fatturazione Google Play 6.0 (10/05/2023)

La versione 6.0.0 della Libreria Fatturazione Google Play e le estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

  • Aggiunta una nuova enumerazione ReplacementMode per sostituire ProrationMode.

    Tieni presente che ProrationMode è ancora disponibile per motivi di compatibilità con le versioni precedenti.

  • ID ordine rimosso 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à compilato dopo che l'acquisto sarà passato allo stato PURCHASED.

  • Sono stati rimossi i metodi queryPurchases e launchPriceConfirmationFlow.

    I metodi queryPurchases e launchPriceConfirmationFlow precedentemente contrassegnati come deprecati sono stati rimossi nella libreria Play Billing 6.0.0. Gli sviluppatori devono utilizzare queryPurchasesAsync anziché queryPurchases. Per le alternative a launchPriceConfirmationFlow, vedi Variazioni di prezzo.

  • È stato aggiunto un nuovo codice di risposta di errore di rete.

    A partire dalla versione 6.0.0 della Libreria Fatturazione Play è stato aggiunto un nuovo codice di risposta di errore di rete, NETWORK_ERROR. Questo codice viene restituito quando si verifica un errore a causa di un problema di connessione di rete. Questi errori di connessione di rete sono stati segnalati in precedenza come SERVICE_UNAVAILABLE.

  • Aggiornamento di SERVICE_UNAVAILABLE e SERVICE_TIMEOUT.

    A partire dalla versione 6.0.0 di PBL, gli errori dovuti al timeout durante l'elaborazione verranno restituiti come SERVICE_UNAVAILABLE anziché come SERVICE_TIMEOUT.

    Il comportamento non cambia nelle versioni precedenti di PBL.

  • Rimosso SERVICE_TIMEOUT.

    A partire dalla versione 6.0.0 di PBL, SERVICE_TIMEOUT non verrà più restituito. Le versioni precedenti della Libreria Fatturazione Play continueranno a restituire questo codice.

  • Aggiunto logging aggiuntivo.

    La release della libreria Google Play Billing 6 include la registrazione aggiuntiva, che fornisce informazioni sull'utilizzo dell'API (ad esempio esito positivo e negativo) e sui problemi di connessione al servizio. Queste informazioni verranno utilizzate per migliorare il rendimento della libreria Google Play Billing e fornire un supporto migliore per gli errori.

Rilascio della libreria Fatturazione Google Play 5.2.1 (22/06/2023)

Le versioni 5.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Aggiorna Libreria Fatturazione Play per renderla compatibile con Android 14.

Rilascio della libreria Fatturazione Google Play 5.2 (6/04/2023)

Le versioni 5.2.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin sono ora disponibili.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 5.1 (31/10/2022)

Sono ora disponibili la versione 5.1.0 della Libreria Fatturazione Google Play e le estensioni Kotlin.

Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 5.0 (11/05/2022)

La versione 5.0.0 della Libreria Fatturazione Google Play e le estensioni Kotlin sono ora disponibili.

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.
  • Aggiunta di BillingClient.queryProductDetailsAsync() per sostituire BillingClient.querySkuDetailsAsync().
  • Aggiunto il metodo setIsOfferPersonalized() per i requisiti di divulgazione relativi ai prezzi personalizzati nell'UE. Per scoprire di più su come utilizzare questo metodo, consulta Indicare un prezzo personalizzato.
  • È stato rimosso queryPurchases(), precedentemente deprecato e sostituito da queryPurchasesAsync introdotto nella Libreria Fatturazione Google Play 4.0.0.
  • launchPriceChangeFlow è stato deprecato e verrà rimosso in una futura release. Per scoprire di più sulle alternative, consulta Avviare un flusso di conferma della modifica del prezzo.
  • Rimosso setVrPurchaseFlow(), che veniva utilizzato in precedenza durante l'istanza di un flusso di acquisto. Nelle versioni precedenti, questo metodo reindirizzava l'utente per completare l'acquisto sul suo dispositivo Android. Una volta rimosso questo metodo, gli utenti completeranno l'acquisto tramite il flusso di acquisto standard.

Rilascio della libreria Fatturazione Google Play 4.1 (23/02/2022)

Sono ora disponibili la versione 4.1.0 della Libreria Fatturazione Google Play e le estensioni Kotlin.

Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 4.0 (18/05/2021)

Sono ora disponibili la versione 4.0.0 della Libreria Fatturazione Google Play e le estensioni Kotlin.

Riepilogo delle modifiche

Rilascio della libreria Fatturazione Google Play 3.0.3 (12/03/2021)

Sono ora disponibili la versione 3.0.3 della Libreria Fatturazione Google Play, l'estensione Kotlin e il plug-in Unity.

Correzioni di bug per Java e Kotlin

  • È stata corretta la perdita di memoria quando viene chiamato endConnection().
  • Risolvi il problema quando la Libreria Fatturazione Google Play viene utilizzata da app che utilizzano la modalità di avvio di una singola attività. Verrà attivato un onPurchasesUpdated() callback quando un'app viene ripristinata dal launcher Android e la finestra di dialogo di fatturazione era visibile prima della sospensione.

Correzioni di bug di Unity

  • Esegui l'aggiornamento alla versione 3.0.3 di Java per correggere la perdita di memoria e risolvere il problema che impedisce gli acquisti quando un'app viene ripresa dal launcher Android e la finestra di dialogo di fatturazione era visibile prima della sospensione.

Rilascio della libreria Fatturazione Google Play 3.0.2 (24/11/2020)

Sono ora disponibili la versione 3.0.2 della Libreria Fatturazione Google Play e l'estensione Kotlin.

Correzioni di bug

  • È stato corretto un bug nell'estensione Kotlin in cui la coroutine non va a buon fine con l'errore "Already resumed".
  • Sono stati corretti i riferimenti non risolti quando l'estensione Kotlin viene utilizzata con la libreria kotlinx.coroutines versione 1.4 o successive.

Rilascio della libreria Fatturazione Google Play 3.0.1 (30/09/2020)

Le versioni 3.0.1 della Libreria Fatturazione Google Play e dell'estensione Kotlin sono ora disponibili.

Correzioni di bug

  • È stato corretto un bug per cui, se l'app veniva chiusa 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 (08/06/2020)

Sono ora disponibili la versione 3.0.0 della Libreria Fatturazione Google Play, l'estensione Kotlin e il plug-in Unity.

Riepilogo delle modifiche

  • È stato rimosso il supporto degli SKU con premio.
  • Sono stati rimossi i parametri ChildDirected e UnderAgeOfConsent.
  • Sono stati rimossi i metodi di payload per sviluppatori deprecati.
  • Sono stati rimossi i metodi deprecati BillingFlowParams.setAccountId() e BillingFlowParams.setDeveloperId().
  • Sono stati rimossi i metodi deprecati BillingFlowParams.setOldSkus(String oldSku) e BillingFlowParams.addOldSku(String oldSku).
  • Sono state aggiunte annotazioni di nullabilità.

Correzioni di bug

  • SkuDetails.getIntroductoryPriceCycles() ora restituisce int anziché String.
  • È stato corretto un bug per cui il flusso di fatturazione veniva trattato come se avesse parametri aggiuntivi anche se non erano stati impostati.

Release della libreria Fatturazione Google Play 2.2.1 (20/05/2020)

La versione 2.2.1 della libreria Google Play Billing è ora disponibile.

Correzioni di bug

  • È stata aggiornata la versione predefinita della libreria Java Play Billing da cui dipende l'estensione Kotlin.

Rilascio della libreria Google Play Billing 2.2.0 e supporto di Unity (23/03/2020)

La versione 2.2.0 di Google Play Billing fornisce funzionalità che aiutano gli sviluppatori a garantire che gli acquisti siano attribuiti all'utente corretto. Queste modifiche sostituiscono la necessità di creare soluzioni personalizzate basate sul payload dello sviluppatore. Nell'ambito di questo aggiornamento, la funzionalità del payload dello sviluppatore è stata ritirata e verrà rimossa in una versione futura. Per ulteriori informazioni, incluse le alternative consigliate, consulta Payload sviluppatore.

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 per gli acquisti in-app di Unity possono eseguire l'upgrade ora per usufruire di tutte le funzionalità della Libreria Fatturazione Google Play 2 e per semplificare gli upgrade successivi alle versioni future della libreria.

Per saperne di più, consulta Utilizzare Fatturazione Google Play con Unity.

Riepilogo delle modifiche

Rilascio della Libreria Fatturazione Google Play 2.1.0 e dell'estensione Kotlin 2.1.0 (10/12/2019)

Sono ora disponibili la versione 2.1.0 della libreria Fatturazione Google Play e la nuova estensione Kotlin. L'estensione Kotlin della libreria Play Billing Library fornisce alternative idiomatiche alle API per l'utilizzo di Kotlin, con una migliore sicurezza null e coroutine. Per esempi di codice, vedi Utilizzare la Libreria Fatturazione Google Play.

Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

  • In BillingFlowParams, setOldSku(String oldSku) è stato ritirato e sostituito con setOldSku(String oldSku, String purchaseToken), per distinguere quando più account sul dispositivo possiedono lo stesso SKU.

Rilascio della libreria Fatturazione Google Play 2.0.3 (05/08/2019)

La versione 2.0.3 della libreria Fatturazione Google Play è ora disponibile.

Correzioni di bug

  • È stato corretto un bug per cui querySkuDetailsAsync() a volte non riusciva a restituire il codice DEVELOPER_ERROR anziché un risultato positivo.

Release della libreria Fatturazione Google Play 2.0.2 (08/07/2019)

La versione 2.0.2 della libreria Google Play Billing è ora disponibile. Questa release contiene aggiornamenti alla documentazione di riferimento e non modifica la funzionalità della libreria.

Rilascio della libreria Fatturazione Google Play 2.0.1 (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/05/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 dall'interno dell'app (in-app) o dall'esterno dell'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 è passato allo stato PURCHASED e non si applica mentre l'acquisto è nello stato PENDING.

Per gli abbonamenti, devi confermare qualsiasi acquisto che abbia 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 una conferma, puoi controllare il campo di conferma nell'acquisto.

L'oggetto Purchase ora include un metodo isAcknowledged() che indica se un acquisto è stato riconosciuto. Inoltre, l'API Google Play Developer include valori booleani di conferma sia per Purchases.products che 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(), che si trova nell'API client.
  • Per i prodotti non 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 ritirato è stato rimosso in questa release. Prima di eseguire il rendering dei prodotti in un flusso di acquisto, ora devi chiamare BillingClient.querySkuDetailsAsync(), passando l'oggetto SkuDetails risultante a BillingFlowParams.Builder.setSkuDetails().

Per esempi di codice, vedi Utilizzare la Libreria Fatturazione Google Play.

Il payload dello sviluppatore è supportato

La versione 2.0 della libreria Google Play Billing aggiunge il supporto per il payload dello sviluppatore, ovvero stringhe arbitrarie che possono essere associate agli acquisti. Puoi allegare un parametro del payload dello sviluppatore a un acquisto, ma solo quando l'acquisto viene riconosciuto o utilizzato. A differenza del payload sviluppatore in AIDL, dove il payload può essere specificato all'avvio del flusso di acquisto. Poiché gli acquisti ora possono essere avviati al di fuori della tua app, questa modifica ti garantisce sempre l'opportunità 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, Google Play ora restituisce il prezzo originale dello SKU in modo che tu possa mostrare agli utenti che stanno ricevendo uno sconto.

SkuDetails contiene due nuovi metodi per recuperare il prezzo SKU originale:

Transazioni in sospeso

Con la versione 2.0 della libreria Google Play Billing, devi supportare gli acquisti in cui è 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 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() durante l'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 controllare gli aggiornamenti dello stato di Purchase, segui questi passaggi:

  1. Quando avvii l'app, chiama BillingClient.queryPurchases() per recuperare l'elenco dei prodotti non consumati associati all'utente.
  2. Chiama Purchase.getPurchaseState() su ogni oggetto Purchase restituito.
  3. Implementa il metodo onPurchasesUpdated() per rispondere alle modifiche agli oggetti Purchase.

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 lo sviluppatore, 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 differite, ad esempio i contanti.

Quando confermi gli acquisti in attesa, assicurati di farlo solo quando lo stato dell'acquisto è PURCHASED e non PENDING.

Modifiche alle API

La versione 2.0 della libreria Google Play Billing contiene diverse modifiche all'API per supportare nuove funzionalità e chiarire quelle esistenti.

consumeAsync

consumeAsync() ora accetta un oggetto ConsumeParams anziché un purchaseToken. ConsumeParams contiene purchaseToken e 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 oggetto PurchaseHistoryRecord 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 i dati restituiti non sono cambiati: 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 l'intero BillingResponse e una stringa di debug che puoi utilizzare per diagnosticare gli errori. La stringa di debug utilizza le impostazioni locali en-US e non è destinata agli utenti finali.

Correzioni di bug

Release della libreria Fatturazione Google Play 1.2.2 (07/03/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 Google Play Billing da un thread in background.
  • L'istanza è stata completamente migrata al thread in background per ridurre la possibilità 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

Altre modifiche

  • Sono stati aggiunti costruttori pubblici per PurchasesResult e SkuDetailsResult per semplificare i test.
  • Gli oggetti SkuDetails possono utilizzare un nuovo metodo, getOriginalJson().
  • Tutte le chiamate di servizio AIDL vengono ora gestite dai thread in background.

Correzioni di bug

  • I listener di callback null non vengono più passati alle API pubbliche.

Rilascio della libreria Fatturazione Google Play 1.2 (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 Google Play Billing è 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 per una nuova modalità di ripartizione proporzionale, DEFERRED, in caso di upgrade o downgrade dell'abbonamento di un utente.
  • Nella classe BillingFlowParams, setSku() è stato sostituito con setSkuDetails().
  • 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 skuDetails del prodotto in abbonamento, quindi chiama launchPriceChangeConfirmationFlow(). Implementa PriceChangeConfirmationListener per gestire il risultato al termine del flusso di conferma della modifica del 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, chiedendo agli utenti di accettare il nuovo prezzo. Questo flusso restituisce un codice di risposta di tipo BillingClient.BillingResponse.

Nuova modalità di ripartizione proporzionale

Quando esegui l'upgrade o il downgrade dell'abbonamento di un utente, puoi utilizzare una nuova modalità di ripartizione proporzionale, DEFERRED. Questa modalità aggiorna l'abbonamento dell'utente al successivo rinnovo. Per scoprire di più su come impostare questa modalità di ripartizione proporzionale, consulta Impostare la modalità di ripartizione proporzionale.

Nuovo metodo per impostare i dettagli SKU

Nella classe BillingFlowParams, il metodo setSku() è stato ritirato. 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 nell'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();
}

Release 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

  • Aggiunto il supporto per specificare una modalità di ripartizione proporzionale in BillingFlowParams quando si esegue l'upgrade/il downgrade di un abbonamento esistente.
  • Il flag booleano replaceSkusProration in BillingFlowParams non è più supportato. Utilizza invece replaceSkusProrationMode.
  • launchBillingFlow() ora attiva un callback per le risposte non riuscite.

Modifiche al funzionamento

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 in caso di upgrade o 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();

Google Play supporta le seguenti modalità di ripartizione proporzionale:

IMMEDIATE_WITH_TIME_PRORATION La sostituzione ha effetto immediato e il nuovo periodo di scadenza verrà ripartito proporzionalmente e accreditato o addebitato all'utente. Questo è il comportamento predefinito attuale.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE La sostituzione ha effetto immediato e il ciclo di fatturazione rimane invariato. Verrà addebitato il prezzo per il periodo rimanente.

Nota: questa opzione è disponibile solo per l'upgrade dell'abbonamento.

IMMEDIATE_WITHOUT_PRORATION La sostituzione ha effetto immediato e il nuovo prezzo verrà addebitato al successivo rinnovo. Il ciclo di fatturazione rimane invariato.

replaceSkusProration non è più supportato nella classe BillingFlowParams

In passato, 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 ripartizione più dettagliate, questo flag booleano non è più supportato.

launchBillingFlow() ora attiva un callback per le risposte non riuscite

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

  • Esci correttamente in anticipo nei metodi asincroni quando il servizio è disconnesso.
  • Builder Gli oggetti dei parametri non modificano più gli oggetti integrati.
  • Problema 68087141: launchBillingFlow() ora attiva il callback per le risposte non riuscite.

Rilascio della libreria Fatturazione Google Play 1.0 (19/09/2017, annuncio)

È ora disponibile la versione 1.0 della libreria Google Play Billing. Questa versione contiene le seguenti modifiche.

Modifiche importanti

  • Autorizzazione di fatturazione incorporata nel manifest della libreria. Non è più necessario aggiungere l'autorizzazione com.android.vending.BILLING all'interno del manifest Android.
  • Nuovo builder aggiunto alla classe BillingClient.Builder.
  • È stato introdotto il pattern builder per la classe SkuDetailsParams da utilizzare nei metodi per eseguire query sugli SKU.
  • Diversi metodi API sono stati aggiornati per coerenza (stessi nomi e ordine degli argomenti restituiti).

Modifiche al funzionamento

La versione 1.0 della libreria Fatturazione Google Play contiene le seguenti modifiche al comportamento.

Classe BillingClient.Builder

BillingClient.Builder ora viene inizializzato tramite il nuovo pattern newBuilder:

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

Il metodo launchBillingFlow viene ora 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 inclusi 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() {...})

Il risultato viene ora restituito tramite il codice risultato e un elenco di oggetti SkuDetails anziché la precedente classe wrapper per comodità e per garantire la coerenza tra le nostre API:

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 dall'interfaccia ConsumeResponseListener è stato modificato per garantire la coerenza tra le nostre API:

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

Oggetto PurchaseResult non sottoposto a wrapping

PurchaseResult è stato estratto per garantire la coerenza della nostra API:

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

Correzioni di bug

Rilascio dell'anteprima per gli sviluppatori 1 (12/06/2017, annuncio)

È stata lanciata l'anteprima per sviluppatori, con l'obiettivo di semplificare il processo di sviluppo per quanto riguarda la fatturazione, consentendo agli sviluppatori di concentrare i propri sforzi sull'implementazione di una logica specifica per l'app per Android, come l'architettura dell'applicazione e la struttura di navigazione.

La libreria include diverse classi e funzionalità utili da utilizzare quando integri le tue app per Android con l'API Fatturazione Google Play. La libreria fornisce anche un livello di astrazione sopra il servizio Android Interface Definition Language (AIDL), semplificando la definizione dell'interfaccia tra l'app e l'API Google Play Billing per gli sviluppatori.