Note di rilascio della Libreria Fatturazione Google Play

Questo documento contiene le note di rilascio della Libreria Fatturazione Google Play.

Release della Libreria Fatturazione Google Play 9.1.0 (18/06/2026)

La versione 9.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 9.0.0 (19/05/2026)

La versione 9.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile. Se vuoi eseguire la migrazione dalle versioni precedenti di PBL, consulta la guida alla migrazione di PBL 9.

Riepilogo delle modifiche

  • Codici di errore aggiornati per l'attività bloccata del Play Store: i codici di errore per le app del Play Store bloccate sono stati aggiornati. Nei casi in cui l'app Play Store è bloccata dal sistema (ad esempio, nella modalità per bambini personalizzata dall'OEM), il codice di risposta è cambiato da ERROR a BILLING_UNAVAILABLE. Inoltre, BillingResult per questi casi ora fornisce un messaggio di debug Play Store è bloccato.

  • Aggiornamento del supporto di valori null per la fatturazione fornita dallo sviluppatore: il metodo DeveloperProvidedBillingDetails.getLinkUri() è stato aggiornato in modo da essere @Nullable. Questa modifica supporta gli scenari in cui l'URI del link diretto per i pagamenti esterni non è disponibile durante la fase di selezione del pagamento.

    Per gestire questa modifica in sicurezza, assicurati che il codice di integrazione gestisca sia i valori null sia i valori di stringa vuota ("") dal metodo DeveloperProvidedBillingDetails.getLinkUri() prima di analizzare o lanciare gli intent del browser.

  • Aggiornamento di targetSdkVersion a 35.

  • Ora puoi utilizzare i messaggi in-app per informare gli utenti di un imminente aumento esplicito di prezzo. In questo modo, gli utenti possono confermare l'aumento di prezzo senza uscire dall'app. Il messaggio relativo a un aumento esplicito di prezzo in sospeso viene mostrato a partire dal primo giorno in cui l'utente può accettare l'aumento di prezzo e viene mostrato al massimo una volta ogni 7 giorni.

Release della Libreria Fatturazione Google Play 8.3.0 (23/12/2025)

La versione 8.3.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 8.2.1 (15/12/2025)

La versione 8.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Correzioni di bug

Release della Libreria Fatturazione Google Play 8.2.0 (9/12/2025)

La versione 8.2.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 8.1.0 (6/11/2025)

La versione 8.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

  • Abbonamenti sospesi

    È stato aggiunto un nuovo parametro al metodo BillingClient.queryPurchasesAsync() per includere gli abbonamenti sospesi quando si eseguono query sugli abbonamenti. Gli abbonamenti sospesi sono ancora 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, ma devi indirizzare l'utente al Centro abbonamenti dove può gestire i propri 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 sulla 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 elemento. 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 calendario pagamenti esistente per un articolo.
    • SubscriptionUpdateParams setSubscriptionReplacementMode verrà ritirato. Utilizza invece SubscriptionProductReplacementParams.setReplacementMode.

  • Aggiornamento di minSdkVersion alla versione 23.

  • API di pre-ordine per i prodotti a pagamento singolo attivate

    L'API ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() che recupera i dettagli del pre-ordine è ora disponibile per l'utilizzo.

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

Release della Libreria Fatturazione Google Play 8.0.0 (30/06/2025)

La versione 8.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

  • Gli articoli in-app verranno ora denominati 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, puoi vendere i tuoi prodotti in modo più flessibile e riduci la complessità della loro gestione.

  • Miglioramento del metodo queryProductDetailsAsync().

    Prima della versione 8.0.0 di PBL, 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 apportata una modifica alla firma di ProductDetailsResponseListener.onProductDetailsResponse(), che richiede modifiche alla tua app. Per ulteriori informazioni, consulta Elabora il risultato.

  • Riconnessione automatica al servizio.

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

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

    Il BillingResult restituito da launchBillingFlow() ora includerà un campo del codice di risposta secondaria. Questo campo verrà compilato solo in alcuni casi per fornire un motivo più specifico dell'errore. Il campo della risposta secondaria può avere i seguenti valori:

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS: restituito quando i fondi dell'utente sono inferiori al prezzo dell'articolo che sta tentando di acquistare.
    • USER_INELIGIBLE: viene restituito quando l'utente non soddisfa i requisiti di idoneità configurati per un'offerta di abbonamento.
    • NO_APPLICABLE_SUB_RESPONSE_CODE: il valore predefinito, restituito quando non è applicabile nessun altro codice di risposta secondario.
  • Rimosso il metodo queryPurchaseHistory().

    Il metodo queryPurchaseHistory() precedentemente contrassegnato come deprecato è stato rimosso. Per informazioni dettagliate sulle API alternative da utilizzare, consulta Cronologia acquisti.

  • Rimosso il metodo querySkuDetailsAsync().

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

  • Rimosso il metodo BillingClient.Builder.enablePendingPurchases().

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

  • Rimosso il metodo queryPurchasesAsync() sovraccarico che accetta un skuType.

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

Release della Libreria Fatturazione Google Play 7.1.1 (3/10/2024)

La versione 7.1.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Correzioni di bug

Release della Libreria Fatturazione Google Play 7.1.0 (19/09/2024)

La versione 7.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

  • Miglioramento della thread safety relativa allo stato e alla gestione della connessione.
  • Sono state introdotte modifiche parziali per testare i codici di risposta BillingResult, che sono stati 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 influirà solo sulle applicazioni con i test degli override di fatturazione attivati e non influisce sull'utilizzo regolare. Per saperne di più, consulta Testa i codici di risposta di BillingResult.

Release della Libreria Fatturazione Google Play 7.0.0 (14/05/2024)

La versione 7.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 6.2.1 (16/04/2024)

La versione 6.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 6.2.0 (6/03/2024)

La versione 6.2.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 6.1.0 (14/11/2023)

La versione 6.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

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

La versione 6.0.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Aggiorna Libreria Fatturazione Play per renderla compatibile con Android 14.

Release della Libreria Fatturazione Google Play 6.0 (10/05/2023)

La versione 6.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

  • Aggiunto un nuovo enum ReplacementMode per sostituire ProrationMode.

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

  • ID ordine rimosso per gli acquisti 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 viene spostato nello stato PURCHASED.

  • Metodi queryPurchases e launchPriceConfirmationFlow rimossi.

    I metodi queryPurchases e launchPriceConfirmationFlow precedentemente contrassegnati come deprecati sono stati rimossi nella Libreria Fatturazione Play 6.0.0. Gli sviluppatori devono utilizzare queryPurchasesAsync anziché queryPurchases. Per le alternative a launchPriceConfirmationFlow, consulta 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 dovuto a 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 a timeout nell'elaborazione verranno restituiti come SERVICE_UNAVAILABLE anziché come l'attuale SERVICE_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 della Libreria Fatturazione Play continueranno a restituire questo codice.

  • Aggiunto logging aggiuntivo.

    La release della Libreria Fatturazione Play 6 include un logging aggiuntivo, che fornisce insight 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 Fatturazione Play e fornire un supporto migliore per gli errori.

Release della Libreria Fatturazione Google Play 5.2.1 (22/06/2023)

La versione 5.2.1 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Aggiorna Libreria Fatturazione Play per renderla compatibile con Android 14.

Release della Libreria Fatturazione Google Play 5.2 (6/04/2023)

La versione 5.2.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 5.1 (31/10/2022)

La versione 5.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 5.0 (11/05/2022)

La versione 5.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

  • È stato introdotto un nuovo modello per gli abbonamenti, che include nuove entità che ti 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 relativi alle informative sui prezzi personalizzati dell'UE. Per scoprire di più su come utilizzare questo metodo, consulta Indica un prezzo personalizzato.
  • È stato rimosso queryPurchases(), che era stato precedentemente ritirato e sostituito da queryPurchasesAsync introdotto nella Libreria Fatturazione Google Play 4.0.0.
  • launchPriceChangeFlow è stato deprecato e verrà rimosso in una release futura. Per scoprire di più sulle alternative, consulta Lanciare un flusso di conferma della variazione di prezzo.
  • È stato rimosso setVrPurchaseFlow(), che in precedenza veniva utilizzato durante la creazione di un'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.

Release della Libreria Fatturazione Google Play 4.1 (23/02/2022)

La versione 4.1.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 4.0 (18/05/2021)

La versione 4.0.0 della Libreria Fatturazione Google Play e delle estensioni Kotlin è ora disponibile.

Riepilogo delle modifiche

Release della Libreria Fatturazione Google Play 3.0.3 (12/03/2021)

La versione 3.0.3 della Libreria Fatturazione Google Play, dell'estensione Kotlin e del plug-in Unity è ora disponibile.

Correzioni di bug di Java e Kotlin

  • È stata corretta la perdita di memoria quando viene chiamato endConnection().
  • Risolto il problema relativo all'utilizzo della Libreria Fatturazione Google Play da parte di app che utilizzano la modalità di lancio di singole attività. Verrà attivato un callback onPurchasesUpdated() quando un'app viene ripresa da Avvio app 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 da Avvio app Android e la finestra di dialogo di fatturazione era visibile prima della sospensione.

Release della Libreria Fatturazione Google Play 3.0.2 (24/11/2020)

La versione 3.0.2 della Libreria Fatturazione Google Play e dell'estensione Kotlin è ora disponibile.

Correzioni di bug

  • Risolto un bug nell'estensione Kotlin per cui la coroutine non va a buon fine con l'errore "Already resumed".
  • Risolti i riferimenti non risolti quando l'estensione Kotlin viene utilizzata con la libreria kotlinx.coroutines versione 1.4 e successive.

Release della Libreria Fatturazione Google Play 3.0.1 (30/09/2020)

La versione 3.0.1 della Libreria Fatturazione Google Play e dell'estensione Kotlin è ora disponibile.

Correzioni di bug

  • Risolto un bug per cui, se l'app veniva terminata e ripristinata durante il flusso di fatturazione, PurchasesUpdatedListener potrebbe non essere stato chiamato con il risultato dell'acquisto.

Release della Libreria Fatturazione Google Play 3.0 (08/06/2020)

La versione 3.0.0 della Libreria Fatturazione Google Play, dell'estensione Kotlin e del plug-in Unity è ora disponibile.

Riepilogo delle modifiche

  • Rimosso il supporto degli SKU con premio.
  • Sono stati rimossi i parametri ChildDirected e UnderAgeOfConsent.
  • Rimozione dei metodi di payload dello sviluppatore deprecati.
  • Rimossi i metodi deprecati BillingFlowParams.setAccountId() e BillingFlowParams.setDeveloperId().
  • Rimossi i metodi deprecati BillingFlowParams.setOldSkus(String oldSku) e BillingFlowParams.addOldSku(String oldSku).
  • Aggiunto il supporto di valori null per le annotazioni.

Correzioni di bug

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

Release della Libreria Fatturazione Google Play 2.2.1 (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 Fatturazione Google Play Java da cui dipende l'estensione Kotlin.

Release della Libreria Fatturazione Google Play 2.2.0 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 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 release futura. Per maggiori informazioni, incluse le alternative consigliate, consulta Payload sviluppatore.

Libreria Fatturazione Google Play 2 per Unity

Oltre alle attuali versioni Java e Kotlin della 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 i successivi upgrade alle versioni future della Libreria Fatturazione Google Play.

Per scoprire di più, consulta Utilizza la Fatturazione Google Play con Unity.

Riepilogo delle modifiche

Release 2.1.0 della Libreria Fatturazione Google Play e release 2.1.0 dell'estensione Kotlin (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 Fatturazione Play fornisce alternative API idiomatiche per l'utilizzo di Kotlin, con una migliore sicurezza null e coroutine. Per esempi di codice, consulta Utilizza 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 evitare ambiguità quando più account sul dispositivo possiedono lo stesso SKU.

Release della Libreria Fatturazione Google Play 2.0.3 (5 agosto 2019)

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

Correzioni di bug

  • Risolto un bug per cui querySkuDetailsAsync() a volte non riusciva con il codice DEVELOPER_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.

Release 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.

Release della Libreria Fatturazione Google Play 2.0 (7/05/2019)

La versione 2.0 della Libreria Fatturazione Google Play è ora disponibile. Questa versione contiene le seguenti modifiche.

Gli acquisti devono essere confermati entro tre giorni

Google Play supporta l'acquisto di prodotti all'interno dell'app (in-app) o all'esterno dell'app (out-of-app). Per consentire a Google Play di 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), la finestra 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 ogni acquisto che ha un nuovo token di acquisto. Ciò significa che tutti gli acquisti iniziali, le modifiche ai piani e le nuove registrazioni devono essere confermati, ma non è necessario confermare i rinnovi successivi. Per determinare se un acquisto deve essere confermato, puoi controllare il campo acknowledgement 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 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, consulta Utilizza la Libreria Fatturazione Google Play.

Il payload sviluppatore è supportato

La versione 2.0 della Libreria Fatturazione Google Play aggiunge il supporto per il payload dello sviluppatore, ovvero stringhe arbitrarie che possono essere allegate agli acquisti. Puoi collegare un parametro payload sviluppatore a un acquisto, ma solo quando l'acquisto viene confermato o consumato. A differenza del payload dello sviluppatore in AIDL, dove il payload poteva essere specificato all'avvio del flusso di acquisto, Poiché ora gli acquisti possono essere avviati all'esterno della tua app, questa modifica ti garantisce di avere 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, 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 dello SKU originale:

Transazioni in sospeso

Con la versione 2.0 della Libreria Fatturazione 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() 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. Dovresti controllare gli aggiornamenti dello stato di Purchase nel seguente modo:

  1. All'avvio dell'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 ritardate, ad esempio in 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 Fatturazione Google Play contiene diverse modifiche alle 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 dello sviluppatore.

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, ad eccezione del 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 un'impostazione internazionale en-US e non è destinata a essere mostrata agli utenti finali.

Correzioni di bug

Release della Libreria Fatturazione Google Play 1.2.2 (7 marzo 2019)

La versione 1.2.2 della Libreria Fatturazione Google Play è ora disponibile. Questa versione contiene le seguenti modifiche.

Correzioni di bug

  • Risolto un problema di threading introdotto nella versione 1.2.1. Le chiamate in background non bloccano più il thread principale.

Altre modifiche

  • Sebbene sia ancora consigliato l'utilizzo del thread principale, ora puoi creare un'istanza della Libreria Fatturazione Google Play da un thread in background.
  • L'istanza è stata completamente migrata al thread in background per ridurre la probabilità di causare ANR.

Release della Libreria Fatturazione Play 1.2.1 (4 marzo 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 ai servizi AIDL sono ora gestite da thread in background.

Correzioni di bug

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

Release della Libreria Fatturazione Google Play 1.2 (18/10/2018)

La versione 1.2 della Libreria Fatturazione Google Play è ora disponibile. Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

  • La Libreria Fatturazione Google Play è ora concessa in licenza ai sensi del Contratto di licenza del Software development kit Android.
  • È stata aggiunta l'API launchPriceChangeConfirmationFlow, che invita gli utenti a rivedere una modifica in attesa al prezzo di un abbonamento.
  • È stato aggiunto il supporto di una nuova modalità di proratizzazione, DEFERRED, per l'upgrade o il 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 rivedere e accettare il nuovo prezzo quando accedono alla tua app.

Per utilizzare questa API, crea un oggetto PriceChangeFlowParams utilizzando il skuDetails del prodotto in abbonamento, quindi 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 informazioni sul nuovo prezzo e chiede agli utenti di accettarlo. 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 prorata, DEFERRED. Questa modalità aggiorna l'abbonamento dell'utente al successivo rinnovo. Per scoprire di più su come impostare questa modalità di ripartizione proporzionale, consulta Imposta la modalità di ripartizione proporzionale.

Nuovo metodo per impostare i dettagli degli 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 tuo client di Fatturazione in-app, ti consigliamo di utilizzare direttamente l'oggetto JSON con setSkuDetails(), come mostrato nello snippet di codice seguente:

Nella classe BillingFlowParams Builder, il metodo setSku() è stato ritirato. Utilizza invece il metodo setSkuDetails(), come mostrato nel seguente snippet di codice. 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();
}

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

  • È stato aggiunto il supporto per specificare una modalità di prorata in BillingFlowParams quando esegui l'upgrade o il downgrade di un abbonamento esistente.
  • Il flag booleano replaceSkusProration in BillingFlowParams non è più supportato. Usa invece il descrittore replaceSkusProrationMode.
  • 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 quando viene eseguito 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();

Google Play supporta le seguenti modalità di ripartizione proporzionale:

IMMEDIATE_WITH_TIME_PRORATION La sostituzione ha effetto immediato e la nuova data di scadenza verrà ripartita proporzionalmente e accreditata o addebitata 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 momento della ricorrenza successiva. Il ciclo di fatturazione rimane invariato.

replaceSkusProration non è più supportato nella classe BillingFlowParams

In precedenza, gli sviluppatori potevano impostare un flag booleano per addebitare un importo proporzionale per una richiesta di upgrade dell'abbonamento. Dato che supportiamo ProrationMode, che contiene istruzioni di ripartizione proporzionale 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

  • Esce correttamente in anticipo dai metodi asincroni quando il servizio è disconnesso.
  • Gli oggetti param Builder non modificano più gli oggetti creati.
  • Problema 68087141: launchBillingFlow() ora attiva il callback per le risposte non riuscite.

Release della Libreria Fatturazione Google Play 1.0 (19/09/2017, annuncio)

La versione 1.0 della Libreria Fatturazione Google Play è ora disponibile. 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 file manifest di Android.
  • Nuovo builder aggiunto alla classe BillingClient.Builder.
  • È stato introdotto il pattern builder per la classe SkuDetailsParams da utilizzare sui metodi per eseguire query sugli SKU.
  • Diversi metodi API sono stati aggiornati per garantire la coerenza (stessi nomi e ordine 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 ora viene 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() {...})

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

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

L'ordine dei parametri è cambiato nel metodo onConsumeResponse()

L'ordine degli argomenti per onConsumeResponse dall'interfaccia ConsumeResponseListener è stato modificato per essere coerente in tutta la nostra 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 rimosso per garantire la coerenza nella nostra API:

Kotlin

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

Java

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

Correzioni di bug

Release Anteprima per gli sviluppatori 1 (12/06/2017, annuncio)

È stata lanciata l'Anteprima per gli 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 della 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 per integrare 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 Fatturazione Google Play da parte degli sviluppatori.