Versionshinweise zur Google Play Billing Library

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

Google Play Billing Library 6.2.1 (16.04.2024)

Version 6.2.1 der Google Play Billing Library- und Kotlin-Erweiterungen ist 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 ist 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 ist 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 ist jetzt verfügbar.

Zusammenfassung der Änderungen

Aktualisiere 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 ist jetzt verfügbar.

Zusammenfassung der Änderungen

  • Es wurde eine neue ReplacementMode-Enum hinzugefügt, die ProrationMode ersetzt.

    Beachten Sie, dass ProrationMode aus Gründen der Abwärtskompatibilität weiterhin verfügbar ist.

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

    Bisher wurde die Auftrags-ID immer erstellt, auch wenn der Kauf ausstand. Ab Version 6.0.0 wird für ausstehende Käufe keine Bestell-ID erstellt. Für solche Käufe wird die Bestell-ID eingefügt, nachdem der Kauf in den Status PURCHASED verschoben wurde.

  • Die Methoden queryPurchases und launchPriceConfirmationFlow wurden entfernt.

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

  • Neuer Antwortcode für Netzwerkfehler hinzugefügt.

    Ab PBL-Version 6.0.0 wurde der neue Netzwerkfehlerantwortcode NETWORK_ERROR hinzugefügt. Dieser Code wird zurückgegeben, wenn aufgrund eines Problems mit der Netzwerkverbindung ein Fehler 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 von Zeitüberschreitungen bei der Verarbeitung als SERVICE_UNAVAILABLE anstelle des aktuellen SERVICE_TIMEOUT zurückgegeben.

    Das Verhalten ändert sich in früheren Versionen von PBL nicht.

  • SERVICE_TIMEOUT wurde entfernt.

    Ab PBL-Version 6.0.0 wird SERVICE_TIMEOUT nicht mehr zurückgegeben. Frühere Versionen von PBL geben diesen Code immer noch zurück.

  • Zusätzliches Logging wurde hinzugefügt.

    Der Release von Play Billing Library 6 umfasst ein zusätzliches Logging, das Einblick in die API-Nutzung (z. B. Erfolg und Fehler) und Probleme bei der Dienstverbindung bietet. Diese Informationen werden verwendet, um die Leistung der Play Billing Library zu verbessern und Fehler besser zu unterstützen.

Google Play Billing Library 5.2.1 (22.06.2023)

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

Zusammenfassung der Änderungen

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

Google Play Billing Library 5.2 Release (06.04.2023)

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

Zusammenfassung der Änderungen

Google Play Billing Library 5.1, Release (31.10.2022)

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

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

Google Play Billing Library 5.0 Release (11.05.2022)

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

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

  • Es wurde ein neues Modell für Abos eingeführt, einschließlich neuer Entitäten, mit denen du mehrere Angebote für ein einzelnes Aboprodukt erstellen kannst. Weitere Informationen finden Sie in der Migrationsanleitung.
  • BillingClient.queryProductDetailsAsync() wurde hinzugefügt, um BillingClient.querySkuDetailsAsync() zu ersetzen.
  • Die setIsOfferPersonalized()-Methode für die Offenlegungspflichten für personalisierte EU-Preise wurde hinzugefügt. Weitere Informationen zur Verwendung dieser Methode finden Sie unter Personalisierten Preis angeben.
  • queryPurchases() wurde entfernt, das zuvor eingestellt und durch „queryPurchasesAsync“ ersetzt wurde, das 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ätigungsvorgang für Preisänderungen starten.
  • setVrPurchaseFlow() wurde entfernt, das zuvor beim Instanziieren eines Kaufvorgangs verwendet wurde. In früheren Versionen wurden die Nutzer bei dieser Methode weitergeleitet, um den Kauf auf ihrem Android-Gerät abzuschließen. Sobald du diese Methode entfernst, schließen Nutzer den Kauf über den Standardkaufvorgang ab.

Google Play Billing Library 4.1, Release (23.02.2022)

Version 4.1.0 der Google Play Billing Library- und Kotlin-Erweiterungen ist 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 ist 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, der Kotlin-Erweiterung und des Unity-Plug-ins sind jetzt verfügbar.

