Note di rilascio della Libreria Fatturazione Google Play

Questo argomento contiene le note di rilascio per la Libreria Fatturazione Google Play.

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

È ora disponibile la versione 6.2.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

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

È ora disponibile la versione 6.1.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

Rilascio 6.0.1 di Libreria Fatturazione Google Play (22/06/2023)

È ora disponibile la versione 6.0.1 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

Aggiorna Libreria Fatturazione Play in modo che sia compatibile con Android 14.

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

È ora disponibile la versione 6.0.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

  • È stata aggiunta una nuova enumerazione di ReplacementMode da 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à completato dopo che l'acquisto verrà spostato nello stato PURCHASED.

  • Metodi queryPurchases e launchPriceConfirmationFlow rimossi.

    I metodi queryPurchases e launchPriceConfirmationFlow che precedentemente sono stati contrassegnati come deprecati ora sono stati rimossi nella Libreria Fatturazione Play 6.0.0. Gli sviluppatori dovrebbero usare queryPurchasesAsync anziché queryPurchases. Per le alternative launchPriceConfirmationFlow, consulta Modifiche ai prezzi.

  • Nuovo codice di risposta di errore di rete aggiunto.

    È stato aggiunto un nuovo codice di risposta di errore di rete, NETWORK_ERROR, a partire dalla versione 6.0.0 di PBL. Questo codice viene restituito quando si verifica un errore dovuto a un problema di connessione di rete. Questi errori di connessione di rete erano precedentemente segnalati come SERVICE_UNAVAILABLE.

  • Aggiornato SERVICE_UNAVAILABLE e SERVICE_TIMEOUT.

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

    Il comportamento non cambia nelle versioni precedenti di PBL.

  • Rimosso SERVICE_TIMEOUT.

    A partire dalla versione PBL 6.0.0, non verrà più restituito SERVICE_TIMEOUT. Le versioni precedenti di PBL restituiranno ancora questo codice.

  • Logging aggiuntivo.

    La release Libreria Fatturazione Play 6 include logging aggiuntivo, 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 le prestazioni della Libreria Fatturazione Play e fornire una migliore assistenza per gli errori.

Rilascio 5.2.1 di Libreria Fatturazione Google Play (22/06/2023)

È ora disponibile la versione 5.2.1 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

Aggiorna Libreria Fatturazione Play in modo che sia compatibile con Android 14.

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

È ora disponibile la versione 5.2.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

Rilascio 5.1 di Libreria Fatturazione Google Play (31/10/2022)

È ora disponibile la versione 5.1.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Questa versione contiene le modifiche seguenti.

Riepilogo delle modifiche

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

È ora disponibile la versione 5.0.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Questa versione contiene le modifiche seguenti.

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.
  • Aggiunto BillingClient.queryProductDetailsAsync() per sostituire BillingClient.querySkuDetailsAsync().
  • Metodo setIsOfferPersonalized() aggiunto per i requisiti di divulgazione dei prezzi personalizzati per l'UE. Per scoprire di più su come usare questo metodo, consulta Indicare un prezzo personalizzato.
  • È stato rimosso queryPurchases(), che in precedenza era deprecato 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 Avviare un flusso di conferma della variazione di prezzo.
  • È stato rimosso setVrPurchaseFlow(), che era utilizzato in precedenza per creare l'istanza di un flusso di acquisto. Nelle versioni precedenti, questo metodo reindirizzava l'utente a completare l'acquisto sul proprio dispositivo Android. Una volta rimosso questo metodo, gli utenti completeranno l'acquisto tramite il flusso di acquisto standard.

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

È ora disponibile la versione 4.1.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Questa versione contiene le modifiche seguenti.

Riepilogo delle modifiche

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

È ora disponibile la versione 4.0.0 delle estensioni Libreria Fatturazione Google Play e Kotlin.

Riepilogo delle modifiche

