Dieses Thema enthält Versionshinweise für die Google Play Billing Library.
Google Play Billing Library 7.0.0 (14.05.2024)
Version 7.0.0 der Google Play Billing Library- und Kotlin-Erweiterungen ist jetzt verfügbar.
Zusammenfassung der Änderungen
Es wurden APIs zur Unterstützung von Ratenzahlungen hinzugefügt.
ProductDetails.InstallmentPlanDetails
wurde für Basis-Abos mit Ratenzahlungen hinzugefügt, die Nutzer kaufen können. Mit dieser API kann Ihre App den Ratenplan und die Einrichtung der Zusicherung identifizieren, um dem Nutzer zugehörige Informationen zur Verfügung zu stellen. Weitere Informationen finden Sie in unserer Anleitung zur Ratenzahlung von Abos.
PendingPurchasesParams
undBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
wurden hinzugefügt, um das in diesem Release verworfeneBillingClient.Builder.enablePendingPurchases()
zu ersetzen.- Die verworfene
enablePendingPurchases()
entspricht funktionalenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.
- Die verworfene
Es wurden APIs hinzugefügt, um ausstehende Transaktionen für Prepaid-Abos zu unterstützen:
- Verwende
PendingPurchasesParams.Builder.enablePrepaidPlans()
zusammen mitBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
, um ausstehende Transaktionen für Prepaid-Abos zu aktivieren. Achte darauf, dass deine App auch die Abolebenszyklen korrekt verwaltet, wenn du Support hinzufügst. Weitere Informationen finden Sie in unserem Leitfaden zu anstehenden Käufen. Purchase.PendingPurchaseUpdate
undPurchase.getPendingPurchaseUpdate()
zum Abrufen des ausstehenden Auflade- oder Upgrade- oder Downgrades für ein bestehendes Abo wurden hinzugefügt.
- Verwende
BillingClient.Builder.enableAlternativeBilling()
,AlternativeBillingListener
undAlternativeChoiceDetails
wurden entfernt .- Entwickler sollten stattdessen
BillingClient.Builder.enableUserChoiceBilling()
mitUserChoiceBillingListener
undUserChoiceDetails
im Listener-Callback verwenden.
- Entwickler sollten stattdessen
BillingFlowParams.ProrationMode
,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
undBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
wurden entfernt.- Entwickler sollten stattdessen
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
mitBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
verwenden. BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
.BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Entwickler sollten stattdessen
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()
wurde entfernt.- Entwickler sollten stattdessen
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)
verwenden.
- Entwickler sollten stattdessen
BillingClient.queryPurchaseHistoryAsync()
wurde eingestellt und wird in einem zukünftigen Release entfernt. Entwickler sollten stattdessen die folgenden Alternativen verwenden:- Bestätigte und ausstehende Käufe: Verwende
BillingClient.queryPurchasesAsync()
, um die aktiven Käufe abzurufen. - Verbrauchte Käufe: Entwickler sollten die verbrauchten Käufe auf ihren eigenen Servern verfolgen.
- Abgebrochene Käufe: Verwende die voided-purchases-Entwickler-API.
- Weitere Informationen finden Sie unter Bisherige Käufe von Abfragen.
- Bestätigte und ausstehende Käufe: Verwende
BillingFlowParams.ProductDetailsParams.setOfferToken()
gibt jetzt eine Ausnahme aus, wenn Entwickler ein leeresofferToken
angeben.minSdkVersion
wurde auf 21 undtargetSdkVersion
auf 34 aktualisiert.
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
- Es wurde ein Fehler in
BillingClient.showAlternativeBillingOnlyInformationDialog()
behoben, bei demAlternativeBillingOnlyInformationDialogListener
in bestimmten Fällen beim Schließen des Dialogfelds nicht aufgerufen wurde.
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
- Es wurden APIs zur Unterstützung von externen Angeboten hinzugefügt.
BillingClient.Builder.enableExternalOffer()
wurde hinzugefügt, um die Möglichkeit zu aktivieren, externe Angebote zur Verfügung zu stellen.BillingClient.isExternalOfferAvailableAsync()
wurde hinzugefügt, um die Verfügbarkeit für die Bereitstellung externer Angebote zu prüfen.BillingClient.showExternalOfferInformationDialog()
wurde hinzugefügt, um Nutzern ein Informationsdialogfeld anzuzeigen, bevor sie zur externen App weitergeleitet werden.BillingClient.createExternalOfferReportingDetailsAsync()
wurde hinzugefügt, um eine Nutzlast zu erstellen, die zum Melden von Transaktionen über externe Angebote erforderlich ist.
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
- Es wurden APIs hinzugefügt, um nur alternative Abrechnung (d. h. ohne Auswahlmöglichkeit für Nutzer) zu unterstützen.
BillingClient.Builder.enableAlternativeBillingOnly()
wurde hinzugefügt, um die Möglichkeit zu aktivieren, nur eine alternative Abrechnung anzubieten.BillingClient.isAlternativeBillingOnlyAvailableAsync()
wurde hinzugefügt, um nur die Verfügbarkeit zu prüfen, wenn nur eine alternative Abrechnung angeboten wird.BillingClient.showAlternativeBillingOnlyInformationDialog()
wurde hinzugefügt, um ein Dialogfeld mit Informationen anzuzeigen, über das Nutzer informiert werden, wenn ausschließlich die alternative Abrechnung verwendet wird.BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
wurde hinzugefügt, um eine Nutzlast zu erstellen, die nur zum Melden von Transaktionen erforderlich ist, die nur über die alternative Abrechnung abgewickelt wurden.
- Die APIs zur Abrechnung mit Auswahlmöglichkeit für Nutzer wurden aktualisiert.
UserChoiceBillingListener
wurde hinzugefügt, um den als verworfen markiert AlternativeBillingListener zu ersetzen.UserChoiceDetails
wurde hinzugefügt, umAlternativeChoiceDetails
zu ersetzen, das als verworfen markiert wurde.BillingClient.Builder.enableUserChoiceBilling()
wurde hinzugefügt, umBillingClient.Builder.enableAlternativeBilling()
zu ersetzen, das als verworfen markiert wurde.
BillingClient.getBillingConfigAsync()
zum Abrufen der Google Play-Landesversion hinzugefügt.
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, dieProrationMode
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
undlaunchPriceConfirmationFlow
wurden entfernt.Die Methoden
queryPurchases
undlaunchPriceConfirmationFlow
, die zuvor als verworfen gekennzeichnet waren, wurden in Play Billing Library 6.0.0 entfernt. Entwickler solltenqueryPurchasesAsync
anstelle vonqueryPurchases
verwenden. Informationen zu den Alternativen fürlaunchPriceConfirmationFlow
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 alsSERVICE_UNAVAILABLE
gemeldet.SERVICE_UNAVAILABLE
undSERVICE_TIMEOUT
wurden aktualisiert.Ab PBL-Version 6.0.0 werden Fehler aufgrund von Zeitüberschreitungen bei der Verarbeitung als
SERVICE_UNAVAILABLE
anstelle des aktuellenSERVICE_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
- Es wurden Klassen zur Unterstützung alternativer Abrechnungsabläufe auf Mobilgeräten/Tablets für Nutzer in Südkorea hinzugefügt:
- Die Methode
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
wurde hinzugefügt, um die externe Transaktions-ID des ursprünglichen Abos anzugeben. - Die Methode
BillingClient.Builder.enableAlternativeBilling()
wurde hinzugefügt, damit Nutzer in Südkorea eine alternative Abrechnungsoption auswählen können.
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
- Die
ProductDetails.SubscriptionOfferDetails.getOfferId()
-Methode zum Abrufen der Angebots-ID wurde hinzugefügt. ProductDetails.SubscriptionOfferDetails.getBasePlanId()
-Methode zum Abrufen der Basis-Abo-ID wurde hinzugefügt.targetSdkVersion
wurde auf 31 aktualisiert.
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, umBillingClient.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
BillingClient.showInAppMessages()
wurde hinzugefügt, um dir bei der Bearbeitung abgelehnter Abozahlungen zu helfen. Weitere Informationen zur Verwendung von In-App-Benachrichtigungen bei abgelehnten Zahlungen für Abos findest du unter Umgang mit abgelehnten Zahlungen.
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
BillingClient.queryPurchasesAsync()
wurde hinzugefügt, umBillingClient.queryPurchases()
zu ersetzen. Dieses Element wird in einem zukünftigen Release entfernt.Ein neuer Aboersatzmodus wurde hinzugefügt:
IMMEDIATE_AND_CHARGE_FULL_PRICE
.Es wurde die Methode
BillingClient.getConnectionState()
zum Abrufen des Verbindungsstatus der Play Billing Library hinzugefügt.Javadoc und die Implementierung wurden aktualisiert, um anzugeben, für welchen Thread eine Methode aufgerufen werden kann und welche Thread-Ergebnisse gepostet werden.
BillingFlowParams.Builder.setSubscriptionUpdateParams()
wurde als neue Möglichkeit zum Initiieren von Abo-Updates hinzugefügt. Dies ersetzt die entfernten ElementeBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
undBillingFlowParams.Builder#setOldSku
.Purchase.getQuantity()
undPurchaseHistoryRecord.getQuantity()
wurden hinzugefügt.Purchase#getSkus()
undPurchaseHistoryRecord#getSkus()
wurden hinzugefügt. Sie ersetzen die entferntenPurchase#getSku
undPurchaseHistoryRecord#getSku
.BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
undBillingFlowParams#getSkuType
wurden entfernt.
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
undUnderAgeOfConsent
wurden entfernt. - Veraltete Nutzlastmethoden für Entwickler wurden entfernt.
- Die verworfenen Methoden
BillingFlowParams.setAccountId()
undBillingFlowParams.setDeveloperId()
wurden entfernt. - Die verworfenen Methoden
BillingFlowParams.setOldSkus(String oldSku)
undBillingFlowParams.addOldSku(String oldSku)
wurden entfernt. - Anmerkungen zur Null-Zulässigkeit wurden hinzugefügt.
Fehlerkorrekturen
SkuDetails.getIntroductoryPriceCycles()
gibt jetztint
anstelle vonString
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
- Java Google Play Billing Library
- In
AcknowledgePurchaseParams
wurden die MethodensetDeveloperPayload()
undgetDeveloperPayload()
verworfen. - In
ConsumeParams
wurden die MethodensetDeveloperPayload()
undgetDeveloperPayload()
verworfen. - In
BillingFlowParams
wurdesetAccountId()
insetObfuscatedAccountId()
umbenannt und die Längenbeschränkung auf 64 Zeichen dokumentiert. Außerdem darf in diesem Feld keine personenidentifizierbaren Informationen enthalten sein.setAccountId()
wurde als verworfen markiert und wird in einer zukünftigen Bibliotheksversion entfernt. - In
BillingFlowParams
wurdesetObfuscatedProfileId()
hinzugefügt, das ähnlich funktioniert wiesetObfuscatedAccountId()
. Weitere Informationen finden Sie unter Updates und Alternativen für Entwicklernutzlasten. - In
Purchase
wurde die MethodegetAccountIdentifiers()
hinzugefügt, um die inBillingFlowParams
festgelegten verschleierten Konto-IDs zurückzugeben. - In
BillingClient
wurde die MethodeloadRewardedSku()
im Rahmen der Einstellung von Artikelnummern mit Prämie als verworfen markiert. Weitere Informationen zur Einstellung finden Sie in der Play Console-Hilfe.
- In
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
wurdesetOldSku(String oldSku)
verworfen und durchsetOldSku(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 CodeDEVELOPER_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:
getOriginalPriceAmountMicros()
: gibt den unformatierten Originalpreis der Artikelnummer vor Rabatt zurück.getOriginalPrice()
: gibt den ursprünglichen Preis mit zusätzlicher Währungsformatierung zurück
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
:
- Rufe beim Starten deiner App
BillingClient.queryPurchases()
auf, um die Liste der nicht verbrauchten Produkte abzurufen, die dem Nutzer zugeordnet sind. - Rufen Sie
Purchase.getPurchaseState()
für jedes zurückgegebenePurchase
-Objekt auf. - Implementieren Sie die Methode
onPurchasesUpdated()
, um auf Änderungen anPurchase
-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
SkuDetails.getIntroductoryPriceAmountMicros()
gibt jetztlong
anstelle vonString
zurück.
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
- Produkte mit Prämie werden jetzt unterstützt. Weitere Informationen zu Monetarisierungsoptionen findest du unter Funktionen für Prämienprodukte hinzufügen.
Sonstige Änderungen
- Es wurden öffentliche Konstruktoren für
PurchasesResult
undSkuDetailsResult
hinzugefügt, um die Tests zu vereinfachen. SkuDetails
-Objekte können die neue MethodegetOriginalJson()
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
wurdesetSku()
durchsetSkuDetails()
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
inBillingFlowParams
wird nicht mehr unterstützt. Verwende stattdessenreplaceSkusProrationMode
. 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
- Kein Antwortcode im Set PURCHASES_UPDATED
- Probleme mit ProxyBillingActivity und PurchasesUpdatedListener während der Geräterotation beheben
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.