Versionshinweise zur Google Play Billing Library

Dieses Dokument enthält Versionshinweise zur Google Play Billing Library.

Google Play Billing Library 8.1.0 (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 bei der Abfrage von Abos auch gesperrte Abos einzubeziehen. Gesperrte Abos werden dem Nutzer weiterhin zugeordnet, sind aber nicht aktiv, weil der Nutzer das Abo pausiert hat oder die Zahlungsmethode für die Verlängerung abgelehnt wurde.

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

  • Änderungen bei Abos:

    • Das BillingFlowParams.ProductDetailsParams-Objekt hat jetzt die Methode setSubscriptionProductReplacementParams(), mit der Sie Ersetzungsinformationen 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 Ersatzmodus auf Artikelebene. Die Modi sind im Wesentlichen dieselben wie SubscriptionUpdateParams, aber die Wertzuordnung wurde aktualisiert. Es wird ein neuer Ersatzmodus 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 auf 23 aktualisiert.

  • Vorbestellungs-APIs für Einmalkaufprodukte aktiviert

    Die ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() API, mit der die Vorbestelldetails abgerufen werden, kann jetzt verwendet werden.

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

Google Play Billing Library 8.0.0 (30.06.2025)

Version 8.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind 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 haben. So können Sie Ihre Produkte flexibler verkaufen und einfacher verwalten.

  • Die Methode queryProductDetailsAsync() wurde verbessert.

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

  • Automatische Wiederverbindung mit dem Dienst.

    Mit dem neuen Builder-Parameter BillingClient.Builder.enableAutoServiceReconnection() können Entwickler die automatische Wiederverbindung mit dem Dienst aktivieren. Dadurch wird die Verbindungsverwaltung vereinfacht, da Wiederverbindungen mit dem Play-Abrechnungsdienst automatisch erfolgen. Außerdem ist es nicht mehr erforderlich, startConnection() manuell aufzurufen, wenn die Verbindung zum Dienst getrennt wird. Weitere Informationen finden Sie unter Verbindung automatisch wiederherstellen.

  • Untergeordnete Antwortcodes für die Methode launchBillingFlow().

    Das von launchBillingFlow() zurückgegebene BillingResult enthält jetzt ein Unterantwortcodefeld. Dieses Feld wird nur in einigen Fällen ausgefüllt, um einen genaueren Grund für den Fehler anzugeben. Mit PBL 8.0.0 wird der Untercode PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS zurückgegeben, wenn das Guthaben des Nutzers geringer ist als der Preis des Artikels, den er kaufen möchte.

  • Die Methode queryPurchaseHistory() wurde entfernt.

    Die Methode queryPurchaseHistory(), die zuvor als veraltet markiert war, wurde jetzt entfernt. Weitere Informationen dazu, welche alternativen APIs Sie stattdessen verwenden können, finden Sie unter Kaufhistorie abfragen.

  • Die Methode querySkuDetailsAsync() wurde entfernt.

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

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

    Die Methode enablePendingPurchases() ohne Parameter, die zuvor als veraltet gekennzeichnet war, wurde jetzt entfernt. Verwenden Sie stattdessen enablePendingPurchases(PendingPurchaseParams params). Die eingestellte Funktion enablePendingPurchases() ist funktional mit enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) identisch.

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

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

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

  • Ein Fehler in Play Billing Library 7.1.0 im Zusammenhang mit Antwortcodes für Tests wurde behoben.BillingResult

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 Threadsicherheit in Bezug auf Verbindungsstatus und ‑verwaltung.
  • Es wurden teilweise Änderungen für das Testen von [BillingResult][billing-result]-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 Apps mit [aktivierten Abrechnungsüberschreibungen][enable-billing-overrides-testing] auswirkt und die reguläre Nutzung nicht beeinträchtigt. Weitere Informationen finden Sie unter BillingResult-Antwortcodes testen. [billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing

Google Play Billing Library 7.0.0 veröffentlicht (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

Veröffentlichung der 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 ReplacementMode-Enum hinzugefügt, um ProrationMode zu ersetzen.

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

  • Die Bestell-ID für Käufe von PENDING wurde 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 ausgefüllt, wenn der Kauf in den Status PURCHASED verschoben wird.

  • Die Methoden queryPurchases und launchPriceConfirmationFlow wurden entfernt.

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

  • Neuer Antwortcode für Netzwerkfehler hinzugefügt.

    Ab PBL-Version 6.0.0 wurde ein neuer Netzwerkfehler-Antwortcode hinzugefügt: NETWORK_ERROR. Dieser Code wird zurückgegeben, wenn ein Fehler aufgrund eines Problems mit der Netzwerkverbindung 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 anstelle des aktuellen SERVICE_TIMEOUT zurückgegeben.

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

  • Entfernt: SERVICE_TIMEOUT.

    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 Protokollierung, die Einblicke in die API-Nutzung (z. B. Erfolg und Fehler) und Probleme mit der Dienstverbindung bietet. Diese Informationen werden verwendet, um die Leistung der Play Billing Library zu verbessern und einen besseren Support für Fehler zu bieten.

Veröffentlichung der 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 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

  • Es wurde ein neues Modell für Abos eingeführt, einschließlich neuer Einheiten, mit denen Sie mehrere Angebote für ein einzelnes Abo-Produkt erstellen können. Weitere Informationen finden Sie in der Migrationsanleitung.
  • BillingClient.queryProductDetailsAsync() wurde hinzugefügt, um BillingClient.querySkuDetailsAsync() zu ersetzen.
  • Die setIsOfferPersonalized()-Methode wurde 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.
  • Die Methode queryPurchases() wurde entfernt. Sie war bereits eingestellt und wurde durch „queryPurchasesAsync“ ersetzt, das in Version 4.0.0 der Google Play Billing Library eingeführt wurde.
  • launchPriceChangeFlow wurde verworfen und wird in einer zukünftigen Version entfernt. Weitere Informationen zu Alternativen finden Sie unter Ablauf zur Bestätigung von Preisänderungen starten.
  • Entfernt wurde setVrPurchaseFlow(), das zuvor beim Instanziieren eines Kaufvorgangs verwendet wurde. In früheren Versionen wurde der Nutzer mit dieser Methode weitergeleitet, um den Kauf auf seinem Android-Gerät abzuschließen. Nachdem Sie diese Methode entfernt haben, schließen Nutzer den Kauf über den Standardkaufvorgang ab.

Veröffentlichung der 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, der Kotlin-Erweiterung und des Unity-Plug-ins ist jetzt verfügbar.

Fehlerkorrekturen für Java und Kotlin

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

Unity-Fehlerkorrekturen

  • Aktualisieren Sie auf Java-Version 3.0.3, um das Speicherleck zu beheben und das Problem zu lösen, das Käufe verhinderte, wenn eine App über den Android-Launcher fortgesetzt wurde und der Abrechnungsdialog vor dem Anhalten sichtbar war.

Google Play Billing Library 3.0.2 (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 Coroutine mit dem Fehler „Already resumed“ (Bereits fortgesetzt) fehlgeschlagen ist.
  • Es wurden nicht aufgelöste Referenzen behoben, wenn die Kotlin-Erweiterung mit der kotlinx.coroutines-Bibliotheksversion 1.4 oder höher verwendet wird.

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, bei dem PurchasesUpdatedListener möglicherweise nicht mit dem Kaufergebnis aufgerufen wurde, wenn die App während des Abrechnungsablaufs beendet und wiederhergestellt wurde.

Veröffentlichung der Google Play Billing Library 3.0 (08.06.2020)

Version 3.0.0 der Google Play Billing Library, der Kotlin-Erweiterung und des Unity-Plug-ins ist jetzt verfügbar.

Zusammenfassung der Änderungen

  • Unterstützung für Artikelnummern für Prämien entfernt.
  • Die Parameter ChildDirected und UnderAgeOfConsent wurden entfernt.
  • Veraltete Methoden für Entwickler-Payloads 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.
  • Es wurden Nullable-Annotationen hinzugefügt.

Fehlerkorrekturen

  • SkuDetails.getIntroductoryPriceCycles() gibt jetzt int anstelle von String zurück.
  • Ein Fehler wurde behoben, bei dem der Abrechnungsablauf so behandelt wurde, als ob er zusätzliche Parameter hätte, auch wenn keine zusätzlichen Parameter festgelegt waren.

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 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 ist es nicht mehr erforderlich, benutzerdefinierte Lösungen auf Grundlage der Entwickler-Payload zu erstellen. Im Rahmen dieser Aktualisierung wurde die Funktion für Entwickler-Payloads eingestellt und wird in einer zukünftigen Version entfernt. Weitere Informationen, einschließlich empfohlener Alternativen, finden Sie unter Entwickler-Payload.

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 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 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.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 mit besserer Null-Sicherheit und Coroutinen. 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 zu verdeutlichen, wann mehrere Konten auf dem Gerät dieselbe SKU 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 wird dadurch nicht geändert.

Veröffentlichung der 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, bei dem Debugging-Nachrichten in einigen Fällen als null zurückgegeben wurden.
  • Ein potenzielles Speicherleck wurde behoben.

Veröffentlichung der Google Play Billing Library 2.0 (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 in Ihrer App (In-App) oder außerhalb Ihrer App (Out-of-App). Damit Google Play ein einheitliches Einkaufserlebnis bietet, unabhängig davon, wo der Nutzer Ihr Produkt kauft, müssen Sie alle Käufe, die über die Google Play Billing Library eingehen, so schnell wie möglich nach der Gewährung des Anspruchs für den Nutzer bestätigen. Wenn Sie einen Kauf nicht innerhalb von drei Tagen bestätigen, erhält der Nutzer automatisch eine Erstattung und Google Play widerruft den Kauf. Bei ausstehenden Transaktionen (neu in Version 2.0) beginnt das Dreitageszeitfenster, wenn der Kauf in den Status PURCHASED wechselt. Es gilt nicht, solange sich der Kauf im Status PENDING befindet.

Bei Abos müssen Sie jeden Kauf mit einem neuen Kauf-Token bestätigen. Das bedeutet, dass alle Erstkäufe, Tarifänderungen und erneuten Anmeldungen bestätigt werden müssen, nachfolgende Verlängerungen jedoch nicht. Ob ein Kauf bestätigt werden muss, können Sie anhand des Felds „Bestätigung“ 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 Sie einen Kauf bestätigen, sollten Sie 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(), das in der Client-API verfügbar ist.
  • Verwenden Sie für Produkte, die nicht verbraucht werden, acknowledgePurchase() in der Client-API.
  • In der Server API ist auch eine neue acknowledge()-Methode verfügbar.

BillingFlowParams.setSku() wurde entfernt

Die zuvor verworfene 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 finden Sie unter Google Play Billing Library verwenden.

Entwicklernutzlast wird unterstützt

Version 2.0 der Google Play Billing Library bietet Unterstützung für die Entwickler-Nutzlast – beliebige Strings, die an Käufe angehängt werden können. Sie können einen Parameter für die Entwickler-Payload an einen Kauf anhängen, aber nur, wenn der Kauf bestätigt oder verwendet wird. Das unterscheidet sich von der Entwicklernutzlast in AIDL, bei der die Nutzlast beim Starten des Kaufvorgangs angegeben werden konnte. Da Käufe jetzt außerhalb Ihrer App initiiert werden können, sorgt diese Änderung dafür, dass Sie immer die Möglichkeit haben, Käufen eine Nutzlast hinzuzufügen.

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

Einheitliche Angebote

Wenn Sie eine Artikelnummer mit Rabatt anbieten, gibt Google Play jetzt den Originalpreis der Artikelnummer zurück, damit Sie Nutzern anzeigen können, dass sie einen Rabatt erhalten.

SkuDetails enthält zwei neue Methoden zum Abrufen des ursprünglichen Artikelnummerpreises:

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. Ein Nutzer könnte beispielsweise Ihr In‑App-Produkt in einem Geschäft mit Bargeld kaufen. Das bedeutet, dass die Transaktion außerhalb Ihrer App abgeschlossen wird. In diesem Fall sollten Sie 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.

Verwenden Sie Purchase.getPurchaseState(), um festzustellen, ob der Kaufstatus PURCHASED oder PENDING ist. Das Recht sollte nur gewährt werden, wenn der Status PURCHASED ist. So prüfen Sie den Status von Purchase:

  1. Rufen Sie beim Starten Ihrer 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 Entwicklerbenachrichtigungen in Echtzeit eingeführt: OneTimeProductNotification. Dieser Benachrichtigungstyp enthält eine einzelne Nachricht, deren Wert entweder ONE_TIME_PRODUCT_PURCHASED oder ONE_TIME_PRODUCT_CANCELED ist. Diese Benachrichtigung wird nur für Käufe gesendet, die mit verzögerten Zahlungsmethoden wie Bargeld bezahlt wurden.

Wenn Sie ausstehende Käufe bestätigen, sollten Sie dies nur tun, 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

consumeAsync() akzeptiert jetzt ein ConsumeParams-Objekt anstelle einer purchaseToken. 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, 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.

Rückgabewerte von BillingResult

APIs, die zuvor einen BillingResponse-Ganzzahlwert zurückgegeben haben, geben jetzt ein BillingResult-Objekt zurück. BillingResult enthält die BillingResponse-Ganzzahl 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 bestimmt.

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 Haupt-Threads weiterhin empfohlen wird, können Sie die Google Play Billing Library jetzt in einem Hintergrund-Thread instanziieren.
  • Die Instanziierung wurde vollständig in den Hintergrundthread migriert, um das Risiko 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 das Testen zu erleichtern.
  • SkuDetails-Objekte können eine neue Methode verwenden: getOriginalJson().
  • Alle AIDL-Dienstaufrufe werden jetzt von Hintergrund-Threads verarbeitet.

Fehlerkorrekturen

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

Google Play Billing Library 1.2 (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 wird jetzt unter der Lizenzvereinbarung für das Android Software Development Kit lizenziert.
  • Die launchPriceChangeConfirmationFlow API wurde hinzugefügt. Mit ihr werden Nutzer aufgefordert, eine ausstehende Änderung des Abopreises zu überprüfen.
  • Es wurde Unterstützung für einen neuen Abrechnungsmodus, 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 Sie diese API verwenden möchten, erstellen Sie ein PriceChangeFlowParams-Objekt mit der skuDetails des Abo-Produkts und rufen Sie dann launchPriceChangeConfirmationFlow() auf. Implementieren Sie 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. Bei diesem Ablauf wird ein Antwortcode vom Typ BillingClient.BillingResponse zurückgegeben.

Neuer Abrechnungsmodus

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

Neue Methode zum Festlegen von SKU-Details

In der Klasse BillingFlowParams wurde die Methode setSku() als veraltet eingestuft. Diese Änderung dient zur Optimierung des Google Play Billing-Ablaufs.

Wenn Sie eine neue Instanz von BillingFlowParams in Ihrem In-App-Abrechnungsclient 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 wurde Unterstützung für die Angabe eines Abrechnungsmodus in BillingFlowParams beim Upgraden/Downgraden 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 Abrechnungsmodi:

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 Die Ersetzung wird sofort wirksam und der Abrechnungszeitraum bleibt unverändert. Der Preis für den verbleibenden Zeitraum wird in Rechnung gestellt.

Hinweis: Diese Option ist nur für das Upgrade von Abos verfügbar.

IMMEDIATE_WITHOUT_PRORATION Die Ersetzung erfolgt sofort und der neue Preis wird bei der nächsten Wiederholung berechnet. Der Abrechnungszeitraum bleibt unverändert.

replaceSkusProration wird in der Klasse BillingFlowParams nicht mehr unterstützt

Entwickler konnten bisher ein boolesches Flag festlegen, um einen anteiligen Betrag für eine Anfrage zum Abo-Upgrade 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 BillingResponse zurück. Der synchrone Rückgabewert von BillingResponse wird ebenfalls beibehalten.

Fehlerkorrekturen

  • Die asynchronen Methoden werden ordnungsgemäß beendet, wenn die Verbindung zum Dienst getrennt wird.
  • Builder Durch Parameterobjekte werden erstellte Objekte nicht mehr geändert.
  • Problem 68087141: launchBillingFlow() löst jetzt einen Callback für fehlgeschlagene 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

  • Die Berechtigung für die eingebettete Abrechnung ist im Manifest der Bibliothek enthalten. Es ist nicht mehr erforderlich, die Berechtigung com.android.vending.BILLING im Android-Manifest hinzuzufügen.
  • Der Klasse BillingClient.Builder wurde ein neuer Builder hinzugefügt.
  • Das Builder-Muster für die Klasse SkuDetailsParams wurde eingeführt, um es in Methoden zum Abfragen von Artikelnummern zu verwenden.
  • Mehrere API-Methoden wurden aus Konsistenzgründen aktualisiert (gleiche 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 der Klasse „BillingFlowParams“ aufgerufen.

Um den Abrechnungsablauf für einen Kauf oder ein Abo zu starten, empfängt die Methode launchBillingFlow() eine BillingFlowParams-Instanz, die mit anfragespezifischen Parametern initialisiert wird:

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 den Ergebniscode und eine Liste von SkuDetails-Objekten 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 für die Methode onConsumeResponse() geändert

Die Reihenfolge der Argumente für onConsumeResponse aus der Schnittstelle ConsumeResponseListener wurde geändert, um sie an unsere API anzugleichen:

Kotlin

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

Java

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

Entpacktes „PurchaseResult“-Objekt

PurchaseResult wurde entpackt, um die Konsistenz unserer API zu gewährleisten:

Kotlin

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

Java

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

Fehlerkorrekturen

Veröffentlichung der Developer Preview 1 (12.06.2017, Ankündigung)

Einführung der Entwicklervorschau, die den Entwicklungsprozess für die Abrechnung vereinfachen soll. So können sich Entwickler auf die Implementierung von Logik konzentrieren, die für die Android-App spezifisch ist, z. B. Anwendungsarchitektur und 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 auch eine Abstraktionsebene für den AIDL-Dienst (Android Interface Definition Language), sodass Entwickler die Schnittstelle zwischen der App und der Google Play Billing API einfacher definieren können.