Fehlerkorrekturen in Java und Kotlin

  • Speicherleck beim Aufruf von endConnection() wurde 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 angezeigt wurde.

Fehlerkorrekturen bei Unity

  • Führen Sie ein Update auf Java-Version 3.0.3 durch, um Speicherlecks und Probleme zu beheben, die Käufe verhindern, wenn eine App über den Android Launcher fortgesetzt wird und das Abrechnungsdialogfeld 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 Kotlin-Erweiterung ist jetzt verfügbar.

Fehlerkorrekturen

  • Es wurde ein Fehler in der Kotlin-Erweiterung behoben, bei dem die Koroutine mit dem Fehler „Bereits fortgesetzt“ fehlgeschlagen ist.
  • Ungelöste Verweise wurden behoben, wenn die Kotlin-Erweiterung mit der kotlinx.coroutines-Bibliothek Version 1.4 oder höher verwendet wurde.

Google Play Billing Library 3.0.1, Release (30.09.2020)

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

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem PurchasesUpdatedListener möglicherweise nicht mit dem Kaufergebnis aufgerufen wurde, wenn die App während des Abrechnungsprozesses beendet und wiederhergestellt wurde.

Google Play Billing Library 3.0, Release (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 Nutzlastmethoden für Entwickler wurden entfernt.
  • Die verworfenen Methoden BillingFlowParams.setAccountId() und BillingFlowParams.setDeveloperId() wurden entfernt.
  • Die verworfenen 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.
  • Es wurde ein Fehler behoben, bei dem der Abrechnungsvorgang als zusätzliche Parameter behandelt wurde, 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-Bibliothek, von der die Kotlin-Erweiterung abhängt, wurde aktualisiert.

Google Play Billing Library 2.2.0 und Unity-Support (23.03.2020)

Version 2.2.0 von Google Play Billing 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 auf Basis der Nutzlast des Entwicklers erstellt werden. Im Rahmen dieses Updates wurde die Nutzlastfunktion für Entwickler eingestellt und wird in einem zukünftigen Release entfernt. Weitere Informationen, einschließlich empfohlener Alternativen, finden Sie unter Entwicklernutzlast.

Google Play Billing Billing Library 2 für Unity

Zusätzlich zu den aktuellen Java- und Kotlin-Versionen von Google Play Billing Library 2 haben wir eine Version der Bibliothek zur Verwendung mit Unity veröffentlicht. Spieleentwickler, die die Unity In-App Purchase 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 einfacher zu machen.

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

Zusammenfassung der Änderungen

Google Play Billing Library 2.1.0, Release 2.1.0 der Kotlin-Erweiterung (10.12.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 von Kotlin und bietet bessere Nullsicherheit und Koroutinen. Codebeispiele findest du unter Google Play Billing Library verwenden.

Diese Version enthält die folgenden Änderungen.

Zusammenfassung der Änderungen

  • In BillingFlowParams wurde setOldSku(String oldSku) verworfen und durch setOldSku(String oldSku, String purchaseToken) ersetzt, um zu unterscheiden, ob 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

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

Google Play Billing Library 2.0.2, Version 2.0.2 (08.07.2019)

Version 2.0.2 der Google Play Billing Library ist jetzt verfügbar. Dieser Release enthält Aktualisierungen der Referenzdokumentation und ändert nichts an der Funktionalität der Bibliothek.

Google Play Billing Library 2.0.1, Version 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, bei dem Debug-Meldungen in einigen Fällen als null zurückgegeben wurden.
  • Ein potenzielles Problem mit Speicherlecks wurde behoben.

Google Play Billing Library 2.0, Release (07.05.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 deiner App (In-App) oder außerhalb deiner App (außerhalb der App). Damit Google Play unabhängig davon, wo der Nutzer dein Produkt kauft, ein einheitliches Kauferlebnis bieten kann, musst du alle Käufe über die Google Play Billing Library so schnell wie möglich bestätigen, nachdem du dem Nutzer die Berechtigung erteilt hast. Wenn du einen Kauf nicht innerhalb von drei Tagen bestätigst, erhält der Nutzer automatisch eine Erstattung und Google Play widerruft den Kauf. Bei ausstehenden Transaktionen (neu in Version 2.0) beginnt der dreitägige Zeitraum, wenn der Kauf in den Status PURCHASED verschoben wurde. Er gilt nicht, solange der Kauf den Status PENDING hat.

Bei Abos müssen Sie jeden Kauf mit einem neuen Kauftoken bestätigen. Das bedeutet, dass alle Erstkäufe, Tarifänderungen und erneuten Registrierungen bestätigt werden müssen, nachfolgende Verlängerungen jedoch nicht. Ob ein Kauf bestätigt werden muss, können Sie über das Bestätigungsfeld im Kauf prüfen.

Das Purchase-Objekt enthält jetzt die Methode isAcknowledged(), die angibt, ob ein Kauf bestätigt wurde. Darüber hinaus enthält die Google Play Developer API boolesche Werte für die Bestätigung sowohl für Purchases.products als auch für Purchases.subscriptions. Bevor du einen Kauf bestätigst, solltest du diese Methoden verwenden, um festzustellen, ob der Kauf bereits bestätigt wurde.

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

  • Verwende für Verbrauchsgüter die consumeAsync(), die du in der Client API findest.
  • Verwende für Produkte, die nicht genutzt werden, acknowledgePurchase(), der in der Client API enthalten ist.
  • In der Server API ist auch eine neue acknowledge()-Methode verfügbar.

BillingFlowParams.setSku() wurde entfernt

Die zuvor eingestellte Methode BillingFlowParams#setSku() wurde in diesem Release entfernt. Bevor Sie Produkte in einem Kaufvorgang rendern, müssen Sie jetzt BillingClient.querySkuDetailsAsync() aufrufen und das resultierende SkuDetails-Objekt an BillingFlowParams.Builder.setSkuDetails() übergeben.

Codebeispiele findest du unter Google Play Billing Library verwenden.

Entwicklernutzlast wird unterstützt

Version 2.0 der Google Play Billing Library unterstützt jetzt Entwicklernutzlast – beliebige Strings, die an Käufe angehängt werden können. Sie können einen Entwicklernutzlastparameter an einen Kauf anhängen, aber nur, wenn der Kauf bestätigt oder genutzt wird. Dies unterscheidet sich von der Entwicklernutzlast in AIDL, bei der die Nutzlast beim Starten des Kaufvorgangs angegeben werden kann. Da Käufe jetzt von außerhalb deiner App initiiert werden können, sorgt diese Änderung dafür, dass du immer die Möglichkeit hast, Käufen eine Nutzlast hinzuzufügen.

Für den Zugriff auf die Nutzlast in der neuen Bibliothek enthalten Purchase-Objekte jetzt die Methode getDeveloperPayload().

Regelmäßige Angebote

Wenn du eine ermäßigte Artikelnummer anbietest, gibt Google Play jetzt den ursprünglichen Preis der Artikelnummer zurück, sodass du Nutzern zeigen kannst, dass sie einen Rabatt erhalten.

SkuDetails enthält zwei neue Methoden zum Abrufen des ursprünglichen Preises der Artikelnummer:

Ausstehende Transaktionen

Mit Version 2.0 der Google Play Billing Library müssen Sie Käufe unterstützen, bei denen zusätzliche Maßnahmen erforderlich sind, bevor die Berechtigung gewährt wird. Beispielsweise kann ein Nutzer Ihr In-App-Produkt in einem Geschäft gegen Bargeld kaufen. Dies bedeutet, dass die Transaktion außerhalb deiner App abgeschlossen wird. In diesem Szenario solltest du die Berechtigung erst gewähren, nachdem der Nutzer die Transaktion abgeschlossen hat.

Rufe beim Initialisieren deiner App enablePendingPurchases() auf, um ausstehende Käufe zu aktivieren.

Mit Purchase.getPurchaseState() kannst du feststellen, ob der Kaufstatus PURCHASED oder PENDING ist. Beachte, dass du die Berechtigung nur gewähren solltest, wenn der Status PURCHASED ist. So suchen Sie nach Statusaktualisierungen für Purchase:

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

Darüber hinaus 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 der neue Echtzeitbenachrichtigungstyp OneTimeProductNotification eingeführt. Dieser Benachrichtigungstyp enthält eine einzelne Nachricht mit dem Wert ONE_TIME_PRODUCT_PURCHASED oder ONE_TIME_PRODUCT_CANCELED. Diese Art von Benachrichtigung wird nur für Käufe gesendet, die mit verspäteten Zahlungsmitteln wie z. B. Bargeld in Verbindung stehen.

Achte bei der Bestätigung von ausstehenden Käufen darauf, dies nur zu bestätigen, 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 vorhandene Funktionen zu verdeutlichen.

ConsumeAsync verwenden

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

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

AbfrageKaufVerlaufAsync

Zur Vermeidung von Missverständnissen gibt queryPurchaseHistoryAsync() jetzt ein PurchaseHistoryRecord-Objekt anstelle eines Purchase-Objekts zurück. Das PurchaseHistoryRecord-Objekt ist dasselbe wie ein Purchase-Objekt, mit dem Unterschied, dass es nur die von queryPurchaseHistoryAsync() zurückgegebenen Werte widerspiegelt und nicht die Felder autoRenewing, orderId und packageName enthält. Mit den zurückgegebenen Daten hat sich nichts geändert – queryPurchaseHistoryAsync() gibt dieselben Daten zurück wie zuvor.

BillingResult-Rückgabewerte

Für APIs, für die bisher ein ganzzahliger BillingResponse-Wert zurückgegeben wurde, wird jetzt ein BillingResult-Objekt zurückgegeben. BillingResult enthält die Ganzzahl BillingResponse sowie einen Debug-String, mit dem Sie Fehler diagnostizieren können. Der Debug-String wird als en-US-Sprache verwendet und ist nicht für Endnutzer gedacht.

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 in Version 1.2.1 eingeführtes Threading-Problem wurde behoben. Hintergrundaufrufe blockieren den Hauptthread nicht mehr.

Sonstige Änderungen

  • Obwohl die Verwendung des Hauptthreads weiterhin empfohlen wird, können Sie die Google Play Billing Library jetzt über einen Hintergrundthread instanziieren.
  • Die Instanziierung wurde vollständig in den Hintergrundthread migriert, um die Wahrscheinlichkeit von ANR-Fehlern zu verringern.

Play Billing Library 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 die Tests zu vereinfachen.
  • SkuDetails-Objekte können die neue Methode getOriginalJson() verwenden.
  • Alle AIDL-Dienstaufrufe werden jetzt von Hintergrundthreads verarbeitet.

Fehlerkorrekturen

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

Version 1.2 der Google Play Billing Library (18.10.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 ist jetzt im Rahmen der Lizenzvereinbarung für das Android Software Development Kit lizenziert.
  • Die launchPriceChangeConfirmationFlow API wurde hinzugefügt, über die Nutzer aufgefordert werden, eine ausstehende Änderung an einem Abopreis zu überprüfen.
  • Der neue Zuteilungsmodus DEFERRED wird beim Upgrade oder Downgrade eines Abos eines Nutzers unterstützt.
  • In der Klasse BillingFlowParams wurde setSku() durch setSkuDetails() ersetzt.
  • Kleinere Fehlerkorrekturen und Codeoptimierungen.

Bestätigung der Preisänderung

Du kannst 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 deine App öffnen.

Erstelle mit dem skuDetails des Aboprodukts ein PriceChangeFlowParams-Objekt, um diese API zu verwenden, und rufe dann launchPriceChangeConfirmationFlow() auf. Implementieren Sie PriceChangeConfirmationListener, um das Ergebnis zu verarbeiten, wenn die Bestätigung der 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.
            }
        });

Bei der Bestätigung der 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 Zuteilungsmodus

Beim Upgrade oder Downgrade des Abos eines Nutzers können Sie den neuen Zuteilungsmodus DEFERRED verwenden. In diesem Modus wird das Abo des Nutzers bei der nächsten Verlängerung aktualisiert. Weitere Informationen zum Festlegen dieses Zuteilungsmodus finden Sie unter Zuteilungsmodus festlegen.

Neue Methode zum Festlegen von SKU-Details

In der Klasse BillingFlowParams wurde die Methode setSku() eingestellt. Diese Änderung dient dazu, den Google Play Billing-Ablauf zu optimieren.

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

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

  • Unterstützung zur Angabe eines Zuteilungsmodus in BillingFlowParams beim Upgrade/Downgrade eines vorhandenen Abos wurde hinzugefügt.
  • Das boolesche Flag replaceSkusProration in BillingFlowParams wird nicht mehr unterstützt. Verwende stattdessen replaceSkusProrationMode.
  • launchBillingFlow() löst jetzt einen Callback für fehlgeschlagene Antworten aus.

Änderungen des Verhaltens

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

Entwickler können replaceSkusProrationMode in der Klasse BillingFlowParams festlegen

Ein ProrationMode bietet weitere Details zur Art des Anteils 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();

Derzeit unterstützt Google Play die folgenden Zuteilungsmodi:

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

Hinweis: Diese Option ist nur für das Aboupgrade verfügbar.

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

replaceSkusProration wird im Kurs BillingFlowParams nicht mehr unterstützt

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

launchBillingFlow() löst jetzt einen Callback für fehlgeschlagene Antworten aus

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

Fehlerkorrekturen

  • Wird zu Beginn asynchroner Methoden ordnungsgemäß beendet, wenn der Dienst getrennt wird.
  • Builder-Parameterobjekte mutieren keine erstellten Objekte mehr.
  • Problem 68087141: launchBillingFlow() löst jetzt einen Callback für fehlgeschlagene Antworten aus.

Version 1.0 der Google Play Billing Library (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. Die Berechtigung com.android.vending.BILLING muss nicht mehr im Android-Manifest hinzugefügt werden.
  • Der Klasse BillingClient.Builder wurde ein neuer Builder hinzugefügt.
  • Einführung des Builder-Musters für die Klasse SkuDetailsParams, das für Methoden zum Abfragen von SKUs verwendet wird.
  • Aus Konsistenzgründen wurden mehrere API-Methoden aktualisiert (dieselben Namen und Reihenfolge der Rückgabeargumente).

Änderungen des Verhaltens

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

BillingClient.Builder-Klasse

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 mithilfe einer BillingFlowParams-Klasse aufgerufen.

Um den Abrechnungsablauf für einen Kauf oder ein Abo zu starten, empfängt die Methode launchBillingFlow() eine BillingFlowParams-Instanz, 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, verfügbare Produkte abzufragen

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

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 als Ergebniscode und einer Liste von SkuDetails-Objekten anstelle der vorherigen Wrapper-Klasse zurückgegeben, um es dir einfacher zu machen und in unserer API einheitlich zu sein:

Kotlin

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

Java

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

Parameterreihenfolge in Methode onConsumeResponse() geändert

Die Reihenfolge der Argumente für onConsumeResponse aus der ConsumeResponseListener-Schnittstelle wurde geändert, damit sie in unserer API einheitlich ist:

Kotlin

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

Java

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

Entpacktes PurchaseResult-Objekt

PurchaseResult wurde entpackt, um in unserer API einheitlich zu sein:

Kotlin

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

Java

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

Fehlerkorrekturen

Entwicklervorschau 1, Version 1 (12.06.2017, Ankündigung)

Die Entwicklervorschau wurde veröffentlicht, um den Entwicklungsprozess für die Abrechnung zu vereinfachen. So können sich Entwickler auf die Implementierung von Logik speziell für die Android-App konzentrieren, z. B. die Anwendungsarchitektur und die Navigationsstruktur.

Die Bibliothek enthält mehrere praktische Klassen und Funktionen, die Sie beim Einbinden Ihrer Android-Apps in die Google Play Billing API verwenden können. Die Bibliothek bietet außerdem eine Abstraktionsebene über dem AIDL-Dienst (Android Interface Definition Language), sodass Entwickler die Schnittstelle zwischen der App und der Google Play Billing API einfacher definieren können.