Hier wird die Migration von Google Play Billing Library 4 oder 5 zu Google Play Billing Library 6 und die Verwendung neuer Abofunktionen.
Eine vollständige Liste der Änderungen in Version 6.0.0 finden Sie im Release Notizen.
Übersicht
Google Play Billing Library 6 baut auf den neuen Abofunktionen auf in Version 5 verbessert und einige weitere Verbesserungen vorgenommen. Mit diesen Funktionen können Sie Abonnements zu erweitern und die Betriebskosten zu senken, um eine ständig wachsende Zahl von SKUs zu erstellen und zu verwalten.
Weitere Informationen zu den neuen Funktionen, die mit Play Billing Library eingeführt wurden 5 Siehe Kürzliche Änderungen an Abos bei Google Play Console
Abwärtskompatibles Upgrade der Play Billing Library
Alle vorhandenen Aboprodukte wurden automatisch auf das neue Abo umgestellt im Mai 2022 von Play Billing Library 5 und der neuen Version Aboplattform. Sie müssen also kein Abo abschließen, Änderungen an der Produktkonfiguration, um einen Katalog zu haben, der mit dem neuen der Play Billing Library. Weitere Informationen zum SKUs wurden in abwärtskompatible Abos umgewandelt, siehe Funktionierende mit älteren Abos in der Play Console-Hilfe Artikel
Ältere Versionen der App funktionieren weiterhin
Wenn Sie einen abwärtskompatiblen Abokatalog haben, werden alle bestehenden Versionen Ihrer App sollte weiterhin wie vorgesehen für diese Produkte funktionieren. Einmalkaufprodukt sollten auch in älteren Versionen weiterhin problemlos funktionieren.
Versionen Ihrer App, für die eingestellte Methoden verwendet werden (z. B.
querySkuDetailsAsync()
)
können keine Basis-Abos oder Angebote
verkauft werden, die nicht rückwirkend
kompatibel sind. Informationen zu abwärtskompatiblen Angeboten finden Sie in den entsprechenden Google Play-
Console-Hilfe
Upgrade auf Play Billing Library 5 oder 6 durchführen
Play Billing Library 5 und 6 enthalten die eingestellten Methoden
Mit querySkuDetailsAsync
und BillingFlowParams.Builder.setSkuDetails
SkuDetails
als Abrechnung
Flow-Parameter. Du kannst also schrittweise zu Play Billing Library 6 wechseln.
indem Sie verschiedene Migrationsphasen planen.
Als ersten Schritt der Migration können Sie einfach die Bibliothek aktualisieren
Version, lassen Sie Katalog und Back-End unverändert und testen Sie
die nicht mehr unterstützt werden,
während sie noch die eingestellten Methoden verwendet. Wenn Sie nicht
queryPurchases
, launchPriceChangeFlow
oder setVrPurchaseFlow
sollte sie
weiterhin wie vorgesehen funktionieren. Anschließend können Sie iterieren, um die neue
Abofunktionen, die im Mai 2022 veröffentlicht wurden.
Wenn du diese Funktionen zuvor mit einer Google Play Billing Library verwendet hast 5 Migrationen verwenden, können Sie direkt zu den Abschnitten Google aktualisieren Play Billing Library und Abo eines Nutzers ändern Käufe. Wenn Sie mit einer früheren Version beginnen oder die neuen Funktionen noch nicht vollständig übernommen haben, lesen Sie die vollständige Migration die folgenden Schritte, um zu erfahren, wie Sie sie umsetzen können.
Vollständige Migrationsschritte
Neue Abos in Ihrem Backend-Produktkatalog erstellen
Mit der Play Developer Console oder der Play Developer API kannst du jetzt konfigurieren Sie ein einzelnes Abo mit mehreren Basis-Abos mit jeweils mehreren Angebote. Aboangebote haben flexible Preismodelle und Berechtigungsoptionen. Du kannst während des Abolebenszyklus Angebote mit einer Vielzahl von mit automatischer Verlängerung und Prepaid-Tarifen.
Wir empfehlen, neue Produkte gemäß der Entitätsstruktur in der neuen Aboplattform für die Integration von Play Billing Library 6 die Migration Ihrer App. Sie können doppelte Produkte in Ihrem alten Katalog zusammenfassen. die dieselben Berechtigungsvorteile im Rahmen eines einzelnen Abos und einer einzigen Nutzung darstellen Basis-Abo- und Angebotskonfigurationen für alle gewünschten Optionen zu bieten. Weitere Informationen zu dieser Empfehlung finden Sie im Artikel Zusammenarbeit mit „Ältere Abos“ in der Play Console-Hilfe Artikel
Wir empfehlen, die umgewandelten Aboprodukte nach dem
Version Mai 2022: sollten Sie sie so belassen, wie sie mit den Versionen
in Ihrer App nicht mehr unterstützte Methoden wie querySkuDetailsAsync()
verwenden, ohne Änderungen vorzunehmen,
ältere Builds beeinträchtigen könnten.
Durch die Umwandlung wurden die Aboprodukte aus Ihrem Katalog erstellt. vor Mai 2022 schreibgeschützt. So lassen sich versehentliche Änderungen vermeiden, die zu mit Ihrer bestehenden Integration. Änderungen an diesen Abos möglich, aber es würden Auswirkungen geben, die sich auf Ihr Front-End und Back-End-Integrationen:
Im Front-End werden Anwendungsversionen mit
querySkuDetailsAsync()
abgerufen, Über Aboproduktdetails können nur abwärtskompatible Basis-Abos verkauft werden und Angebote, und es kann nur ein abwärtskompatibles Basis-Abo und Angebot geben Wenn Sie den umgewandelten Abos neue Tarife oder Angebote hinzufügen, können die neuen zusätzlichen Basis-Abos oder Angebote nicht Versionen Ihrer App.Wenn Sie im Backend Ihre umgewandelten Abos in der Play Console-UI kannst du sie nicht mit dem
inappproducts
verwalten. -Endpunkt angeben, wenn Sie den Endpunkt zu diesem Zweck aufrufen. Außerdem sollten Sie Zum neuen Endpunkt für den Abokaufstatus (purchases.subscriptionsv2.get
) migrieren, um Käufe zu verwalten für diese Abos, da der alte Kaufstatus-Endpunkt (purchases.subscriptions.get
) nur die Daten, die zur Verarbeitung abwärtskompatibler Basis-Abos und Angebote erforderlich sind Käufe. Weitere Informationen zum Verwalten des Abokaufstatus finden Sie weitere Informationen.
Backend-Abokatalog mit der neuen API verwalten
Wenn Sie Ihren Aboproduktkatalog automatisch mit dem Google Play Developer API, du musst das neue Aboprodukt verwenden Definieren von Endpunkten, um Abos, Basis-Abos und Angebote zu erstellen und zu verwalten. Abofunktionen für Mai 2022 lesen Leitfaden finden Sie weitere Informationen zu den Änderungen an der Product Catalog API für diesen Release.
So migrieren Sie ein Modul zur automatischen
Produktkatalogverwaltung für
Google Play Billing-Abos ersetzen, ersetzen Sie
inappproducts
API mit der neuen Subscription Publishing API zum Verwalten und Veröffentlichen
in Ihrem Abokatalog. Es gibt drei neue Endpunkte:
Monetization.subscriptions
Aboprodukte zu verwalten.Monetization.basePlans
um Basis-Abos für Abos zu verwalten.Monetization.offers
um Angebote für Basis-Abos zu verwalten.
Diese neuen Endpunkte bieten alle notwendigen Funktionen, um neue Funktionen in Ihrem Katalog: Basis-Abo- und Angebots-Tags, regionales Targeting, Prepaid-Tarife und mehr.
Sie sollten die Methode
inappproducts
API zur Verwaltung Ihres In-App-Produktkatalogs für Produkte mit Einmalkauf.
Über Versionen Ihrer App, für die eingestellte Methoden verwendet werden (z. B. querySkuDetailsAsync()
), können keine Basis-Abos oder Angebote verkauft werden, die nicht abwärtskompatibel sind. Weitere Informationen zu abwärtskompatiblen Angeboten
Google Play Billing Library aktualisieren
Nachdem Sie Ihren neuen Aboproduktkatalog erstellt haben,
können Sie Ihre Anwendung zu Google Billing Library 5 migrieren. Vorhandene
Play Billing Library-Abhängigkeit mit der aktualisierten Version zu
die Datei build.gradle
Ihrer App.
dependencies {
def billingVersion = "6.0.0"
implementation "com.android.billingclient:billing:$billingVersion"
}
Ihr Projekt sollte sofort erstellt werden, auch wenn Sie keine Aufrufe für -Methoden: Play Billing Library 6 ist abwärtskompatibel. Das Konzept einer Artikelnummer ist als veraltet betrachtet, aber dennoch vorhanden, um die Portierung von Apps zu vereinfachen schrittweisen Prozess.
Billing Client initialisieren und eine Verbindung zu Google Play herstellen
Die ersten Schritte zum Starten von Käufen über eine Android-App bleiben gleich:
Zum Kauf verfügbare Produkte anzeigen
So erhalten Sie alle Angebote, die ein Nutzer erwerben kann:
SkuDetailsParams
durchQueryProductDetailsParams
ersetzenBillingClient.querySkuDetailsAsync()
-Anruf wechseln umBillingClient.queryProductDetailsAsync()
zu verwenden
Beachten Sie, dass die Abfrageergebnisse jetzt ProductDetails
statt SkuDetails
sind.
Jeder ProductDetails
-Artikel enthält Informationen zum Produkt
(ID, Titel, Typ usw.). Für Aboprodukte: ProductDetails
enthält ein List<ProductDetails.SubscriptionOfferDetails>
. Dies ist die
Liste der Details zum Aboangebot. Bei Einmalkaufprodukten
ProductDetails
enthält einen ProductDetails.OneTimePurchaseOfferDetails
. Diese
können verwendet werden, um zu entscheiden, welche Angebote den Nutzern angezeigt werden.
Das folgende Beispiel zeigt, wie Ihre App vorher und nachher aussehen könnte diese Änderungen vornehmen:
Vorher
Kotlin
val skuList = ArrayList<String>() skuList.add("up_basic_sub") val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build() billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList -> // Process the result }
Java
List<String> skuList = new ArrayList<>(); skuList.add("up_basic_sub"); SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList).setType(SkuType.SUBS).build(); billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { // Process the result. } } );
Nachher
Kotlin
val productList = listOf( QueryProductDetailsParams.Product.newBuilder() .setProductId("up_basic_sub") .setProductType(BillingClient.ProductType.SUBS) .build() ) val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build() billingClient.queryProductDetailsAsync(params) { billingResult, productDetailsList -> // Process the result }
Java
ImmutableList<Product> productList = ImmutableList.of(Product.newBuilder() .setProductId("up_basic_sub") .setProductType(ProductType.SUBS) .build()); QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder() .setProductList(productList) .build(); billingClient.queryProductDetailsAsync( params, new ProductDetailsResponseListener() { public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) { // Process the result } } );
Der Callback für queryProductDetailsAsync
gibt List<ProductDetails>
zurück.
Jeder ProductDetails
-Artikel enthält Informationen zum Produkt
(ID, Titel, Typ usw.). Der Hauptunterschied ist, dass ein Abo
Produkte enthalten jetzt auch ein List<ProductDetails.SubscriptionOfferDetails>
die alle für den Nutzer verfügbaren Angebote enthält.
Da frühere Versionen der Play Billing Library das neue
Objekte (Abos, Basis-Abos, Angebote usw.) und das neue System
wandelt jede Abo-Artikelnummer in eine einzige abwärtskompatible
Basis-Abo und Angebot. Verfügbare Produkte mit einmaligem Kauf sind auch
in ein ProductDetails
-Objekt portiert wurden. Die Angebotsdetails einer einmaligen
kann über die
getOneTimePurchaseOfferDetails()
-Methode.
In seltenen Fällen können ProductDetails
und queryProductDetailsAsync()
von einigen Geräten nicht unterstützt werden.
ist meist auf veraltete Versionen
Google Play-Dienste. Um sicherzustellen,
Unterstützung für dieses Szenario erhalten, rufen Sie uns unter
isFeatureSupported()
für PRODUCT_DETAILS
bevor queryProductDetailsAsync
aufgerufen wird. Wenn die Antwort
OK
,
das Gerät die Funktion unterstützt und du kannst mit dem Aufrufen von queryProductDetailsAsync()
fortfahren.
Wenn die Antwort FEATURE_NOT_SUPPORTED
ist,
können Sie stattdessen die Liste der verfügbaren abwärtskompatiblen Produkte
querySkuDetailsAsync()
Weitere Informationen zur Verwendung der Abwärtskompatibilität
finden Sie im Leitfaden zu den Abofunktionen für Mai 2022.
Kaufvorgang für das Angebot starten
Das Starten eines Kaufvorgangs für ein Angebot ist dem Starten eines Ablaufs sehr ähnlich. für eine Artikelnummer. So starten Sie eine Kaufanfrage in Version 6:
- Anstatt
SkuDetails
fürBillingFlowParams
zu verwenden, Verwenden SieProductDetailsParams
. - Angebotsdetails wie Angebots-ID, Basis-Abo-ID und mehr können über die
SubscriptionOfferDetails
abgerufen werden -Objekt enthält.
Hol dir die offerToken
, um ein Produkt mit dem ausgewählten Angebot des Nutzers zu kaufen
des ausgewählten Angebots und übergeben es an das ProductDetailsParams
-Objekt.
Sobald du ein BillingFlowParams
-Objekt erstellt hast, wird der Abrechnungsablauf gestartet.
mit BillingClient
bleibt gleich.
Das folgende Beispiel zeigt, wie Ihre App vorher und nachher aussehen könnte diese Änderungen vornehmen:
Vorher
Kotlin
// An activity reference from which the billing flow will be launched. val activity : Activity = ... // Retrieve a value for "skuDetails" by calling querySkuDetailsAsync(). val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
Java
// An activity reference from which the billing flow will be launched. Activity activity = ...; // Retrieve a value for "skuDetails" by calling querySkuDetailsAsync(). BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
Nachher
Kotlin
// An activity reference from which the billing flow will be launched. val activity : Activity = ...; val productDetailsParamsList = listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // For One-time product, "setOfferToken" method shouldn't be called. // For subscriptions, to get the offer token corresponding to the selected // offer call productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken .setOfferToken(selectedOfferToken) .build() ) val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build() // Launch the billing flow val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
Java
// An activity reference from which the billing flow will be launched. Activity activity = ...; ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // For one-time products, "setOfferToken" method shouldn't be called. // For subscriptions, to get the offer token corresponding to the selected // offer call productDetails.getSubscriptionOfferDetails().get(selectedOfferIndex).getOfferToken() .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
Käufe verarbeiten
Die Verarbeitung von Käufen mit Google Play Billing Library 6 bleibt ähnlich vorherigen Versionen.
Um alle aktiven Käufe des Nutzers abzurufen und nach neuen zu suchen Käufe gehen Sie so vor:
- Anstatt einen
BillingClient.SkuType
-Wert anqueryPurchasesAsync()
, übergeben Sie einQueryPurchasesParams
-Objekt die einenBillingClient.ProductType
-Wert enthält.
Das folgende Beispiel zeigt, wie Ihre App aussehen könnte, nachdem Sie diese Änderungen vorgenommen haben:
Vorher
Kotlin
billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) { billingResult, purchaseList -> { // Process the result } }
Java
billingClient.queryPurchasesAsync( BillingClient.SkuType.SUBS, new PurchasesResponseListener() { public void onQueryPurchasesResponse( BillingResult billingResult, ListP<urchase >purchases) { // process the result } } );
Nachher
Kotlin
billingClient.queryPurchasesAsync( QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.SUBS) .build() ) { billingResult, purchaseList -> // Process the result }
Java
billingClient.queryPurchasesAsync( QueryPurchasesParams.newBuilder().setProductType(ProductType.SUBS).build(), new PurchasesResponseListener() { public void onQueryPurchasesResponse( BillingResult billingResult, List<Purchase> purchases) { // Process the result } } );
So verwaltest du Käufe außerhalb der App und ausstehenden Transaktionen nicht verändert haben.
Verwalte den Abokaufstatus mit der neuen API in deinem Backend
Sie sollten Ihre Komponente zur Verwaltung des Kaufstatus von Abos migrieren in Ihrem Backend, um den Kauf der neu erstellten Produkte in den vorherigen Schritten. Verwaltung des Kaufstatus deiner aktuellen Abos wie gewohnt für die umgestellten Aboprodukte funktionieren. vor der Einführung im Mai 2022 definiert wurden und ausreichen, von abwärtskompatiblen Angeboten, unterstützt jedoch keine der neuen Funktionen.
Du musst die neue Subscription Purchases API für deine Verwaltungsmodul für den Kaufstatus von Abos, das den Kauf und verwaltet Play Billing-Aboberechtigungen in deinem Backend. In der alten Version der API werden nicht alle für die Verwaltung erforderlichen Details zurückgegeben. auf der neuen Plattform. Details zu den Änderungen gegenüber früheren Versionen Weitere Informationen zu den neuen Abofunktionen im Mai 2022
Normalerweise würdest du die Subscription Purchases API jedes Mal aufrufen, wenn du eine
SubscriptionNotification
Real Time Developer Notification zum Abrufen der
aktuelle Informationen zum Abostatus. Du musst dein Gerät
purchases.subscriptions.get
-Aufrufe mit der neuen Version von
die Subscription Purchases API, purchases.subscriptionsv2.get
.
Es gibt eine neue Ressource namens
SubscriptionPurchaseV2
die genügend Informationen liefern,
Informationen zum Verwalten der Kaufberechtigung für Abos im neuen Modell.
Dieser neue Endpunkt gibt den Status für alle Ihre Aboprodukte und und zwar unabhängig von der Version der App, über die sie verkauft wurden, und wann das Produkt definiert wurde (vor oder nach dem Release vom Mai 2022), Nach der Migration benötigen Sie also nur diese Version Ihres Abos Kaufstatus-Verwaltungsmodul.
Abokäufe eines Nutzers ändern
In Play Billing Library 5 und niedriger
ProrationMode
wurde verwendet, um Änderungen an den Abokäufen eines Nutzers vorzunehmen, z. B. Upgrades
oder Downgrades. Diese Funktion wurde eingestellt und ersetzt durch:
ReplacementMode
in Version 6.
Umgang mit Änderungen der Abopreise
Die zuvor verworfene launchPriceConfirmationFlow
API wurde entfernt in
Play Billing Library 6. Alternativen findest du in den Preisänderungen
.
Fehler bei der Play Billing Library beheben
In Play Billing Library 6 wurde ein neuer NETWORK_ERROR
-Code hinzugefügt, um anzugeben,
Probleme mit der Netzwerkverbindung zwischen dem Gerät des Nutzers und dem
Play-System. Auch die Codes SERVICE_TIMEOUT
und
SERVICE_UNAVAILABLE
. Weitere Informationen findest du unter BillingResult-Antwort verarbeiten
Codes.
Ausstehende Transaktionen verarbeiten
Ab Version 6.0.0 wird von der Play Billing Library keine Bestellung erstellt
ID für ausstehende Käufe. Bei diesen Käufen wird die Bestell-ID nach dem
wird der Kauf in den
PURCHASED
Bundesstaat. Achten Sie darauf, dass Ihre Integration erst nach einer
Transaktion vollständig abgeschlossen ist. Du kannst das Kauftoken weiterhin für dein
Datensätze. Weitere Informationen zum Umgang mit ausstehenden Käufen findest du in der Google Play-
Integrationsleitfaden für Billing Library und
Leitfaden zur Verwaltung des Kauflebenszyklus.