Versionshinweise zur Google Play Billing Library

Dieses Dokument enthält Versionshinweise für die Google Play Billing Library.

Google Play Billing Library 7.1.1 (03.10.2024)

Version 7.1.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Fehlerkorrekturen

Google Play Billing Library 7.1.0 (19.09.2024)

Version 7.1.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

  • Verbesserte Thread-Sicherheit im Zusammenhang mit Verbindungsstatus und -verwaltung.
  • Es wurden teilweise Änderungen für den Test von BillingResult-Antwortcodes eingeführt, die in Play Billing Library 7.1.1 vollständig freigegeben werden. Wenn Sie Ihre Integration mit dieser Funktion testen möchten, müssen Sie auf Play Billing Library 7.1.1 upgraden. Es gibt einen Fehler, der sich nur auf Anwendungen auswirkt, für die die Tests für Abrechnungsüberschreibungen aktiviert sind. Die reguläre Nutzung ist nicht betroffen. Weitere Informationen finden Sie unter BillingResult-Antwortcodes testen.

Google Play Billing Library 7.0.0 (14.05.2024)

Version 7.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Google Play Billing Library 6.2.1 (16.04.2024)

Version 6.2.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Google Play Billing Library 6.2.0 (06.03.2024)

Version 6.2.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Google Play Billing Library 6.1.0 (14.11.2023)

Version 6.1.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Google Play Billing Library 6.0.1 (22.06.2023)

Version 6.0.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Aktualisieren Sie die Play Billing Library, damit sie mit Android 14 kompatibel ist.

Google Play Billing Library 6.0 (10.05.2023)

Version 6.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

  • Es wurde ein neues Enum ReplacementMode hinzugefügt, um ProrationMode zu ersetzen.

    Aus Gründen der Abwärtskompatibilität ist ProrationMode weiterhin verfügbar.

  • Bestell-ID für Käufe von PENDING entfernt

    Bisher wurde die Bestell-ID immer erstellt, auch wenn der Kauf ausstehend war. Ab Version 6.0.0 wird für ausstehende Käufe keine Bestell-ID erstellt. Diese wird erst dann eingefügt, wenn der Kauf in den Status PURCHASED wechselt.

  • Die Methoden queryPurchases und launchPriceConfirmationFlow wurden entfernt.

    Die Methoden queryPurchases und launchPriceConfirmationFlow, die zuvor als veraltet gekennzeichnet wurden, wurden in der Play Billing Library 6.0.0 entfernt. Entwickler sollten stattdessen queryPurchasesAsync verwenden.queryPurchases Informationen zu Alternativen für launchPriceConfirmationFlow finden Sie unter Preisänderungen.

  • Neuer Netzwerkfehlerantwortcode hinzugefügt.

    Ab PBL-Version 6.0.0 wurde ein neuer Netzwerkfehler-Antwortcode, NETWORK_ERROR, hinzugefügt. Dieser Code wird zurückgegeben, wenn ein Fehler aufgrund eines Netzwerkverbindungsproblems auftritt. Diese Netzwerkverbindungsfehler wurden zuvor als SERVICE_UNAVAILABLE gemeldet.

  • SERVICE_UNAVAILABLE und SERVICE_TIMEOUT wurden aktualisiert.

    Ab PBL-Version 6.0.0 werden Fehler aufgrund einer Zeitüberschreitung bei der Verarbeitung als SERVICE_UNAVAILABLE statt als SERVICE_TIMEOUT zurückgegeben.

    In früheren PBL-Versionen ändert sich das Verhalten nicht.

  • SERVICE_TIMEOUT wurde entfernt.

    Ab PBL-Version 6.0.0 wird SERVICE_TIMEOUT nicht mehr zurückgegeben. In früheren Versionen von PBL wird dieser Code weiterhin zurückgegeben.

  • Es wurde zusätzliches Logging hinzugefügt.

    Die Version 6 der Play Billing Library enthält zusätzliche Protokolle, die Aufschluss über die API-Nutzung (z. B. Erfolg oder Fehler) und Probleme mit der Dienstverbindung geben. Diese Informationen werden verwendet, um die Leistung der Play Billing Library zu verbessern und den Support bei Fehlern zu optimieren.