Rilascio 3.0.3 di Libreria Fatturazione Google Play (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 di Java e Kotlin

  • Correggi 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 a singola attività. Verrà attivato un callback di onPurchasesUpdated() quando un'app viene ripresa da Avvio app di Android e quando la finestra di dialogo di fatturazione era visibile prima della sospensione.

Correzioni di bug di Unity

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

Rilascio 3.0.2 di Libreria Fatturazione Google Play (24/11/2020)

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

Correzioni di bug

  • Risolto il bug nell'estensione Kotlin per il quale la coroutine non funzionava ed era stato visualizzato l'errore "Già ripresa".
  • Sono stati corretti i riferimenti non risolti quando l'estensione Kotlin viene utilizzata con la libreria kotlinx.coroutines versione 1.4+.

Rilascio 3.0.1 di Libreria Fatturazione Google Play (30/09/2020)

Sono ora disponibili la versione 3.0.1 dell'estensione Libreria Fatturazione Google Play e Kotlin.

Correzioni di bug

  • Risolto 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 3.0 della Libreria Fatturazione Google Play (8/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

  • Supporto dello SKU con premio rimosso.
  • Sono stati rimossi i parametri ChildDirected e UnderAgeOfConsent.
  • Rimossi metodi payload per sviluppatori deprecati.
  • Rimossi metodi deprecati BillingFlowParams.setAccountId() e BillingFlowParams.setDeveloperId().
  • Rimossi metodi deprecati BillingFlowParams.setOldSkus(String oldSku) e BillingFlowParams.addOldSku(String oldSku).
  • Sono state aggiunte annotazioni con supporto di valori null.

Correzioni di bug

  • SkuDetails.getIntroductoryPriceCycles() ora restituisce int anziché String.
  • Risolto il bug per cui il flusso di fatturazione verrebbe considerato come la presenza di parametri aggiuntivi anche se non ne fossero impostati altri.

Rilascio 2.2.1 di Libreria Fatturazione Google Play (20/05/2020)

È ora disponibile la versione 2.2.1 della Libreria Fatturazione Google Play.

Correzioni di bug

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

Versione 2.2.0 della Libreria Fatturazione Google Play e assistenza per Unity (23/03/2020)

La versione 2.2.0 di Fatturazione Google Play fornisce funzionalità che aiutano gli sviluppatori ad assicurare che gli acquisti vengano attribuiti all'utente corretto. Queste modifiche sostituiscono la necessità di creare soluzioni personalizzate basate sul payload degli sviluppatori. Nell'ambito di questo aggiornamento, la funzionalità del payload per sviluppatori è stata ritirata e verrà rimossa in una release futura. Per maggiori informazioni, incluse le alternative consigliate, consulta Payload per sviluppatori.

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 ora eseguire l'upgrade per sfruttare 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 Utilizzare la Fatturazione Google Play con Unity.

Riepilogo delle modifiche

Rilascio Libreria Fatturazione Google Play 2.1.0 e Rilascio Kotlin Extension 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 Fatturazione Play fornisce alternative API idiomatiche per l'utilizzo di Kotlin, con migliori sicurezza null e coroutine. Per esempi di codice, consulta l'articolo Utilizzare la Libreria Fatturazione Google Play.

Questa versione contiene le modifiche seguenti.

Riepilogo delle modifiche

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

Rilascio 2.0.3 di Libreria Fatturazione Google Play (5/08/2019)

È ora disponibile la versione 2.0.3 della Libreria Fatturazione Google Play.

Correzioni di bug

  • Risolto il bug per cui querySkuDetailsAsync() a volte non riusciva con il codice DEVELOPER_ERROR invece di restituire un risultato riuscito.

Rilascio 2.0.2 di Libreria Fatturazione Google Play (8/07/2019)

È ora disponibile la versione 2.0.2 della Libreria Fatturazione Google Play. Questa release contiene aggiornamenti alla documentazione di riferimento e non modifica la funzionalità della libreria.

Rilascio 2.0.1 di Libreria Fatturazione Google Play (6/06/2019)

È ora disponibile la versione 2.0.1 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.

Correzioni di bug

  • Risolto il bug per cui i messaggi di debug venivano restituiti come null, in alcuni casi.
  • Risolto un potenziale problema di perdita di memoria.

Rilascio 2.0 della Libreria Fatturazione Google Play (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 all'interno o all'esterno dell'app (in-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 sospeso (nuova versione 2.0), la finestra di tre giorni inizia quando l'acquisto passa allo stato PURCHASED e non viene applicata mentre l'acquisto è nello 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 al piano 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 della conferma 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 accettazione 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 il valore consumeAsync(), disponibile nell'API client.
  • Per i prodotti non utilizzati, utilizza il criterio acknowledgePurchase(), che trovi nell'API client.
  • Un nuovo metodo acknowledge() è disponibile anche nell'API Server.

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, devi chiamare BillingClient.querySkuDetailsAsync(), passando l'oggetto SkuDetails risultante a BillingFlowParams.Builder.setSkuDetails().

Per esempi di codice, consulta l'articolo Utilizzare la Libreria Fatturazione Google Play.

Payload sviluppatore supportato

La versione 2.0 della Libreria Fatturazione Google Play aggiunge il supporto per il payload dello sviluppatore, ovvero le stringhe arbitrarie che possono essere associate agli acquisti. Puoi associare un parametro di payload sviluppatore a un acquisto, ma solo quando l'acquisto viene confermato o utilizzato. Questo è diverso dal payload per sviluppatori in AIDL, in cui il payload potrebbe essere specificato all'avvio del flusso di acquisto. Poiché ora gli acquisti possono essere avviati dall'esterno 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, per consentirti di mostrare agli utenti che stanno ricevendo uno sconto.

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

Transazioni in sospeso

Con la versione 2.0 della Libreria Fatturazione Google Play, devi supportare gli acquisti in cui sono richieste ulteriori azioni prima di concedere il diritto. Ad esempio, un utente potrebbe scegliere di acquistare il tuo prodotto in-app in un negozio fisico in contanti. Ciò significa che la transazione è stata completata al di fuori della tua app. In questo scenario, dovresti concedere il diritto solo dopo che l'utente ha completato la transazione.

Per attivare gli acquisti in attesa, chiama enablePendingPurchases() durante l'inizializzazione della tua app.

Utilizza Purchase.getPurchaseState() per determinare se lo stato di acquisto è PURCHASED o PENDING. Tieni presente che devi concedere il diritto solo quando lo stato è PURCHASED. Controlla gli aggiornamenti dello stato di Purchase procedendo nel seguente modo:

  1. Quando avvii l'app, chiama BillingClient.queryPurchases() per recuperare l'elenco dei prodotti non consumati associati all'utente.
  2. Richiama Purchase.getPurchaseState() su ogni oggetto Purchase restituito.
  3. Implementa il metodo onPurchasesUpdated() per rispondere alle modifiche apportate 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, come i contanti.

Quando confermi gli acquisti in attesa, assicurati di confermare solo quando lo stato di 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 le funzionalità esistenti.

consumareAsync

consumeAsync() ora prende un oggetto ConsumeParams invece di un purchaseToken. ConsumeParams contiene purchaseToken e un payload sviluppatore facoltativo.

La versione precedente di consumeAsync() è stata rimossa in questa release.

queryAcquistaCronologiaAsync

Per ridurre al minimo la confusione, ora queryPurchaseHistoryAsync() 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 non è cambiato nulla con i dati restituiti: queryPurchaseHistoryAsync() restituisce gli stessi dati di prima.

Valori restituiti 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 un'impostazione internazionale en-US e non deve essere mostrata agli utenti finali.

Correzioni di bug

Rilascio 1.2.2 di Libreria Fatturazione Google Play (7/03/2019)

È ora disponibile la versione 1.2.2 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.

Correzioni di bug

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

Altre modifiche

  • Anche se è comunque consigliabile utilizzare il thread principale, ora puoi creare un'istanza della Libreria Fatturazione Google Play da un thread in background.
  • È stata eseguita la migrazione completa dell'istanza nel thread in background per ridurre le probabilità di causare errori ANR.

Rilascio Libreria Fatturazione Play 1.2.1 (4/03/2019)

È ora disponibile la versione 1.2.1 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.

Modifiche principali

Altre modifiche

  • Sono stati aggiunti costruttori pubblici per PurchasesResult e SkuDetailsResult per semplificare i test.
  • SkuDetails oggetti possono utilizzare un nuovo metodo, getOriginalJson().
  • Tutte le chiamate ai servizi AIDL ora sono gestite da thread in background.

Correzioni di bug

  • I listener di callback nulli non vengono più trasmessi nelle API pubbliche.

Rilascio 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 Fatturazione Google Play è ora concessa in licenza in base al Contratto di licenza del Software Development Kit Android.
  • È stata aggiunta l'API launchPriceChangeConfirmationFlow, che richiede agli utenti di esaminare una modifica in attesa al prezzo di un abbonamento.
  • È stato aggiunto il supporto di una nuova modalità di ripartizione, DEFERRED, durante l'upgrade o il downgrade dell'abbonamento di un utente.
  • Nel corso BillingFlowParams, è stato sostituito setSku() 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 leggere 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 l'PriceChangeConfirmationListener per gestire il risultato al termine del flusso di conferma della variazione di prezzo, come mostrato nel seguente snippet di codice:

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, in cui viene chiesto agli utenti di accettare il nuovo prezzo. Questo flusso restituisce un codice di risposta di tipo BillingClient.BillingResponse.

Nuova modalità 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à proporzionale, consulta Impostare la modalità proporzionale.

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

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

Rilascio 1.1 della Libreria Fatturazione Play (7/05/2018)

È ora disponibile la versione 1.1 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.

Riepilogo delle modifiche

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

Modifiche del 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();

Attualmente 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 corrente.
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 avrà effetto immediato e il nuovo prezzo verrà addebitato alla prossima ricorrenza. Il ciclo di fatturazione rimane invariato.

replaceSkusProration non è più supportato nel corso BillingFlowParams

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

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

La Libreria Fatturazione attiva sempre il callback di PurhcasesUpdatedListener e restituisce un valore BillingResponse in modo asincrono. Viene mantenuto anche il valore restituito sincrono di BillingResponse.

Correzioni di bug

  • Si chiude correttamente nelle prime fasi dei metodi asincroni quando il servizio è disconnesso.
  • Gli oggetti dei parametri Builder non modificano più gli oggetti creati.
  • Problema 68087141: launchBillingFlow() attiva il callback per le risposte non riuscite.

Rilascio Libreria Fatturazione Google Play 1.0 (19/09/2017, Avviso)

È ora disponibile la versione 1.0 della Libreria Fatturazione Google Play. Questa versione contiene le seguenti modifiche.

Modifiche importanti

  • Autorizzazione per la fatturazione incorporata nel file manifest della raccolta. Non è più necessario aggiungere l'autorizzazione com.android.vending.BILLING nel file manifest Android.
  • Nuovo builder aggiunto alla classe BillingClient.Builder.
  • Introdotto il pattern del builder per la classe SkuDetailsParams da utilizzare sui metodi per eseguire query sugli SKU.
  • Sono stati aggiornati diversi metodi dell'API per garantire la coerenza (gli stessi nomi e lo stesso ordine degli argomenti di ritorno).

Modifiche del comportamento

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

Classe BillingClient.Builder

Ora BillingClient.Builder viene inizializzato tramite il pattern newBuilder:

Kotlin

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

Java

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

Il metodo lancioBillingFlow 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 della 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 aggregati in un pattern di 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 coerenza in tutta la nostra 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 è cambiato per essere coerente in tutta l'API:

Kotlin

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

Java

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

Oggetto PurchaseResult senza wrapping

PurchaseResult è stato eliminato per garantire la coerenza in tutta la 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 1 per gli sviluppatori (12/06/2017, annuncio)

È stata lanciata un'anteprima per gli sviluppatori, allo scopo di semplificare il processo di sviluppo per quanto riguarda la fatturazione, consentendo agli sviluppatori di concentrare i propri sforzi sull'implementazione di logica specifica per l'app per Android, ad esempio l'architettura dell'applicazione e la struttura di navigazione.

La libreria include diversi corsi e funzionalità utili che puoi utilizzare durante l'integrazione delle tue app Android con l'API Fatturazione Google Play. La libreria fornisce anche un livello di astrazione oltre al servizio Android Interface Definition Language (AIDL), consentendo agli sviluppatori di definire più facilmente l'interfaccia tra l'app e l'API Fatturazione Google Play.