Versionshinweise zur Google Play Billing Library

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

Google Play Billing Library 9.1.0 Release (18.06.2026)

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

Zusammenfassung der Änderungen

Google Play Billing Library 9.0.0 Release (19.05.2026)

Version 9.0.0 der Google Play Billing Library und der Kotlin-Erweiterungen ist jetzt verfügbar. Wenn Sie von früheren Versionen der PBL migrieren möchten, lesen Sie die Migrationsanleitung für PBL 9.

Zusammenfassung der Änderungen

  • Aktualisierte Fehlercodes für blockierte Google Play Store-Aktivitäten: Die Fehlercodes für blockierte Google Play Store-Apps wurden aktualisiert. In Fällen, in denen die Google Play Store App vom System blockiert wird (z. B. im vom OEM angepassten Kindermodus), hat sich der Antwortcode von ERROR zu BILLING_UNAVAILABLE geändert. Außerdem wird in solchen Fällen im BillingResult jetzt die Debug-Meldung Play Store is blocked angezeigt.

  • Aktualisierung der Null-Zulässigkeit für die vom Entwickler bereitgestellte Abrechnung: Die Methode DeveloperProvidedBillingDetails.getLinkUri() wurde aktualisiert und ist jetzt @Nullable. Diese Änderung unterstützt Szenarien, in denen der direkte Link-URI für externe Zahlungen während der Zahlungsauswahl nicht verfügbar ist.

    Damit diese Änderung sicher verarbeitet wird, muss Ihr Integrationscode sowohl null- als auch leere Stringwerte ("") aus der Methode DeveloperProvidedBillingDetails.getLinkUri() verarbeiten, bevor Browser-Intents geparst oder gestartet werden.

  • targetSdkVersion wurde auf 35 aktualisiert.

  • Sie können jetzt In-App-Messaging verwenden, um Nutzer über eine bevorstehende Preiserhöhung unter Vorbehalt des Nutzerwiderrufs zu informieren. So können Nutzer die Preiserhöhung bestätigen, ohne die App zu verlassen. Die Nachricht für eine ausstehende Opt-in-Preiserhöhung wird ab dem ersten Tag angezeigt, an dem der Nutzer die Preiserhöhung akzeptieren kann. Die Nachricht wird maximal einmal alle 7 Tage angezeigt.

Google Play Billing Library 8.3.0 Release (23.12.2025)

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

Zusammenfassung der Änderungen

Google Play Billing Library 8.2.1 Release (15.12.2025)

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

Fehlerkorrekturen

Google Play Billing Library 8.2.0 Release (09.12.2025)

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

Zusammenfassung der Änderungen

Google Play Billing Library 8.1.0 Release (06.11.2025)

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

Zusammenfassung der Änderungen

  • Gesperrte Abos

    Der Methode BillingClient.queryPurchasesAsync() wurde ein neuer Parameter hinzugefügt, um gesperrte Abos bei der Abfrage von Abos einzubeziehen. Gesperrte Abos werden dem Nutzer weiterhin zugeschrieben, sind aber nicht aktiv, weil der Nutzer das Abo pausiert hat oder seine Zahlungsmethode für die Verlängerung abgelehnt wurde.

    Das im Listener zurückgegebene Purchase-Objekt gibt für alle gesperrten Abos isSuspended() = true zurück. In diesem Fall solltest du keinen Zugriff auf das gekaufte Abo gewähren, sondern den Nutzer zum Abocenter weiterleiten, wo er seine Zahlungsmethoden verwalten oder den Pausierungsstatus aufheben kann, um sein Abo wieder zu aktivieren.

  • Änderungen bei Abos:

    • Das Objekt BillingFlowParams.ProductDetailsParams enthält jetzt die Methode setSubscriptionProductReplacementParams(), mit der Sie Informationen zum Ersetzen auf Produktebene angeben können.

    • Das SubscriptionProductReplacementParams-Objekt hat zwei Setter-Methoden:

      • setOldProductId: Das alte Produkt, das durch das Produkt im aktuellen ProductDetails ersetzt werden muss.
      • setReplacementMode: Dies ist der Ersetzungsmodus auf Artikelebene. Die Modi sind im Wesentlichen mit „SubscriptionUpdateParams“ identisch, die Wertzuordnung wurde jedoch aktualisiert. Es wird ein neuer Ersetzungsmodus KEEP_EXISTING eingeführt, mit dem Sie den vorhandenen Zahlungsplan für einen Artikel unverändert beibehalten können.
    • SubscriptionUpdateParams setSubscriptionReplacementMode wird eingestellt. Verwenden Sie stattdessen SubscriptionProductReplacementParams.setReplacementMode.

  • minSdkVersion wurde auf 23 aktualisiert.

  • Vorbestellungs-APIs für Einmalkaufprodukte aktiviert

    Die ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() API, mit der die Vorbestellungsdetails abgerufen werden, ist jetzt verfügbar.

  • Die Google Play Billing Library unterstützt jetzt Kotlin-Version 2.2.0.