Google Play Billing Library 5.2.1 (22.06.2023)

Version 5.2.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Aktualisieren Sie die Play Billing Library, damit sie mit Android 14 kompatibel ist.

Google Play Billing Library 5.2 (06.04.2023)

Version 5.2.0 der Google Play Billing Library und die Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Google Play Billing Library 5.1 (31.10.2022)

Version 5.1.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

Google Play Billing Library 5.0 (11.05.2022)

Version 5.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

  • Einführung eines neuen Modells für Abos, einschließlich neuer Entitäten, mit denen Sie mehrere Angebote für ein einzelnes Aboprodukt erstellen können. Weitere Informationen finden Sie in der Migrationsanleitung.
  • BillingClient.queryProductDetailsAsync() wurde hinzugefügt, um BillingClient.querySkuDetailsAsync() zu ersetzen.
  • Die Methode setIsOfferPersonalized() wurde für die Offenlegungsanforderungen für personalisierte Preise in der EU hinzugefügt. Weitere Informationen zur Verwendung dieser Methode finden Sie unter Personalisierten Preis angeben.
  • queryPurchases() wurde entfernt. Diese Methode wurde bereits eingestellt und durch „queryPurchasesAsync“ ersetzt, die in der Google Play Billing Library 4.0.0 eingeführt wurde.
  • launchPriceChangeFlow wurde verworfen und wird in einer zukünftigen Version entfernt. Weitere Informationen zu Alternativen finden Sie unter Bestätigungsablauf für Preisänderungen starten.
  • setVrPurchaseFlow() wurde entfernt, da es zuvor beim Instanziieren eines Kaufvorgangs verwendet wurde. In früheren Versionen wurde der Nutzer mit dieser Methode auf sein Android-Gerät weitergeleitet, um den Kauf abzuschließen. Wenn Sie diese Methode entfernen, schließen Nutzer den Kauf über den standardmäßigen Kaufvorgang ab.

Google Play Billing Library 4.1 (23.02.2022)

Version 4.1.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

Google Play Billing Library 4.0 (18.05.2021)

Version 4.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.

Zusammenfassung der Änderungen

Google Play Billing Library 3.0.3 (12.03.2021)

Version 3.0.3 der Google Play Billing Library, die Kotlin-Erweiterung und das Unity-Plug-in sind jetzt verfügbar.

Fehlerkorrekturen für Java und Kotlin

  • Speicherleck beim Aufruf von endConnection() behoben
  • Problem behoben, wenn die Google Play Billing Library von Apps verwendet wird, die den Startmodus für einzelne Aufgaben nutzen. Ein onPurchasesUpdated()-Callback wird ausgelöst, wenn eine App über den Android-Launcher fortgesetzt wird und das Abrechnungsdialogfeld vor der Sperrung sichtbar war.

Fehlerkorrekturen für Unity

  • Aktualisieren Sie auf Java-Version 3.0.3, um ein Speicherleck zu beheben und ein Problem zu beheben, das Käufe verhindert, wenn eine App über den Android-Launcher fortgesetzt wird und der Abrechnungsdialog vor der Sperrung sichtbar war.

Google Play Billing Library 3.0.2 (24.11.2020)

Version 3.0.2 der Google Play Billing Library und die Kotlin-Erweiterung sind jetzt verfügbar.

Fehlerkorrekturen

  • Ein Fehler in der Kotlin-Erweiterung wurde behoben, bei dem die coroutine mit dem Fehler „Already resumed“ (Bereits fortgesetzt) fehlgeschlagen ist.
  • Es wurden nicht aufgelöste Verweise behoben, die bei Verwendung der Kotlin-Erweiterung mit der kotlinx.coroutines-Bibliothek Version 1.4 oder höher auftraten.

