Dieses Dokument enthält Versionshinweise für die Google Play Billing Library.
Google Play Billing Library 7.1.1 (03.10.2024)
Version 7.1.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Fehlerkorrekturen
- Ein Fehler in der Play Billing Library 7.1.0 beim Testen von
BillingResult
-Antwortcodes wurde behoben.
Google Play Billing Library 7.1.0 (19.09.2024)
Version 7.1.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Zusammenfassung der Änderungen
- Verbesserte Thread-Sicherheit im Zusammenhang mit Verbindungsstatus und -verwaltung.
- Es wurden teilweise Änderungen für den Test von
BillingResult
-Antwortcodes eingeführt, die in Play Billing Library 7.1.1 vollständig freigegeben werden. Wenn Sie Ihre Integration mit dieser Funktion testen möchten, müssen Sie auf Play Billing Library 7.1.1 upgraden. Es gibt einen Fehler, der sich nur auf Anwendungen auswirkt, für die die Tests für Abrechnungsüberschreibungen aktiviert sind. Die reguläre Nutzung ist nicht betroffen. Weitere Informationen finden Sie unterBillingResult
-Antwortcodes testen.
Google Play Billing Library 7.0.0 (14.05.2024)
Version 7.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Zusammenfassung der Änderungen
APIs zur Unterstützung von Ratenabos wurden hinzugefügt.
ProductDetails.InstallmentPlanDetails
wurde für Basis-Abos mit Ratenzahlung hinzugefügt, die Nutzer kaufen können. Mit dieser API kann Ihre App den Ratenkauf und die damit verbundenen Verpflichtungen ermitteln, um dem Nutzer entsprechende Informationen zur Verfügung zu stellen. Weitere Informationen finden Sie in unserem Leitfaden zu Ratenzahlungen für Abos.
PendingPurchasesParams
undBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
wurden hinzugefügt, umBillingClient.Builder.enablePendingPurchases()
zu ersetzen, das in dieser Version eingestellt wurde.- Die eingestellte Funktion
enablePendingPurchases()
ist funktional mitenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
identisch.
- Die eingestellte Funktion
Es wurden APIs hinzugefügt, um ausstehende Transaktionen für Prepaid-Abos zu unterstützen:
- Verwenden Sie
PendingPurchasesParams.Builder.enablePrepaidPlans()
zusammen mitBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
, um ausstehende Transaktionen für Prepaid-Abos zu aktivieren. Achten Sie beim Hinzufügen von Support darauf, dass Ihre App auch Abolebenszyklen richtig verwaltet. Weitere Informationen finden Sie in unserem Leitfaden zu ausstehenden Käufen. Purchase.PendingPurchaseUpdate
undPurchase.getPendingPurchaseUpdate()
wurden hinzugefügt, um das ausstehende Aufladen oder Upgrade oder Downgrade auf ein bestehendes Abo abzurufen.
- Verwenden Sie
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.Builder#setSubscriptionReplacementMode(int)
anstelle vonBillingFlowParams.SubscriptionUpdateParams.ReplacementMode
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 einer zukünftigen Version 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 den Überblick über die Nutzung von Käufen auf ihren eigenen Servern behalten.
- Stornierte Käufe: Verwenden Sie die Developer API voided-purchases.
- Weitere Informationen finden Sie unter Kaufverlauf abfragen.
- Bestätigte und ausstehende Käufe: Verwende
BillingFlowParams.ProductDetailsParams.setOfferToken()
löst jetzt eine Ausnahme aus, wenn Entwickler eine leereofferToken
angeben.minSdkVersion
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 sind jetzt verfügbar.
Zusammenfassung der Änderungen
- Ein Fehler in
BillingClient.showAlternativeBillingOnlyInformationDialog()
wurde behoben, durch denAlternativeBillingOnlyInformationDialogListener
in bestimmten Fällen möglicherweise nicht aufgerufen wurde, wenn das Dialogfeld geschlossen wurde.
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
- APIs zur Unterstützung von externen Angeboten wurden hinzugefügt.
BillingClient.Builder.enableExternalOffer()
wurde hinzugefügt, um externe Angebote anbieten zu können.BillingClient.isExternalOfferAvailableAsync()
wurde hinzugefügt, um die Verfügbarkeit der Funktion zum Bereitstellen externer Angebote zu prüfen.BillingClient.showExternalOfferInformationDialog()
wurde hinzugefügt, um Nutzern ein Informationsdialogfeld anzuzeigen, bevor sie zur externen Website weitergeleitet werden.BillingClient.createExternalOfferReportingDetailsAsync()
wurde hinzugefügt, um eine Nutzlast zu erstellen, die für die Meldung von Transaktionen erforderlich ist, die über externe Angebote erfolgen.
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
- APIs zur Unterstützung der nur alternativen Abrechnung (d. h. ohne Auswahlmöglichkeit für Nutzer) wurden hinzugefügt.
BillingClient.Builder.enableAlternativeBillingOnly()
wurde hinzugefügt, um die Möglichkeit zu bieten, nur eine alternative Abrechnung anzubieten.BillingClient.isAlternativeBillingOnlyAvailableAsync()
wurde hinzugefügt, um zu prüfen, ob nur eine alternative Abrechnung angeboten werden kann.BillingClient.showAlternativeBillingOnlyInformationDialog()
wurde hinzugefügt, um ein Informationsdialogfeld einzublenden, in dem Nutzer darüber informiert werden, dass nur die alternative Abrechnung verwendet wird.BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
wurde hinzugefügt, um eine Nutzlast zu erstellen, die zum Melden von Transaktionen erforderlich ist, die ausschließlich über ein alternatives Abrechnungssystem erfolgen.
- APIs für die Abrechnung mit Auswahlmöglichkeit für Nutzer aktualisiert
UserChoiceBillingListener
wurde hinzugefügt, um AlternativeBillingListener zu ersetzen, der als veraltet gekennzeichnet wurde.UserChoiceDetails
wurde hinzugefügt, umAlternativeChoiceDetails
zu ersetzen, das als veraltet gekennzeichnet wurde.BillingClient.Builder.enableUserChoiceBilling()
wurde hinzugefügt, umBillingClient.Builder.enableAlternativeBilling()
zu ersetzen, das als veraltet gekennzeichnet wurde.
BillingClient.getBillingConfigAsync()
wurde hinzugefügt, um die Google Play-Landesversion abzurufen.
Google Play Billing Library 6.0.1 (22.06.2023)
Version 6.0.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Zusammenfassung der Änderungen
Aktualisieren Sie die Play Billing Library, damit sie mit Android 14 kompatibel ist.
Google Play Billing Library 6.0 (10.05.2023)
Version 6.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Zusammenfassung der Änderungen
Es wurde ein neues Enum
ReplacementMode
hinzugefügt, umProrationMode
zu ersetzen.Aus Gründen der Abwärtskompatibilität ist
ProrationMode
weiterhin verfügbar.Bestell-ID für Käufe von
PENDING
entferntBisher wurde die Bestell-ID immer erstellt, auch wenn der Kauf ausstehend war. Ab Version 6.0.0 wird für ausstehende Käufe keine Bestell-ID erstellt. Diese wird erst dann eingefügt, wenn der Kauf in den Status
PURCHASED
wechselt.Die Methoden
queryPurchases
undlaunchPriceConfirmationFlow
wurden entfernt.Die Methoden
queryPurchases
undlaunchPriceConfirmationFlow
, die zuvor als veraltet gekennzeichnet wurden, wurden in der Play Billing Library 6.0.0 entfernt. Entwickler sollten stattdessenqueryPurchasesAsync
verwenden.queryPurchases
Informationen zu Alternativen fürlaunchPriceConfirmationFlow
finden Sie unter Preisänderungen.Neuer Netzwerkfehlerantwortcode hinzugefügt.
Ab PBL-Version 6.0.0 wurde ein neuer Netzwerkfehler-Antwortcode,
NETWORK_ERROR
, hinzugefügt. Dieser Code wird zurückgegeben, wenn ein Fehler aufgrund eines Netzwerkverbindungsproblems auftritt. Diese Netzwerkverbindungsfehler wurden zuvor alsSERVICE_UNAVAILABLE
gemeldet.SERVICE_UNAVAILABLE
undSERVICE_TIMEOUT
wurden aktualisiert.Ab PBL-Version 6.0.0 werden Fehler aufgrund einer Zeitüberschreitung bei der Verarbeitung als
SERVICE_UNAVAILABLE
statt alsSERVICE_TIMEOUT
zurückgegeben.In früheren PBL-Versionen ändert sich das Verhalten nicht.
SERVICE_TIMEOUT
wurde entfernt.Ab PBL-Version 6.0.0 wird
SERVICE_TIMEOUT
nicht mehr zurückgegeben. In früheren Versionen von PBL wird dieser Code weiterhin zurückgegeben.Es wurde zusätzliches Logging hinzugefügt.
Die Version 6 der Play Billing Library enthält zusätzliche Protokolle, die Aufschluss über die API-Nutzung (z. B. Erfolg oder Fehler) und Probleme mit der Dienstverbindung geben. Diese Informationen werden verwendet, um die Leistung der Play Billing Library zu verbessern und den Support bei Fehlern zu optimieren.
Google Play Billing Library 5.2.1 (22.06.2023)
Version 5.2.1 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Zusammenfassung der Änderungen
Aktualisieren Sie die Play Billing Library, damit sie mit Android 14 kompatibel ist.
Google Play Billing Library 5.2 (06.04.2023)
Version 5.2.0 der Google Play Billing Library und die Kotlin-Erweiterungen sind jetzt verfügbar.
Zusammenfassung der Änderungen
- Es wurden Klassen hinzugefügt, um die alternative Abrechnung auf Smartphones und Tablets für Nutzer in Südkorea zu unterstützen:
- 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 (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
- Die Methode
ProductDetails.SubscriptionOfferDetails.getOfferId()
zum Abrufen der Angebots-ID wurde hinzugefügt. - Die Methode
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
zum Abrufen der ID des Basis-Abos wurde hinzugefügt. targetSdkVersion
auf 31 aktualisiert
Google Play Billing Library 5.0 (11.05.2022)
Version 5.0.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Diese Version enthält die folgenden Änderungen.
Zusammenfassung der Änderungen
- Einführung eines neuen Modells für Abos, einschließlich neuer Entitäten, mit denen Sie mehrere Angebote für ein einzelnes Aboprodukt erstellen können. Weitere Informationen finden Sie in der Migrationsanleitung.
BillingClient.queryProductDetailsAsync()
wurde hinzugefügt, umBillingClient.querySkuDetailsAsync()
zu ersetzen.- Die Methode
setIsOfferPersonalized()
wurde für die Offenlegungsanforderungen für personalisierte Preise in der EU hinzugefügt. Weitere Informationen zur Verwendung dieser Methode finden Sie unter Personalisierten Preis angeben. queryPurchases()
wurde entfernt. Diese Methode wurde bereits eingestellt und durch „queryPurchasesAsync“ ersetzt, die in der Google Play Billing Library 4.0.0 eingeführt wurde.launchPriceChangeFlow
wurde verworfen und wird in einer zukünftigen Version entfernt. Weitere Informationen zu Alternativen finden Sie unter Bestätigungsablauf für Preisänderungen starten.setVrPurchaseFlow()
wurde entfernt, da es zuvor beim Instanziieren eines Kaufvorgangs verwendet wurde. In früheren Versionen wurde der Nutzer mit dieser Methode auf sein Android-Gerät weitergeleitet, um den Kauf abzuschließen. Wenn Sie diese Methode entfernen, schließen Nutzer den Kauf über den standardmäßigen Kaufvorgang ab.
Google Play Billing Library 4.1 (23.02.2022)
Version 4.1.0 der Google Play Billing Library und Kotlin-Erweiterungen sind jetzt verfügbar.
Diese Version enthält die folgenden Änderungen.
Zusammenfassung der Änderungen
BillingClient.showInAppMessages()
wurde hinzugefügt, um abgelehnte Abozahlungen zu verarbeiten. Weitere Informationen zur Verwendung von In-App-Mitteilungen für die Bearbeitung abgelehnter Abozahlungen finden Sie unter Abgelehnte Zahlungen bearbeiten.
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
BillingClient.queryPurchasesAsync()
wurde anstelle vonBillingClient.queryPurchases()
hinzugefügt, das in einer zukünftigen Version entfernt wird.Neuer Ersatzmodus für Abos
IMMEDIATE_AND_CHARGE_FULL_PRICE
hinzugefügt.Die Methode
BillingClient.getConnectionState()
wurde hinzugefügt, um den Verbindungsstatus der Play Billing Library abzurufen.Javadoc und Implementierung wurden aktualisiert, um anzugeben, in welchem Thread eine Methode aufgerufen werden kann und welche Threadergebnisse gepostet werden.
BillingFlowParams.Builder.setSubscriptionUpdateParams()
wurde als neue Möglichkeit zum Initiieren von Aboaktualisierungen hinzugefügt. Damit werdenBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
undBillingFlowParams.Builder#setOldSku
ersetzt, die entfernt wurden.Purchase.getQuantity()
undPurchaseHistoryRecord.getQuantity()
wurden hinzugefügt.Purchase#getSkus()
undPurchaseHistoryRecord#getSkus()
wurden hinzugefügt. Sie ersetzenPurchase#getSku
undPurchaseHistoryRecord#getSku
, die entfernt wurden.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, die Kotlin-Erweiterung und das Unity-Plug-in sind jetzt verfügbar.
Fehlerkorrekturen für Java und Kotlin
- Speicherleck beim Aufruf von
endConnection()
behoben - Problem behoben, wenn die Google Play Billing Library von Apps verwendet wird, die den Startmodus für einzelne Aufgaben nutzen. Ein
onPurchasesUpdated()
-Callback wird ausgelöst, wenn eine App über den Android-Launcher fortgesetzt wird und das Abrechnungsdialogfeld vor der Sperrung sichtbar war.
Fehlerkorrekturen für Unity
- Aktualisieren Sie auf Java-Version 3.0.3, um ein Speicherleck zu beheben und ein Problem zu beheben, das Käufe verhindert, wenn eine App über den Android-Launcher fortgesetzt wird und der Abrechnungsdialog vor der Sperrung sichtbar war.
Google Play Billing Library 3.0.2 (24.11.2020)
Version 3.0.2 der Google Play Billing Library und die Kotlin-Erweiterung sind jetzt verfügbar.
Fehlerkorrekturen
- Ein Fehler in der Kotlin-Erweiterung wurde behoben, bei dem die coroutine mit dem Fehler „Already resumed“ (Bereits fortgesetzt) fehlgeschlagen ist.
- Es wurden nicht aufgelöste Verweise behoben, die bei Verwendung der Kotlin-Erweiterung mit der kotlinx.coroutines-Bibliothek Version 1.4 oder höher auftraten.
Google Play Billing Library 3.0.1 (30.09.2020)
Version 3.0.1 der Google Play Billing Library und der Kotlin-Erweiterung sind jetzt verfügbar.
Fehlerkorrekturen
- Ein Fehler wurde behoben, durch den
PurchasesUpdatedListener
bei einem Abbruch und einer Wiederherstellung der App während des Abrechnungsvorgangs möglicherweise nicht mit dem Kaufergebnis aufgerufen wurde.
Google Play Billing Library 3.0 (08.06.2020)
Version 3.0.0 der Google Play Billing Library, die Kotlin-Erweiterung und das Unity-Plug-in sind jetzt verfügbar.
Zusammenfassung der Änderungen
- Die Unterstützung für Artikelnummern mit Prämie wurde entfernt.
- Die Parameter
ChildDirected
undUnderAgeOfConsent
wurden entfernt. - Veraltete Entwicklernutzlastmethoden wurden entfernt.
- Die veralteten Methoden
BillingFlowParams.setAccountId()
undBillingFlowParams.setDeveloperId()
wurden entfernt. - Die veralteten 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.- Ein Fehler wurde behoben, bei dem der Abrechnungsvorgang so behandelt wurde, als wären zusätzliche Parameter vorhanden, auch wenn keine zusätzlichen Parameter festgelegt wurden.
Google Play Billing Library 2.2.1 (20.05.2020)
Version 2.2.1 der Google Play Billing Library ist jetzt verfügbar.
Fehlerkorrekturen
- Die Standardversion der Java Play Billing Library, von der die Kotlin-Erweiterung abhängt, wurde aktualisiert.
Veröffentlichung der Google Play Billing Library 2.2.0 und Unity-Unterstützung (23.03.2020)
Version 2.2.0 der Google Play-Abrechnung bietet Funktionen, mit denen Entwickler dafür sorgen können, dass Käufe dem richtigen Nutzer zugeordnet werden. Durch diese Änderungen müssen keine benutzerdefinierten Lösungen mehr auf Grundlage der Entwicklernutzlast erstellt werden. Im Rahmen dieses Updates wurde die Funktion für Entwicklernutzlasten eingestellt und wird in einer zukünftigen Version entfernt. Weitere Informationen, einschließlich empfohlener Alternativen, finden Sie unter Entwicklernutzlast.
Google Play Billing Library 2 für Unity
Neben den aktuellen Java- und Kotlin-Versionen der Google Play Billing Library 2 haben wir eine Version der Bibliothek für die Verwendung mit Unity veröffentlicht. Spieleentwickler, die die Unity In-App-Kauf-API verwenden, können jetzt ein Upgrade durchführen, um alle Funktionen der Google Play Billing Library 2 zu nutzen und die nachfolgenden Upgrades auf zukünftige Versionen der Google Play Billing Library zu vereinfachen.
Weitere Informationen finden Sie unter Google Play Billing mit Unity verwenden.
Zusammenfassung der Änderungen
- Java Google Play Billing Library
- In
AcknowledgePurchaseParams
wurden die MethodensetDeveloperPayload()
undgetDeveloperPayload()
eingestellt. - In
ConsumeParams
wurden die MethodensetDeveloperPayload()
undgetDeveloperPayload()
eingestellt. - In
BillingFlowParams
wurdesetAccountId()
insetObfuscatedAccountId()
umbenannt. Außerdem wurde eine Längenbeschränkung von 64 Zeichen und eine Einschränkung für personenidentifizierbare Informationen in diesem Feld dokumentiert.setAccountId()
wurde als veraltet markiert und wird in einer zukünftigen Bibliotheksversion entfernt. - In
BillingFlowParams
wurdesetObfuscatedProfileId()
hinzugefügt, das ähnlich wiesetObfuscatedAccountId()
funktioniert. Weitere Informationen finden Sie unter Aktualisierungen und Alternativen für Entwicklernutzlasten. - In
Purchase
wurde die MethodegetAccountIdentifiers()
hinzugefügt, um die verschleierten Konto-IDs zurückzugeben, die inBillingFlowParams
festgelegt wurden. - In
BillingClient
wurde die MethodeloadRewardedSku()
im Rahmen der Einstellung von SKUs mit Prämie eingestellt. Weitere Informationen zur Einstellung finden Sie in der Play Console-Hilfe.
- In
Veröffentlichung der Google Play Billing Library 2.1.0 und der Kotlin-Erweiterung 2.1.0 (10. Dezember 2019)
Version 2.1.0 der Google Play Billing Library und die neue Kotlin-Erweiterung sind jetzt verfügbar. Die Kotlin-Erweiterung der Play Billing Library bietet idiomatische API-Alternativen für die Verwendung in Kotlin mit verbesserter Null-Sicherheit und coroutines. Codebeispiele finden Sie unter Google Play Billing Library verwenden.
Diese Version enthält die folgenden Änderungen.
Zusammenfassung der Änderungen
- In
BillingFlowParams
wurdesetOldSku(String oldSku)
eingestellt und durchsetOldSku(String oldSku, String purchaseToken)
ersetzt, um Mehrdeutigkeiten zu vermeiden, wenn mehrere Konten auf dem Gerät dieselbe Artikelnummer haben.
Google Play Billing Library 2.0.3 (05.08.2019)
Version 2.0.3 der Google Play Billing Library ist jetzt verfügbar.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem
querySkuDetailsAsync()
gelegentlich mit dem CodeDEVELOPER_ERROR
fehlgeschlagen ist, anstatt ein erfolgreiches Ergebnis zurückzugeben.
Google Play Billing Library 2.0.2 (08.07.2019)
Version 2.0.2 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält Aktualisierungen der Referenzdokumentation. Die Funktionalität der Bibliothek bleibt unverändert.
Google Play Billing Library 2.0.1 (06.06.2019)
Version 2.0.1 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:
Fehlerkorrekturen
- Ein Fehler wurde behoben, durch den Debug-Nachrichten in einigen Fällen als
null
zurückgegeben wurden. - Ein potenzielles Speicherleck wurde behoben.
Veröffentlichung der Google Play Billing Library 2.0 (7. Mai 2019)
Version 2.0 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:
Käufe müssen innerhalb von drei Tagen bestätigt werden
Google Play unterstützt den Kauf von Produkten innerhalb Ihrer App (In-App) oder außerhalb Ihrer App (Out-of-App). Damit Google Play unabhängig davon, wo der Nutzer Ihr Produkt kauft, für eine einheitliche Kauferfahrung sorgen kann, müssen Sie alle über die Google Play Billing Library erhaltenen Käufe so schnell wie möglich bestätigen, nachdem Sie dem Nutzer die Berechtigung erteilt haben. Wenn Sie einen Kauf nicht innerhalb von drei Tagen bestätigen, erhält der Nutzer automatisch eine Erstattung und Google Play macht den Kauf rückgängig. Bei ausstehenden Transaktionen (neu in Version 2.0) beginnt das Drei-Tage-Fenster, wenn der Kauf den Status PURCHASED
erreicht hat. Es gilt nicht, solange der Kauf den Status PENDING
hat.
Bei Abos müssen Sie jeden Kauf bestätigen, der ein neues Kauftoken enthält. Das bedeutet, dass alle ersten Käufe, Tarifänderungen und Neuregistrierungen bestätigt werden müssen, aber nachfolgende Verlängerungen nicht. Ob für einen Kauf eine Bestätigung erforderlich ist, sehen Sie im Bestätigungsfeld des Kaufs.
Das Purchase
-Objekt enthält jetzt die Methode isAcknowledged()
, die angibt, ob ein Kauf bestätigt wurde. Außerdem enthält die Google Play Developer API boolesche Bestätigungswerte sowohl für Purchases.products
als auch für Purchases.subscriptions
.
Bevor du einen Kauf bestätigst, solltest du mithilfe dieser Methoden prüfen, ob der Kauf bereits bestätigt wurde.
Sie können einen Kauf mit einer der folgenden Methoden bestätigen:
- Verwende für Verbrauchsprodukte
consumeAsync()
, das in der Client API zu finden ist. - Verwende für Produkte, die nicht verbraucht werden,
acknowledgePurchase()
aus der Client API. - In der Server API ist auch eine neue
acknowledge()
-Methode verfügbar.
BillingFlowParams.setSku() wurde entfernt
Die zuvor eingestellte Methode BillingFlowParams#setSku()
wurde in dieser Version entfernt. Bevor du Produkte in einem Kaufvorgang rendern kannst, musst du jetzt BillingClient.querySkuDetailsAsync()
aufrufen und das resultierende SkuDetails
-Objekt an BillingFlowParams.Builder.setSkuDetails()
übergeben.
Codebeispiele finden Sie unter Google Play Billing Library verwenden.
Entwicklernutzlast wird unterstützt
Version 2.0 der Google Play Billing Library unterstützt Entwicklernutzlast – beliebige Strings, die an Käufe angehängt werden können. Sie können einem Kauf einen Entwickler-Nutzlastparameter zuweisen, aber nur, wenn der Kauf bestätigt oder verwendet wird. Das ist anders als bei der Entwicklernutzlast in AIDL, bei der die Nutzlast beim Starten des Kaufvorgangs angegeben werden kann. Da Käufe jetzt außerhalb Ihrer App initiiert werden können, haben Sie dank dieser Änderung immer die Möglichkeit, Käufen eine Nutzlast hinzuzufügen.
Um auf die Nutzlast in der neuen Bibliothek zuzugreifen, enthalten Purchase
-Objekte jetzt die Methode getDeveloperPayload()
.
Einheitliche Angebote
Wenn Sie eine ermäßigte SKU anbieten, gibt Google Play jetzt den Originalpreis der SKU zurück, damit Sie Nutzern anzeigen können, dass sie einen Rabatt erhalten.
SkuDetails
enthält zwei neue Methoden zum Abrufen des ursprünglichen SKU-Preises:
getOriginalPriceAmountMicros()
: Gibt den unformatierten Originalpreis der SKU vor dem 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 vor der Gewährung des Berechtigungsstatus zusätzliche Aktionen erforderlich sind. Ein Nutzer kann beispielsweise Ihr In-App-Produkt in einem Geschäft mit Bargeld kaufen. Das bedeutet, dass die Transaktion außerhalb deiner App abgeschlossen wird. In diesem Fall solltest du die Berechtigung erst gewähren, nachdem der Nutzer die Transaktion abgeschlossen hat.
Wenn Sie ausstehende Käufe aktivieren möchten, rufen Sie enablePendingPurchases()
im Rahmen der Initialisierung Ihrer App auf.
Mit Purchase.getPurchaseState()
lässt sich ermitteln, ob der Kaufstatus PURCHASED
oder PENDING
ist. Die Berechtigung sollte nur gewährt werden, wenn der Status PURCHASED
lautet. So prüfen Sie den Status von Purchase
:
- Rufe beim Starten deiner App
BillingClient.queryPurchases()
auf, um die Liste der nicht in Anspruch genommenen Produkte abzurufen, die dem Nutzer zugeordnet sind. - Rufen Sie
Purchase.getPurchaseState()
für jedes zurückgegebenePurchase
-Objekt auf. - Implementiere die Methode
onPurchasesUpdated()
, um auf Änderungen anPurchase
-Objekten zu reagieren.
Außerdem enthält die Google Play Developer API den Status PENDING
für Purchases.products
.
Ausstehende Transaktionen werden für Abos nicht unterstützt.
Mit diesem Release wird auch ein neuer Echtzeit-Entwicklerbenachrichtigungstyp eingeführt: OneTimeProductNotification
. Dieser Benachrichtigungstyp enthält eine einzelne Nachricht, deren Wert entweder ONE_TIME_PRODUCT_PURCHASED
oder ONE_TIME_PRODUCT_CANCELED
ist. Dieser Benachrichtigungstyp wird nur für Käufe gesendet, die mit verzögerten Zahlungsmitteln wie Bargeld verbunden sind.
Bestätige ausstehende Käufe nur, wenn der Kaufstatus PURCHASED
und nicht PENDING
ist.
API-Änderungen
Version 2.0 der Google Play Billing Library enthält mehrere API-Änderungen, um neue Funktionen zu unterstützen und bestehende Funktionen zu verdeutlichen.
consumeAsync
Für consumeAsync()
wird jetzt ein ConsumeParams
-Objekt anstelle eines purchaseToken
verwendet. ConsumeParams
enthält den purchaseToken
sowie eine optionale Entwicklernutzlast.
Die vorherige Version von consumeAsync()
wurde in diesem Release entfernt.
queryPurchaseHistoryAsync
Um Verwirrung zu vermeiden, gibt queryPurchaseHistoryAsync()
jetzt ein PurchaseHistoryRecord
-Objekt anstelle eines Purchase
-Objekts zurück. Das PurchaseHistoryRecord
-Objekt entspricht einem Purchase
-Objekt, mit der Ausnahme, dass es nur die von queryPurchaseHistoryAsync()
zurückgegebenen Werte widerspiegelt und die Felder autoRenewing
, orderId
und packageName
nicht enthält. An den zurückgegebenen Daten hat sich nichts geändert. queryPurchaseHistoryAsync()
gibt dieselben Daten wie zuvor zurück.
Rückgabewerte von „BillingResult“
APIs, die zuvor einen Ganzzahlwert von BillingResponse
zurückgegeben haben, geben jetzt ein BillingResult
-Objekt zurück. BillingResult
enthält die Ganzzahl BillingResponse
sowie einen Debug-String, mit dem Sie Fehler diagnostizieren können. Der Debug-String verwendet die Sprache „en-US“ und soll Endnutzern nicht angezeigt werden.
Fehlerkorrekturen
SkuDetails.getIntroductoryPriceAmountMicros()
gibt jetzt einelong
anstelle einerString
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 Problem mit Threads, das in Version 1.2.1 aufgetreten ist, wurde behoben. Hintergrundaufrufe blockieren den Hauptthread nicht mehr.
Sonstige Änderungen
- Die Verwendung des Hauptthreads wird zwar weiterhin empfohlen, Sie können die Google Play Billing Library aber jetzt auch über einen Hintergrund-Thread instanziieren.
- Die Instanziierung wurde vollständig in den Hintergrund-Thread migriert, um das Risiko von ANRs zu verringern.
Play Billing Library-Version 1.2.1 (04.03.2019)
Version 1.2.1 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:
Größere Änderungen
- Unterstützung für Produkte mit Prämie hinzugefügt. Weitere Informationen zu Monetarisierungsoptionen finden Sie unter Monetarisierungsoptionen für Produkte mit Prämie hinzufügen.
Sonstige Änderungen
- Es wurden öffentliche Konstruktoren für
PurchasesResult
undSkuDetailsResult
hinzugefügt, um das Testen zu vereinfachen. - Für
SkuDetails
-Objekte kann eine neue Methode verwendet werden:getOriginalJson()
. - Alle AIDL-Dienstaufrufe werden jetzt von Hintergrundthreads verarbeitet.
Fehlerkorrekturen
- Null-Callback-Listener werden nicht mehr an öffentliche APIs übergeben.
Google Play Billing Library 1.2 (18. Oktober 2018)
Version 1.2 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:
Zusammenfassung der Änderungen
- Die Google Play Billing Library wird jetzt gemäß der Lizenzvereinbarung für das Android Software Development Kit lizenziert.
- Die
launchPriceChangeConfirmationFlow
API wurde hinzugefügt. Über diese API werden Nutzer aufgefordert, eine ausstehende Änderung des Abopreises zu prüfen. - Es wurde Unterstützung für einen neuen Modus zur Aufteilung von Abokosten (
DEFERRED
) beim Upgraden oder Downgraden des Abos eines Nutzers hinzugefügt. - In der Klasse
BillingFlowParams
wurdesetSku()
durchsetSkuDetails()
ersetzt. - Kleinere Fehlerkorrekturen und Codeoptimierungen.
Bestätigung der Preisänderung
Sie können jetzt den Preis eines Abos in der Google Play Console ändern und Nutzer auffordern, den neuen Preis zu prüfen und zu akzeptieren, wenn sie Ihre App aufrufen.
Wenn du diese API verwenden möchtest, erstelle ein PriceChangeFlowParams
-Objekt mit dem skuDetails
des Aboprodukts und rufe dann launchPriceChangeConfirmationFlow()
auf. Implementiere PriceChangeConfirmationListener
, um das Ergebnis zu verarbeiten, wenn der Bestätigungsvorgang für die Preisänderung abgeschlossen ist, wie im folgenden Code-Snippet gezeigt:
Kotlin
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
Java
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
Im Bestätigungsvorgang für die Preisänderung wird ein Dialogfeld mit den neuen Preisinformationen angezeigt, in dem Nutzer aufgefordert werden, den neuen Preis zu akzeptieren. Dieser Ablauf gibt einen Antwortcode vom Typ BillingClient.BillingResponse
zurück.
Neuer Modus für die Aufteilung
Wenn du das Abo eines Nutzers upgradest oder downgradest, kannst du den neuen Aufteilungsmodus DEFERRED
verwenden. In diesem Modus wird das Abo des Nutzers bei der nächsten Verlängerung aktualisiert. Weitere Informationen zum Festlegen dieses Aufteilungsmodus finden Sie unter Aufteilungsmodus festlegen.
Neue Methode zum Festlegen von SKU-Details
In der Klasse BillingFlowParams
wurde die Methode setSku()
eingestellt.
Mit dieser Änderung soll der Ablauf der Google Play-Abrechnung optimiert werden.
Wenn Sie in Ihrem In-App-Abrechnungsclient eine neue Instanz von BillingFlowParams
erstellen, empfehlen wir, stattdessen direkt mit dem JSON-Objekt zu arbeiten, indem Sie setSkuDetails()
verwenden, wie im folgenden Code-Snippet gezeigt:
In der Builder-Klasse BillingFlowParams
wurde die Methode setSku()
eingestellt. Verwenden Sie stattdessen die Methode setSkuDetails()
, wie im folgenden Code-Snippet gezeigt. Das an das setSkuDetails()
-Objekt übergebene Objekt stammt aus der Methode querySkuDetailsAsync()
.
Kotlin
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
Java
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
Play Billing Library 1.1 (07.05.2018)
Version 1.1 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:
Zusammenfassung der Änderungen
- Es kann jetzt in
BillingFlowParams
ein Modus für die Aufteilung des Abopreises angegeben werden, wenn ein bestehendes Abo upgegradet oder downgraded wird. - Das boole Flag
replaceSkusProration
inBillingFlowParams
wird nicht mehr unterstützt. Verwenden Sie stattdessenreplaceSkusProrationMode
. launchBillingFlow()
löst jetzt einen Rückruf für fehlgeschlagene Antworten aus.
Geändertes Verhalten
Version 1.1 der Google Play Billing Library enthält die folgenden Verhaltensänderungen.
Entwickler können replaceSkusProrationMode
in der Klasse BillingFlowParams
festlegen
Eine ProrationMode
enthält weitere Informationen zur Art der Aufteilung beim Upgrade oder Downgrade des Abos eines Nutzers.
Kotlin
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Java
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Google Play unterstützt derzeit die folgenden Aufteilungsmodi:
IMMEDIATE_WITH_TIME_PRORATION |
Der Ersatz tritt sofort in Kraft. Die neue Ablaufzeit wird anteilig berechnet und dem Nutzer gutgeschrieben oder in Rechnung gestellt. Das ist das aktuelle Standardverhalten. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Der Ersatz tritt sofort in Kraft und der Abrechnungszeitraum bleibt gleich. Der Preis für den verbleibenden Zeitraum wird in Rechnung gestellt.
Hinweis: Diese Option ist nur für ein Abo-Upgrade verfügbar. |
IMMEDIATE_WITHOUT_PRORATION |
Der Austausch tritt sofort in Kraft und der neue Preis wird bei der nächsten Wiederholung in Rechnung gestellt. Der Abrechnungszeitraum bleibt gleich. |
replaceSkusProration
wird in der Klasse BillingFlowParams
nicht mehr unterstützt
Bisher konnten Entwickler ein boolesches Flag festlegen, um einen anteiligen Betrag für einen Abo-Upgrade-Antrag zu berechnen. Da wir ProrationMode
unterstützen, das detailliertere Informationen zur Kulanzregelung enthält, wird dieses boolesche Flag nicht mehr unterstützt.
launchBillingFlow()
löst jetzt einen Rückruf bei fehlgeschlagenen Antworten aus
Die Billing Library löst immer den PurhcasesUpdatedListener
-Callback aus und gibt asynchron einen BillingResponse
zurück. Der synchrone Rückgabewert von BillingResponse
bleibt ebenfalls erhalten.
Fehlerkorrekturen
- Beendet asynchrone Methoden korrekt, wenn die Verbindung zum Dienst getrennt wird.
Builder
Param-Objekte verändern keine erstellten Objekte mehr.- Problem 68087141:
launchBillingFlow()
löst jetzt einen Rückruf bei fehlgeschlagenen Antworten aus.
Veröffentlichung der Google Play Billing Library 1.0 (19.09.2017, Ankündigung)
Version 1.0 der Google Play Billing Library ist jetzt verfügbar. Diese Version enthält die folgenden Änderungen:
Wichtige Änderungen
- Eingebettete Abrechnungsberechtigung im Manifest der Bibliothek. Sie müssen die Berechtigung
com.android.vending.BILLING
nicht mehr im Android-Manifest hinzufügen. - Der Klasse
BillingClient.Builder
wurde ein neuer Builder hinzugefügt. - Einführung des Builder-Musters für die Klasse
SkuDetailsParams
, die für Methoden zum Abfragen von Artikelnummern verwendet werden soll. - Mehrere API-Methoden wurden einheitlich gestaltet (Namen und Reihenfolge der Rückgabeargumente).
Geändertes Verhalten
Version 1.0 der Google Play Billing Library enthält die folgenden Verhaltensänderungen.
Klasse BillingClient.Builder
BillingClient.Builder
wird jetzt über das newBuilder-Muster initialisiert:
Kotlin
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Java
billingClient = BillingClient.newBuilder(context).setListener(this).build();
Die Methode „launchBillingFlow“ wird jetzt mit einer Klasse „BillingFlowParams“ aufgerufen.
Um den Abrechnungsvorgang für einen Kauf oder ein Abo zu starten, wird der Methode launchBillingFlow()
eine BillingFlowParams
-Instanz übergeben, die mit Parametern für die Anfrage initialisiert wurde:
Kotlin
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
Java
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
Neue Möglichkeit zur Abfrage verfügbarer Produkte
Die Argumente für die Methoden queryPurchaseHistoryAsync()
und querySkuDetailsAsync()
wurden in ein Builder-Muster verpackt:
Kotlin
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
Java
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
Das Ergebnis wird jetzt über einen Ergebniscode und eine Liste von SkuDetails
-Objekten anstelle der vorherigen Wrapper-Klasse zurückgegeben, um für mehr Nutzerfreundlichkeit und Einheitlichkeit in unserer API zu sorgen:
Kotlin
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Java
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Reihenfolge der Parameter bei der Methode onConsumeResponse()
geändert
Die Reihenfolge der Argumente für onConsumeResponse
über die Benutzeroberfläche ConsumeResponseListener
wurde geändert, um für die gesamte API einheitlich zu sein:
Kotlin
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Java
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Entpacktes PurchaseResult-Objekt
PurchaseResult
wurde entpackt, um für Einheitlichkeit in unserer API zu sorgen:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Fehlerkorrekturen
- Kein Antwortcode im PURCHASES_UPDATED-Bundle
- Probleme mit ProxyBillingActivity und PurchasesUpdatedListener beim Drehen des Geräts behoben
Version 1 der Entwicklervorschau (12. Juni 2017, Ankündigung)
Einführung der Entwicklervorschau, die den Entwicklungsprozess im Hinblick auf die Abrechnung vereinfachen soll. So können sich Entwickler darauf konzentrieren, die für die Android-App spezifische Logik zu implementieren, z. B. die Anwendungsarchitektur und die Navigationsstruktur.
Die Bibliothek enthält mehrere praktische Klassen und Funktionen, die Sie bei der Einbindung Ihrer Android-Apps in die Google Play Billing API verwenden können. Die Bibliothek bietet außerdem eine Abstraktionsschicht über dem Android Interface Definition Language (AIDL)-Dienst, die es Entwicklern erleichtert, die Schnittstelle zwischen der App und der Google Play Billing API zu definieren.