Google Play Billing Library 8.0.0 Release (30.06.2025)

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

Zusammenfassung der Änderungen

  • In-App-Artikel werden jetzt als Einmalkaufprodukte bezeichnet.

  • Mehrere Kaufoptionen und Angebote für Einmalkaufprodukte.

    Sie können jetzt mehrere Kaufoptionen und Angebote für Ihre Einmalkaufprodukte festlegen. So kannst du deine Produkte flexibler verkaufen und einfacher verwalten.

  • Die Methode queryProductDetailsAsync() wurde verbessert.

    Vor PBL 8.0.0 wurden von der Methode queryProductDetailsAsync() keine Produkte zurückgegeben, die nicht abgerufen werden konnten. Das kann daran liegen, dass das Produkt nicht gefunden wurde oder für den Nutzer keine Angebote verfügbar sind. In PBL 8.0.0 werden nicht abgerufene Produkte mit einem neuen Statuscode auf Produktebene zurückgegeben, der Informationen zu nicht abgerufenen Produkten enthält. Beachten Sie, dass sich die Signatur von ProductDetailsResponseListener.onProductDetailsResponse() geändert hat, was Änderungen in Ihrer App erfordert. Weitere Informationen finden Sie unter Ergebnis verarbeiten.

  • Automatische Wiederherstellung der Verbindung zum Dienst.

    Mit dem neuen Builder-Parameter BillingClient.Builder.enableAutoServiceReconnection() können Entwickler die automatische Wiederherstellung der Dienstverbindung aktivieren. Dadurch wird die Verbindungsverwaltung vereinfacht, da die Wiederherstellung der Verbindung zum Play Billing-Dienst automatisch erfolgt und startConnection() im Falle einer Dienstunterbrechung nicht manuell aufgerufen werden muss. Weitere Informationen finden Sie unter Verbindung automatisch wiederherstellen.

  • Unterantwortcodes für die Methode launchBillingFlow().

    Das von launchBillingFlow() zurückgegebene BillingResult enthält jetzt ein Feld für den Unterantwortcode. Dieses Feld wird nur in einigen Fällen ausgefüllt, um einen genaueren Grund für den Fehler anzugeben. Das Feld für die Unterantwort kann die folgenden Werte haben:

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS: Wird zurückgegeben, wenn das Guthaben des Nutzers geringer ist als der Preis des Artikels, den er kaufen möchte.
    • USER_INELIGIBLE: Wird zurückgegeben, wenn der Nutzer die konfigurierten Teilnahmevoraussetzungen für ein Aboangebot nicht erfüllt.
    • NO_APPLICABLE_SUB_RESPONSE_CODE: Der Standardwert, der zurückgegeben wird, wenn kein anderer Unterantwortcode zutrifft.
  • Die Methode queryPurchaseHistory() wurde entfernt.

    Die Methode queryPurchaseHistory(), die zuvor als veraltet markiert wurde, wurde jetzt entfernt. Weitere Informationen zu alternativen APIs finden Sie unter Bisherige Käufe abfragen.

  • Die Methode querySkuDetailsAsync() wurde entfernt.

    Die Methode querySkuDetailsAsync(), die zuvor als veraltet markiert wurde, wurde jetzt entfernt. Verwende stattdessen queryProductDetailsAsync.

  • Die Methode BillingClient.Builder.enablePendingPurchases() wurde entfernt.

    Die Methode enablePendingPurchases() ohne Parameter, die zuvor als verworfen markiert wurde, wurde jetzt entfernt. Verwenden Sie stattdessen enablePendingPurchases(PendingPurchaseParams params). Beachten Sie, dass die verworfene enablePendingPurchases() funktional mit enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) identisch ist.

  • Die überladene queryPurchasesAsync()-Methode, die einen skuType akzeptiert, wurde entfernt.

    Die Methode queryPurchasesAsync(String skuType, PurchasesResponseListener listener), die zuvor als veraltet markiert wurde, wurde jetzt entfernt. Alternativ können Sie auch queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener) verwenden.