Google Play Billing Library 3.0.1 (30.09.2020)

Version 3.0.1 der Google Play Billing Library und der Kotlin-Erweiterung sind jetzt verfügbar.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, durch den PurchasesUpdatedListener bei einem Abbruch und einer Wiederherstellung der App während des Abrechnungsvorgangs möglicherweise nicht mit dem Kaufergebnis aufgerufen wurde.

Google Play Billing Library 3.0 (08.06.2020)

Version 3.0.0 der Google Play Billing Library, die Kotlin-Erweiterung und das Unity-Plug-in sind jetzt verfügbar.

Zusammenfassung der Änderungen

  • Die Unterstützung für Artikelnummern mit Prämie wurde entfernt.
  • Die Parameter ChildDirected und UnderAgeOfConsent wurden entfernt.
  • Veraltete Entwicklernutzlastmethoden wurden entfernt.
  • Die veralteten Methoden BillingFlowParams.setAccountId() und BillingFlowParams.setDeveloperId() wurden entfernt.
  • Die veralteten Methoden BillingFlowParams.setOldSkus(String oldSku) und BillingFlowParams.addOldSku(String oldSku) wurden entfernt.
  • Anmerkungen zur Null-Zulässigkeit wurden hinzugefügt.

Fehlerkorrekturen

  • SkuDetails.getIntroductoryPriceCycles() gibt jetzt int anstelle von String zurück.
  • Ein Fehler wurde behoben, bei dem der Abrechnungsvorgang so behandelt wurde, als wären zusätzliche Parameter vorhanden, auch wenn keine zusätzlichen Parameter festgelegt wurden.

Google Play Billing Library 2.2.1 (20.05.2020)

Version 2.2.1 der Google Play Billing Library ist jetzt verfügbar.

Fehlerkorrekturen

  • Die Standardversion der Java Play Billing Library, von der die Kotlin-Erweiterung abhängt, wurde aktualisiert.

Veröffentlichung der Google Play Billing Library 2.2.0 und Unity-Unterstützung (23.03.2020)

Version 2.2.0 der Google Play-Abrechnung bietet Funktionen, mit denen Entwickler dafür sorgen können, dass Käufe dem richtigen Nutzer zugeordnet werden. Durch diese Änderungen müssen keine benutzerdefinierten Lösungen mehr auf Grundlage der Entwicklernutzlast erstellt werden. Im Rahmen dieses Updates wurde die Funktion für Entwicklernutzlasten eingestellt und wird in einer zukünftigen Version entfernt. Weitere Informationen, einschließlich empfohlener Alternativen, finden Sie unter Entwicklernutzlast.

Google Play Billing Library 2 für Unity

Neben den aktuellen Java- und Kotlin-Versionen der Google Play Billing Library 2 haben wir eine Version der Bibliothek für die Verwendung mit Unity veröffentlicht. Spieleentwickler, die die Unity In-App-Kauf-API verwenden, können jetzt ein Upgrade durchführen, um alle Funktionen der Google Play Billing Library 2 zu nutzen und die nachfolgenden Upgrades auf zukünftige Versionen der Google Play Billing Library zu vereinfachen.

Weitere Informationen finden Sie unter Google Play Billing mit Unity verwenden.

Zusammenfassung der Änderungen

Veröffentlichung der Google Play Billing Library 2.1.0 und der Kotlin-Erweiterung 2.1.0 (10. Dezember 2019)

Version 2.1.0 der Google Play Billing Library und die neue Kotlin-Erweiterung sind jetzt verfügbar. Die Kotlin-Erweiterung der Play Billing Library bietet idiomatische API-Alternativen für die Verwendung in Kotlin mit verbesserter Null-Sicherheit und coroutines. Codebeispiele finden Sie unter Google Play Billing Library verwenden.

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

  • In BillingFlowParams wurde setOldSku(String oldSku) eingestellt und durch setOldSku(String oldSku, String purchaseToken) ersetzt, um Mehrdeutigkeiten zu vermeiden, wenn mehrere Konten auf dem Gerät dieselbe Artikelnummer haben.

Google Play Billing Library 2.0.3 (05.08.2019)

Version 2.0.3 der Google Play Billing Library ist jetzt verfügbar.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem querySkuDetailsAsync() gelegentlich mit dem Code DEVELOPER_ERROR fehlgeschlagen ist, anstatt ein erfolgreiches Ergebnis zurückzugeben.

Google Play Billing Library 2.0.2 (08.07.2019)

Version 2.0.2 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält Aktualisierungen der Referenzdokumentation. Die Funktionalität der Bibliothek bleibt unverändert.

Google Play Billing Library 2.0.1 (06.06.2019)

Version 2.0.1 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Fehlerkorrekturen

  • Ein Fehler wurde behoben, durch den Debug-Nachrichten in einigen Fällen als null zurückgegeben wurden.
  • Ein potenzielles Speicherleck wurde behoben.

Veröffentlichung der Google Play Billing Library 2.0 (7. Mai 2019)

Version 2.0 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Käufe müssen innerhalb von drei Tagen bestätigt werden

Google Play unterstützt den Kauf von Produkten innerhalb Ihrer App (In-App) oder außerhalb Ihrer App (Out-of-App). Damit Google Play unabhängig davon, wo der Nutzer Ihr Produkt kauft, für eine einheitliche Kauferfahrung sorgen kann, müssen Sie alle über die Google Play Billing Library erhaltenen Käufe so schnell wie möglich bestätigen, nachdem Sie dem Nutzer die Berechtigung erteilt haben. Wenn Sie einen Kauf nicht innerhalb von drei Tagen bestätigen, erhält der Nutzer automatisch eine Erstattung und Google Play macht den Kauf rückgängig. Bei ausstehenden Transaktionen (neu in Version 2.0) beginnt das Drei-Tage-Fenster, wenn der Kauf den Status PURCHASED erreicht hat. Es gilt nicht, solange der Kauf den Status PENDING hat.

Bei Abos müssen Sie jeden Kauf bestätigen, der ein neues Kauftoken enthält. Das bedeutet, dass alle ersten Käufe, Tarifänderungen und Neuregistrierungen bestätigt werden müssen, aber nachfolgende Verlängerungen nicht. Ob für einen Kauf eine Bestätigung erforderlich ist, sehen Sie im Bestätigungsfeld des Kaufs.

Das Purchase-Objekt enthält jetzt die Methode isAcknowledged(), die angibt, ob ein Kauf bestätigt wurde. Außerdem enthält die Google Play Developer API boolesche Bestätigungswerte sowohl für Purchases.products als auch für Purchases.subscriptions. Bevor du einen Kauf bestätigst, solltest du mithilfe dieser Methoden prüfen, ob der Kauf bereits bestätigt wurde.

Sie können einen Kauf mit einer der folgenden Methoden bestätigen:

  • Verwende für Verbrauchsprodukte consumeAsync(), das in der Client API zu finden ist.
  • Verwende für Produkte, die nicht verbraucht werden, acknowledgePurchase() aus der Client API.
  • In der Server API ist auch eine neue acknowledge()-Methode verfügbar.

BillingFlowParams.setSku() wurde entfernt

Die zuvor eingestellte Methode BillingFlowParams#setSku() wurde in dieser Version entfernt. Bevor du Produkte in einem Kaufvorgang rendern kannst, musst du jetzt BillingClient.querySkuDetailsAsync() aufrufen und das resultierende SkuDetails-Objekt an BillingFlowParams.Builder.setSkuDetails() übergeben.