Google Play Billing Library 7.1.1 Release (03.10.2024)

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

Fehlerkorrekturen

Google Play Billing Library 7.1.0 Release (19.09.2024)

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

Zusammenfassung der Änderungen

  • Verbesserte Threadsicherheit im Zusammenhang mit dem Verbindungsstatus und der Verwaltung.
  • Es wurden teilweise Änderungen zum Testen von BillingResult-Antwortcodes eingeführt, die in der Play Billing Library 7.1.1 vollständig veröffentlicht wurden. Wenn Sie Ihre Integration mit dieser Funktion testen möchten, müssen Sie ein Upgrade auf die Play Billing Library 7.1.1 durchführen. Es gibt einen Fehler, der sich nur auf Anwendungen auswirkt, bei denen 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 Release (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 Release (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 Release (06.03.2024)

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

Zusammenfassung der Änderungen

Google Play Billing Library 6.1.0 Release (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 Release (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 Release (10.05.2023)

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

Zusammenfassung der Änderungen

  • Neues Enum ReplacementMode hinzugefügt, um ProrationMode zu ersetzen.

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

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

    Bisher wurde die Bestell-ID immer erstellt, auch wenn der Kauf noch ausstand. Ab Version 6.0.0 wird für ausstehende Käufe keine Bestell-ID erstellt. Für diese Käufe wird die Bestell-ID erst dann ausgefüllt, wenn der Kauf in den Status PURCHASED übergeht.

  • Die Methoden queryPurchases und launchPriceConfirmationFlow wurden entfernt.

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

  • Neuer Netzwerkfehler-Antwortcode hinzugefügt.

    Ab PBL-Version 6.0.0 wurde ein neuer Antwortcode für Netzwerkfehler hinzugefügt: NETWORK_ERROR. 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 aktualisiert.

    Ab PBL-Version 6.0.0 werden Fehler aufgrund von Zeitüberschreitungen bei der Verarbeitung als SERVICE_UNAVAILABLE statt wie bisher als SERVICE_TIMEOUT zurückgegeben.

    In früheren Versionen von PBL ä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 der PBL wird dieser Code weiterhin zurückgegeben.

  • Zusätzliches Logging hinzugefügt.

    Die Play Billing Library 6 enthält zusätzliche Logging-Funktionen, die Einblicke in die API-Nutzung (z. B. Erfolg und Fehler) und Probleme mit der Dienstverbindung bieten. Diese Informationen werden verwendet, um die Leistung der Play Billing Library zu verbessern und Fehler besser zu beheben.

Google Play Billing Library 5.2.1 Release (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 Release (06.04.2023)

Version 5.2.0 der Google Play Billing Library und Kotlin-Erweiterungen sind 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 sind 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 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 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.
  • Methode setIsOfferPersonalized() für die Offenlegungspflichten 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 zuvor verworfen und durch „queryPurchasesAsync“ ersetzt, die in der Google Play Billing Library 4.0.0 eingeführt wurde.
  • launchPriceChangeFlow wurde eingestellt 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. Dies wurde zuvor beim Instanziieren eines Kaufvorgangs verwendet. In früheren Versionen wurden Nutzer mit dieser Methode weitergeleitet, um den Kauf auf ihrem Android-Gerät abzuschließen. Nachdem du diese Methode entfernt hast, schließen Nutzer den Kauf über den Standard-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 Release (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 Release (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 für Java und Kotlin

  • Speicherleck beim Aufrufen von endConnection() behoben.
  • Problem behoben, das auftrat, wenn die Google Play Billing Library von Apps verwendet wurde, die den Startmodus „Single Task“ verwenden. Ein onPurchasesUpdated()-Callback wird ausgelöst, wenn eine App über den Android Launcher fortgesetzt wird und das Abrechnungsdialogfeld vor dem Pausieren sichtbar war.

Unity-Fehlerkorrekturen

  • Aktualisieren Sie auf die Java-Version 3.0.3, um das Speicherleck zu beheben und das Problem zu lösen, das Käufe verhindert, wenn eine App über den Android Launcher fortgesetzt wird und das Abrechnungsdialogfeld vor dem Sperren sichtbar war.

Google Play Billing Library 3.0.2 Release (24.11.2020)

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

Fehlerkorrekturen

  • Ein Fehler in der Kotlin-Erweiterung wurde behoben, bei dem die Koroutine mit dem Fehler „Bereits fortgesetzt“ fehlschlägt.
  • Nicht aufgelöste Verweise wurden behoben, wenn die Kotlin-Erweiterung mit der kotlinx.coroutines-Bibliothek ab Version 1.4 verwendet wird.

Google Play Billing Library 3.0.1 Release (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, bei dem PurchasesUpdatedListener möglicherweise nicht mit dem Kaufergebnis aufgerufen wurde, wenn die App während des Abrechnungsvorgangs beendet und wiederhergestellt wurde.

Google Play Billing Library 3.0 Release (08.06.2020)

Version 3.0.0 der Google Play Billing Library, der Kotlin-Erweiterung und des Unity-Plug-ins 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 Methoden für Entwicklernutzlasten 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 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 ob zusätzliche Parameter vorhanden wären, auch wenn keine zusätzlichen Parameter festgelegt waren.

Google Play Billing Library 2.2.1 Release (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.

Google Play Billing Library 2.2.0 Release und Unity-Unterstützung (23.03.2020)

Version 2.2.0 der Google Play Billing bietet Funktionen, mit denen Entwickler sicherstellen können, dass Käufe dem richtigen Nutzer zugeordnet werden. Diese Änderungen ersetzen die Notwendigkeit, benutzerdefinierte Lösungen auf der Grundlage von Entwicklernutzlasten zu erstellen. Im Rahmen dieses Updates wurde die Funktion „Entwicklernutzlast“ 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

Zusätzlich zu 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 nachfolgende 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

Google Play Billing Library 2.1.0 Release und Kotlin Extension 2.1.0 Release (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 Kotlin-Nutzung mit besserer Null-Sicherheit 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) eingestellt und durch setOldSku(String oldSku, String purchaseToken) ersetzt, um Mehrdeutigkeiten zu vermeiden, wenn mehrere Konten auf dem Gerät dieselbe SKU besitzen.

Google Play Billing Library 2.0.3 Release (05.08.2019)

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

Fehlerkorrekturen

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

Google Play Billing Library 2.0.2 Release (08.07.2019)

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

Google Play Billing Library 2.0.1 Release (06.06.2019)

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

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, durch den Debug-Nachrichten in einigen Fällen als null zurückgegeben wurden.
  • Ein potenzielles Problem mit einem Speicherleck 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 Ihrer App (In-App) oder außerhalb Ihrer App (Out-of-App). Damit Google Play unabhängig davon, wo der Nutzer dein Produkt kauft, ein einheitliches Kauferlebnis bieten kann, musst du alle Käufe, die über die Google Play Billing Library eingehen, 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 das dreitägige Zeitfenster, wenn der Kauf den Status PURCHASED erreicht hat. Es gilt nicht, solange der Kauf den Status PENDING hat.

Bei Abos musst du jeden Kauf bestätigen, der ein neues Kauf-Token hat. Das bedeutet, dass alle Erstkäufe, Aboänderungen und Neuanmeldungen bestätigt werden müssen, nachfolgende Verlängerungen jedoch nicht. Wenn du herausfinden möchtest, ob ein Kauf bestätigt werden muss, kannst du das Bestätigungsfeld im Kauf prüfen.

Das Objekt Purchase 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 für Purchases.products und Purchases.subscriptions. Bevor du einen Kauf bestätigst, solltest du mit diesen Methoden prüfen, ob der Kauf bereits bestätigt wurde.

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

  • Verwenden Sie für Verbrauchsprodukte consumeAsync() aus der Client API.
  • Verwende für Produkte, die nicht verbraucht werden, acknowledgePurchase() aus der Client API.
  • In der Server API ist außerdem eine neue acknowledge()-Methode verfügbar.

BillingFlowParams.setSku() wurde entfernt

Die zuvor verworfene Methode BillingFlowParams#setSku() wurde in diesem Release entfernt. Bevor du Produkte in einem Kaufvorgang renderst, musst du 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 bietet Unterstützung für Entwicklernutzlasten – beliebige Strings, die an Käufe angehängt werden können. Du kannst einen Parameter für die Entwicklernutzlast an einen Kauf anhängen, aber nur, wenn der Kauf bestätigt oder verbraucht wurde. Dies unterscheidet sich von der Entwicklernutzlast in AIDL, bei der die Nutzlast beim Starten des Kaufvorgangs angegeben werden konnte. Da Käufe jetzt 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 eine getDeveloperPayload()-Methode.

Konsistente Angebote

Wenn ihr eine SKU mit Rabatt anbietet, gibt Google Play jetzt den ursprünglichen Preis der SKU zurück, damit ihr Nutzern zeigen könnt, dass sie einen Rabatt erhalten.

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

Ausstehende Transaktionen

In Version 2.0 der Google Play Billing Library musst du Käufe unterstützen, bei denen zusätzliche Maßnahmen erforderlich sind, bevor die Berechtigung gewährt wird. Beispielsweise könnte ein Nutzer dein In-App-Produkt in einem Geschäft bar bezahlen. Das bedeutet, dass die Transaktion außerhalb Ihrer App abgeschlossen wird. In diesem Szenario sollten Sie die Berechtigung erst erteilen, nachdem der Nutzer die Transaktion abgeschlossen hat.

Wenn du ausstehende Käufe aktivieren möchtest, rufe bei der Initialisierung deiner App enablePendingPurchases() auf.

Verwenden Sie Purchase.getPurchaseState(), um festzustellen, ob der Kaufstatus PURCHASED oder PENDING ist. Beachten Sie, dass Sie die Berechtigung nur gewähren sollten, wenn der Status PURCHASED lautet. So können Sie nach Purchase-Statusaktualisierungen suchen:

  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.

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 Typ von Echtzeit-Entwicklerbenachrichtigungen 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 Zahlungsmethoden wie Bargeld verknüpft sind.

Achte beim Bestätigen ausstehender Käufe darauf, dass du nur Käufe mit dem Status PURCHASED und nicht mit dem Status PENDING bestätigst.

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

consumeAsync() akzeptiert jetzt ein ConsumeParams-Objekt anstelle eines purchaseToken-Objekts. ConsumeParams enthält die purchaseToken sowie eine optionale Entwicklernutzlast.

Die vorherige Version von consumeAsync() wurde in dieser Version entfernt.

queryPurchaseHistoryAsync

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

BillingResult-Rückgabewerte

APIs, die zuvor einen Ganzzahlwert 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 das Gebietsschema „en-US“ und ist nicht für Endnutzer gedacht.

Fehlerkorrekturen

Google Play Billing Library 1.2.2 Release (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 Threading-Problem, das in Version 1.2.1 eingeführt wurde, 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 ANRs zu verringern.

Play Billing Library 1.2.1 Release (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

  • Öffentliche Konstruktoren für PurchasesResult und SkuDetailsResult wurden hinzugefügt, um das Testen zu vereinfachen.
  • SkuDetails-Objekte können eine neue Methode verwenden: 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 Release (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 unter der Lizenzvereinbarung für das Android Software Development Kit lizenziert.
  • Die launchPriceChangeConfirmationFlow API wurde hinzugefügt, mit der Nutzer aufgefordert werden, eine ausstehende Änderung des Abopreises zu prüfen.
  • Unterstützung für einen neuen anteiligen Modus, DEFERRED, beim Up- oder Downgrade des Abos eines Nutzers hinzugefügt.
  • 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.

Wenn du diese API verwenden möchtest, erstelle ein PriceChangeFlowParams-Objekt mit der skuDetails des Aboprodukts und rufe dann launchPriceChangeConfirmationFlow() auf. Implementiere PriceChangeConfirmationListener, um das Ergebnis zu verarbeiten, wenn der Bestätigungsablauf 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ätigungsablauf für Preisänderungen 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 anteilige Abo-Übertragung

Wenn Sie das Abo eines Nutzers upgraden oder downgraden, können Sie einen neuen anteiligen Modus verwenden: DEFERRED. In diesem Modus wird das Abo des Nutzers bei der nächsten Verlängerung aktualisiert. Weitere Informationen zum Festlegen dieses anteiligen Modus finden Sie unter Anteiligen Modus festlegen.

Neue Methode zum Festlegen von SKU-Details

In der Klasse BillingFlowParams wurde die Methode setSku() verworfen. Diese Änderung dient der Optimierung des Google Play-Abrechnungsvorgangs.

Wenn Sie eine neue Instanz von BillingFlowParams in Ihrem In-App-Abrechnungsclient erstellen, empfehlen wir, stattdessen direkt mit dem JSON-Objekt zu arbeiten und setSkuDetails() zu 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 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

  • Es wurde Unterstützung für die Angabe eines anteiligen Modus in BillingFlowParams beim Upgrade/Downgrade eines bestehenden Abos hinzugefügt.
  • Das boolesche Flag replaceSkusProration in BillingFlowParams wird nicht mehr unterstützt. Verwenden Sie stattdessen replaceSkusProrationMode.
  • launchBillingFlow() löst jetzt einen Callback 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.

Ein ProrationMode enthält weitere Details zur Art der anteiligen Berechnung 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 die folgenden anteiligen Modi:

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

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

IMMEDIATE_WITHOUT_PRORATION Der Ersatz wird sofort wirksam und der neue Preis wird beim nächsten Abrechnungszeitpunkt in Rechnung gestellt. Der Abrechnungszeitraum bleibt gleich.

replaceSkusProration wird in der Klasse BillingFlowParams nicht mehr unterstützt.

Entwickler konnten früher ein boolesches Flag festlegen, um für eine Anfrage zum Upgrade eines Abos einen anteiligen Betrag zu berechnen. Da wir ProrationMode unterstützen, das detailliertere Anweisungen zur anteiligen Berechnung 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 Callback PurhcasesUpdatedListener aus und gibt asynchron ein BillingResponse zurück. Der synchrone Rückgabewert von BillingResponse wird ebenfalls beibehalten.

Fehlerkorrekturen

  • Asynchrone Methoden werden ordnungsgemäß vorzeitig beendet, wenn die Verbindung zum Dienst getrennt wird.
  • Builder-Parameterobjekte mutieren keine erstellten Objekte mehr.
  • Problem 68087141: launchBillingFlow() löst jetzt einen Callback für fehlgeschlagene Antworten aus.

Google Play Billing Library 1.0 Release (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.
  • Builder-Muster für die Klasse SkuDetailsParams eingeführt, das für Methoden zum Abfragen von SKUs verwendet werden soll.
  • Mehrere API-Methoden wurden aus Konsistenzgründen aktualisiert (dieselben Namen und dieselbe Reihenfolge der Rückgabeargumente).

Geändertes Verhalten

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

Um den Abrechnungsvorgang für einen Kauf oder ein Abo zu starten, empfängt die Methode launchBillingFlow() eine BillingFlowParams-Instanz, die mit für die Anfrage spezifischen Parametern 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 zum Abfragen verfügbarer Produkte

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. Das ist praktischer und sorgt für Konsistenz in unserer API:

Kotlin

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

Java

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

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

Die Reihenfolge der Argumente für onConsumeResponse aus der Schnittstelle ConsumeResponseListener wurde geändert, um in unserer 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 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 (12.06.2017, Ankündigung)

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

Die Bibliothek enthält mehrere praktische Klassen und Funktionen, die Sie bei der Integration 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-Definitionssprache), sodass Entwickler die Schnittstelle zwischen der App und der Google Play Billing API einfacher definieren können.