Codebeispiele finden Sie unter Google Play Billing Library verwenden.

Entwicklernutzlast wird unterstützt

Version 2.0 der Google Play Billing Library unterstützt Entwicklernutzlast – beliebige Strings, die an Käufe angehängt werden können. Sie können einem Kauf einen Entwickler-Nutzlastparameter zuweisen, aber nur, wenn der Kauf bestätigt oder verwendet wird. Das ist anders als bei der Entwicklernutzlast in AIDL, bei der die Nutzlast beim Starten des Kaufvorgangs angegeben werden kann. Da Käufe jetzt außerhalb Ihrer App initiiert werden können, haben Sie dank dieser Änderung immer die Möglichkeit, Käufen eine Nutzlast hinzuzufügen.

Um auf die Nutzlast in der neuen Bibliothek zuzugreifen, enthalten Purchase-Objekte jetzt die Methode getDeveloperPayload().

Einheitliche Angebote

Wenn Sie eine ermäßigte SKU anbieten, gibt Google Play jetzt den Originalpreis der SKU zurück, damit Sie Nutzern anzeigen können, dass sie einen Rabatt erhalten.

SkuDetails enthält zwei neue Methoden zum Abrufen des ursprünglichen SKU-Preises:

Ausstehende Transaktionen

Mit Version 2.0 der Google Play Billing Library müssen Sie Käufe unterstützen, bei denen vor der Gewährung des Berechtigungsstatus zusätzliche Aktionen erforderlich sind. Ein Nutzer kann beispielsweise Ihr In-App-Produkt in einem Geschäft mit Bargeld kaufen. Das bedeutet, dass die Transaktion außerhalb deiner App abgeschlossen wird. In diesem Fall solltest du die Berechtigung erst gewähren, nachdem der Nutzer die Transaktion abgeschlossen hat.

Wenn Sie ausstehende Käufe aktivieren möchten, rufen Sie enablePendingPurchases() im Rahmen der Initialisierung Ihrer App auf.

Mit Purchase.getPurchaseState() lässt sich ermitteln, ob der Kaufstatus PURCHASED oder PENDING ist. Die Berechtigung sollte nur gewährt werden, wenn der Status PURCHASED lautet. So prüfen Sie den Status von Purchase:

  1. Rufe beim Starten deiner App BillingClient.queryPurchases() auf, um die Liste der nicht in Anspruch genommenen Produkte abzurufen, die dem Nutzer zugeordnet sind.
  2. Rufen Sie Purchase.getPurchaseState() für jedes zurückgegebene Purchase-Objekt auf.
  3. Implementiere die Methode onPurchasesUpdated(), um auf Änderungen an Purchase-Objekten zu reagieren.

Außerdem enthält die Google Play Developer API den Status PENDING für Purchases.products. Ausstehende Transaktionen werden für Abos nicht unterstützt.

Mit diesem Release wird auch ein neuer Echtzeit-Entwicklerbenachrichtigungstyp eingeführt: OneTimeProductNotification. Dieser Benachrichtigungstyp enthält eine einzelne Nachricht, deren Wert entweder ONE_TIME_PRODUCT_PURCHASED oder ONE_TIME_PRODUCT_CANCELED ist. Dieser Benachrichtigungstyp wird nur für Käufe gesendet, die mit verzögerten Zahlungsmitteln wie Bargeld verbunden sind.

Bestätige ausstehende Käufe nur, wenn der Kaufstatus PURCHASED und nicht PENDING ist.

API-Änderungen

Version 2.0 der Google Play Billing Library enthält mehrere API-Änderungen, um neue Funktionen zu unterstützen und bestehende Funktionen zu verdeutlichen.

consumeAsync

Für consumeAsync() wird jetzt ein ConsumeParams-Objekt anstelle eines purchaseToken verwendet. ConsumeParams enthält den purchaseToken sowie eine optionale Entwicklernutzlast.

Die vorherige Version von consumeAsync() wurde in diesem Release entfernt.

queryPurchaseHistoryAsync

Um Verwirrung zu vermeiden, gibt queryPurchaseHistoryAsync() jetzt ein PurchaseHistoryRecord-Objekt anstelle eines Purchase-Objekts zurück. Das PurchaseHistoryRecord-Objekt entspricht einem Purchase-Objekt, mit der Ausnahme, dass es nur die von queryPurchaseHistoryAsync() zurückgegebenen Werte widerspiegelt und die Felder autoRenewing, orderId und packageName nicht enthält. An den zurückgegebenen Daten hat sich nichts geändert. queryPurchaseHistoryAsync() gibt dieselben Daten wie zuvor zurück.

Rückgabewerte von „BillingResult“

APIs, die zuvor einen Ganzzahlwert von BillingResponse zurückgegeben haben, geben jetzt ein BillingResult-Objekt zurück. BillingResult enthält die Ganzzahl BillingResponse sowie einen Debug-String, mit dem Sie Fehler diagnostizieren können. Der Debug-String verwendet die Sprache „en-US“ und soll Endnutzern nicht angezeigt werden.

Fehlerkorrekturen

Google Play Billing Library 1.2.2 (07.03.2019)

Version 1.2.2 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Fehlerkorrekturen

  • Ein Problem mit Threads, das in Version 1.2.1 aufgetreten ist, wurde behoben. Hintergrundaufrufe blockieren den Hauptthread nicht mehr.

Sonstige Änderungen

  • Die Verwendung des Hauptthreads wird zwar weiterhin empfohlen, Sie können die Google Play Billing Library aber jetzt auch über einen Hintergrund-Thread instanziieren.
  • Die Instanziierung wurde vollständig in den Hintergrund-Thread migriert, um das Risiko von ANRs zu verringern.

Play Billing Library-Version 1.2.1 (04.03.2019)

Version 1.2.1 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Größere Änderungen

Sonstige Änderungen

  • Es wurden öffentliche Konstruktoren für PurchasesResult und SkuDetailsResult hinzugefügt, um das Testen zu vereinfachen.
  • Für SkuDetails-Objekte kann eine neue Methode verwendet werden: getOriginalJson().
  • Alle AIDL-Dienstaufrufe werden jetzt von Hintergrundthreads verarbeitet.

Fehlerkorrekturen

  • Null-Callback-Listener werden nicht mehr an öffentliche APIs übergeben.

Google Play Billing Library 1.2 (18. Oktober 2018)

Version 1.2 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Zusammenfassung der Änderungen

  • Die Google Play Billing Library wird jetzt gemäß der Lizenzvereinbarung für das Android Software Development Kit lizenziert.
  • Die launchPriceChangeConfirmationFlow API wurde hinzugefügt. Über diese API werden Nutzer aufgefordert, eine ausstehende Änderung des Abopreises zu prüfen.
  • Es wurde Unterstützung für einen neuen Modus zur Aufteilung von Abokosten (DEFERRED) beim Upgraden oder Downgraden des Abos eines Nutzers hinzugefügt.
  • In der Klasse BillingFlowParams wurde setSku() durch setSkuDetails() ersetzt.
  • Kleinere Fehlerkorrekturen und Codeoptimierungen.

Bestätigung der Preisänderung

Sie können jetzt den Preis eines Abos in der Google Play Console ändern und Nutzer auffordern, den neuen Preis zu prüfen und zu akzeptieren, wenn sie Ihre App aufrufen.

Wenn du diese API verwenden möchtest, erstelle ein PriceChangeFlowParams-Objekt mit dem skuDetails des Aboprodukts und rufe dann launchPriceChangeConfirmationFlow() auf. Implementiere PriceChangeConfirmationListener, um das Ergebnis zu verarbeiten, wenn der Bestätigungsvorgang für die Preisänderung abgeschlossen ist, wie im folgenden Code-Snippet gezeigt:

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.
            }
        });

Im Bestätigungsvorgang für die Preisänderung wird ein Dialogfeld mit den neuen Preisinformationen angezeigt, in dem Nutzer aufgefordert werden, den neuen Preis zu akzeptieren. Dieser Ablauf gibt einen Antwortcode vom Typ BillingClient.BillingResponse zurück.

Neuer Modus für die Aufteilung

Wenn du das Abo eines Nutzers upgradest oder downgradest, kannst du den neuen Aufteilungsmodus DEFERRED verwenden. In diesem Modus wird das Abo des Nutzers bei der nächsten Verlängerung aktualisiert. Weitere Informationen zum Festlegen dieses Aufteilungsmodus finden Sie unter Aufteilungsmodus festlegen.

Neue Methode zum Festlegen von SKU-Details

In der Klasse BillingFlowParams wurde die Methode setSku() eingestellt. Mit dieser Änderung soll der Ablauf der Google Play-Abrechnung optimiert werden.

Wenn Sie in Ihrem In-App-Abrechnungsclient eine neue Instanz von BillingFlowParams erstellen, empfehlen wir, stattdessen direkt mit dem JSON-Objekt zu arbeiten, indem Sie setSkuDetails() verwenden, wie im folgenden Code-Snippet gezeigt:

In der Builder-Klasse BillingFlowParams wurde die Methode setSku() eingestellt. Verwenden Sie stattdessen die Methode setSkuDetails(), wie im folgenden Code-Snippet gezeigt. Das an das setSkuDetails()-Objekt übergebene Objekt stammt aus der Methode 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();
}

Play Billing Library 1.1 (07.05.2018)

Version 1.1 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Zusammenfassung der Änderungen

  • Es kann jetzt in BillingFlowParams ein Modus für die Aufteilung des Abopreises angegeben werden, wenn ein bestehendes Abo upgegradet oder downgraded wird.
  • Das boole Flag replaceSkusProration in BillingFlowParams wird nicht mehr unterstützt. Verwenden Sie stattdessen replaceSkusProrationMode.
  • launchBillingFlow() löst jetzt einen Rückruf für fehlgeschlagene Antworten aus.

Geändertes Verhalten

Version 1.1 der Google Play Billing Library enthält die folgenden Verhaltensänderungen.

Entwickler können replaceSkusProrationMode in der Klasse BillingFlowParams festlegen

Eine ProrationMode enthält weitere Informationen zur Art der Aufteilung beim Upgrade oder Downgrade des Abos eines Nutzers.

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 unterstützt derzeit die folgenden Aufteilungsmodi:

IMMEDIATE_WITH_TIME_PRORATION Der Ersatz tritt sofort in Kraft. Die neue Ablaufzeit wird anteilig berechnet und dem Nutzer gutgeschrieben oder in Rechnung gestellt. Das ist das aktuelle Standardverhalten.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE Der Ersatz tritt sofort in Kraft und der Abrechnungszeitraum bleibt gleich. Der Preis für den verbleibenden Zeitraum wird in Rechnung gestellt.

Hinweis: Diese Option ist nur für ein Abo-Upgrade verfügbar.

IMMEDIATE_WITHOUT_PRORATION Der Austausch tritt sofort in Kraft und der neue Preis wird bei der nächsten Wiederholung in Rechnung gestellt. Der Abrechnungszeitraum bleibt gleich.

replaceSkusProration wird in der Klasse BillingFlowParams nicht mehr unterstützt

Bisher konnten Entwickler ein boolesches Flag festlegen, um einen anteiligen Betrag für einen Abo-Upgrade-Antrag zu berechnen. Da wir ProrationMode unterstützen, das detailliertere Informationen zur Kulanzregelung enthält, wird dieses boolesche Flag nicht mehr unterstützt.

launchBillingFlow() löst jetzt einen Rückruf bei fehlgeschlagenen Antworten aus

Die Billing Library löst immer den PurhcasesUpdatedListener-Callback aus und gibt asynchron einen BillingResponse zurück. Der synchrone Rückgabewert von BillingResponse bleibt ebenfalls erhalten.

Fehlerkorrekturen

  • Beendet asynchrone Methoden korrekt, wenn die Verbindung zum Dienst getrennt wird.
  • Builder Param-Objekte verändern keine erstellten Objekte mehr.
  • Problem 68087141: launchBillingFlow() löst jetzt einen Rückruf bei fehlgeschlagenen Antworten aus.

Veröffentlichung der Google Play Billing Library 1.0 (19.09.2017, Ankündigung)

Version 1.0 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:

Wichtige Änderungen

  • Eingebettete Abrechnungsberechtigung im Manifest der Bibliothek. Sie müssen die Berechtigung com.android.vending.BILLING nicht mehr im Android-Manifest hinzufügen.
  • Der Klasse BillingClient.Builder wurde ein neuer Builder hinzugefügt.
  • Einführung des Builder-Musters für die Klasse SkuDetailsParams, die für Methoden zum Abfragen von Artikelnummern verwendet werden soll.
  • Mehrere API-Methoden wurden einheitlich gestaltet (Namen und Reihenfolge der Rückgabeargumente).

Geändertes Verhalten

Version 1.0 der Google Play Billing Library enthält die folgenden Verhaltensänderungen.

Klasse BillingClient.Builder

BillingClient.Builder wird jetzt über das newBuilder-Muster initialisiert:

Kotlin

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

Java

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

Die Methode „launchBillingFlow“ wird jetzt mit einer Klasse „BillingFlowParams“ aufgerufen.

Um den Abrechnungsvorgang für einen Kauf oder ein Abo zu starten, wird der Methode launchBillingFlow() eine BillingFlowParams-Instanz übergeben, die mit Parametern für die Anfrage initialisiert wurde:

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

Neue Möglichkeit zur Abfrage verfügbarer Produkte

Die Argumente für die Methoden queryPurchaseHistoryAsync() und querySkuDetailsAsync() wurden in ein Builder-Muster verpackt:

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() {...})

Das Ergebnis wird jetzt über einen Ergebniscode und eine Liste von SkuDetails-Objekten anstelle der vorherigen Wrapper-Klasse zurückgegeben, um für mehr Nutzerfreundlichkeit und Einheitlichkeit in unserer API zu sorgen:

Kotlin

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

Java

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

Reihenfolge der Parameter bei der Methode onConsumeResponse() geändert

Die Reihenfolge der Argumente für onConsumeResponse über die Benutzeroberfläche ConsumeResponseListener wurde geändert, um für die gesamte API einheitlich zu sein:

Kotlin

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

Java

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

Entpacktes PurchaseResult-Objekt

PurchaseResult wurde entpackt, um für Einheitlichkeit in unserer API zu sorgen:

Kotlin

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

Java

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

Fehlerkorrekturen

Version 1 der Entwicklervorschau (12. Juni 2017, Ankündigung)

Einführung der Entwicklervorschau, die den Entwicklungsprozess im Hinblick auf die Abrechnung vereinfachen soll. So können sich Entwickler darauf konzentrieren, die für die Android-App spezifische Logik zu implementieren, z. B. die Anwendungsarchitektur und die Navigationsstruktur.

Die Bibliothek enthält mehrere praktische Klassen und Funktionen, die Sie bei der Einbindung Ihrer Android-Apps in die Google Play Billing API verwenden können. Die Bibliothek bietet außerdem eine Abstraktionsschicht über dem Android Interface Definition Language (AIDL)-Dienst, die es Entwicklern erleichtert, die Schnittstelle zwischen der App und der Google Play Billing API zu definieren.