In diesem Dokument wird die Einbindung Ihrer Einmalkaufprodukte in die Play Billing Library beschrieben. Außerdem wird erläutert, wie Sie verschiedene Kaufoptionen und Angebote für Ihre Einmalkaufprodukte einbinden.
Sie können mehrere Kaufoptionen und Angebote für Ihre Einmalkaufprodukte konfigurieren. Beispielsweise können Sie für dasselbe Einmalkaufprodukt eine Kaufoption vom Typ „Kaufen“ und ein Vorbesteller-Angebot konfigurieren.
Vorbereitung
Wenn Sie mehrere Angebote für Einmalkaufprodukte konfigurieren möchten, müssen Sie die
queryProductDetailsAsync() API verwenden. Die eingestellte API querySkuDetailsAsync() wird nicht unterstützt. Informationen zur Verwendung von
queryProductDetailsAsync() und der Version von launchBillingFlow()
, die ProductDetailsParams als Eingabe akzeptiert, finden Sie unter Migrationsschritte.
Produktdetails abfragen
Wenn Sie mehrere Angebote oder Kaufoptionen für Ihr Einmalkauf
produkt konfiguriert haben, kann das ProductDetails-Objekt, das von der
queryProductDetailsAsync()-Methode zurückgegeben wird, mehr als eine verfügbare Kaufoption vom Typ „Kaufen“
und/oder „Ausleihen“ pro Einmalkaufprodukt enthalten. Verwenden Sie die
getOneTimePurchaseOfferDetailsList() Methode, um die Liste aller
infrage kommenden Angebote für jedes ProductDetails Objekt abzurufen. In dieser Liste werden nur Angebote und Kaufoptionen zurückgegeben, für die der Nutzer infrage kommt. Ihr Code
in der onProductDetailsResponse() Methode muss die zurückgegebenen
Angebote verarbeiten.
Abrechnungsvorgang starten
Wenn Sie eine Kaufanfrage über Ihre App starten möchten, rufen Sie die launchBillingFlow()
Methode im Hauptthread Ihrer App auf. Diese Methode verwendet einen Verweis auf ein
BillingFlowParams-Objekt, das das relevante ProductDetails
-Objekt enthält, das durch Aufrufen von queryProductDetailsAsync() abgerufen wurde. Verwenden Sie die BillingFlowParams.Builder
Klasse, um ein
BillingFlowParams-Objekt zu erstellen. Beachten Sie, dass Sie beim Erstellen des BillingFlowParams-Objekts das Angebotstoken für das vom Nutzer ausgewählte Angebot
festlegen müssen.
Das folgende Beispiel zeigt, wie Sie den Kaufvorgang für ein Einmalkaufprodukt mit mehreren Angeboten starten:
Java
// An activity reference from which the billing flow will launch. Activity activity = ...; ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // to get an offer token, call // ProductDetails.getOneTimePurchaseOfferDetailsList() for a list of offers // that are available to the user .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
Das offerToken finden Sie in den OneTimePurchaseOfferDetails. Wenn Sie dem Nutzer das Angebot präsentieren, müssen Sie die Parameter für den Abrechnungsvorgang mit dem richtigen Angebotstoken konfigurieren. Dieses erhalten Sie über die Methode oneTimePurchaseOfferDetails.getOfferToken().
Kaufoptionen und Angebote
Mit einer Kaufoption können Sie definieren, wie dem Nutzer die Berechtigung gewährt wird, außerdem den Preis und in welcher Region das Produkt verfügbar ist. Für ein einzelnes Produkt können mehrere Kaufoptionen gelten, die darstellen, wo und wie Sie Ihr Produkt verkaufen.
Google Play unterstützt die folgenden Kaufoptionen für Einmalkaufprodukte:
- Kaufoption „Kaufen“
- Kaufoption „Ausleihen“
Angebote beziehen sich auf ein Preisschema, das Sie für Ihre Einmalkaufprodukte erstellen können. Sie können beispielsweise ein Rabattangebot für Ihr Einmalkaufprodukt erstellen.
Google Play unterstützt die folgenden Kaufangebote für Einmalkaufprodukte:
- Vorbesteller-Angebot (wird nur für die Kaufoption „Kaufen“ unterstützt)
- Rabattangebot (wird für die Kaufoptionen „Kaufen“ und „Ausleihen“ unterstützt)
Kaufoption „Kaufen“
Die Kaufoption „Kaufen“ steht für den Standardkauf des Einmalkaufprodukts. Sie hat ein optionales Feld `legacyCompatible`, das angibt, ob diese Kaufoption in älteren Play Billing Library-Abläufen (Version 7 oder älter) verfügbar ist, die das neue Modell nicht unterstützen. Aus Gründen der Abwärtskompatibilität sollte mindestens eine Kaufoption vom Typ „Kaufen“ als mit alten Versionen kompatibel gekennzeichnet sein.
Die Schritte zum Einbinden der Kaufoptionen „Kaufen“ und „Ausleihen“ in die PBL sind identisch. Informationen zum Einbinden der Kaufoption „Kaufen“ in die PBL finden Sie unter siehe Kaufoption „Ausleihen“ in die PBL einbinden.
Kaufoption „Ausleihen“
Mit der Kaufoption „Ausleihen“ können Nutzer für einen bestimmten Zeitraum auf die Einmalkaufprodukte zugreifen. Sie können die Leihdauer und das Ablaufdatum angeben. In diesem Dokument werden die Schritte zum Einbinden der Kaufoption „Ausleihen“ in die Play Billing Library (PBL) beschrieben.
Kaufoption „Ausleihen“ in die PBL einbinden
In diesem Abschnitt wird beschrieben, wie Sie die Kaufoption „Ausleihen“ in die Play Billing Library (PBL) einbinden. Dabei wird davon ausgegangen, dass Sie mit den ersten Schritten zur PBL Einbindung vertraut sind, z. B. dem Hinzufügen der PBL-Abhängigkeit zu Ihrer App, Initialisieren von BillingClient und dem Herstellen einer Verbindung zu Google Play. In diesem Abschnitt werden die Aspekte der PBL-Einbindung behandelt, die spezifisch für die Kaufoption „Ausleihen“ sind.
Wenn Sie Produkte konfigurieren möchten, die zum Ausleihen verfügbar sind, müssen Sie den neuen Dienst monetization.onetimeproducts der Play Developer API oder die Play Developer Console-UI verwenden. Wenn Sie den Dienst verwenden möchten, können Sie die REST API direkt aufrufen oder
die Java-Clientbibliothek verwenden.
Kaufvorgang für die Option „Ausleihen“ starten
So starten Sie einen Kaufvorgang für ein Leihangebot:
Rufen Sie die Metadaten der Kaufoption „Ausleihen“ mit der
ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails()Methode ab.Das folgende Beispiel zeigt, wie Sie die Metadaten der Kaufoption „Ausleihen“ abrufen:
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a rent purchase option. if (oneTimePurchaseOfferDetails.getRentalDetails() != null) { // process the returned RentalDetails OneTimePurchaseOfferDetails.RentalDetails rentalDetails = oneTimePurchaseOfferDetails.getRentalDetails(); // Get rental period in ISO 8601 format. String rentalPeriod = rentalDetails.getRentalPeriod(); // Get rental expiration period in ISO 8601 format, if present. if (rentalDetails.getRentalExpirationPeriod() != null) { String rentalExpirationPeriod = rentalDetails.getRentalExpirationPeriod(); } // Get offer token String offerToken = oneTimePurchaseOfferDetails.getOfferToken(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } });
Starten Sie den Abrechnungsvorgang.
Wenn Sie eine Kaufanfrage über Ihre App starten möchten, rufen Sie die
launchBillingFlow()Methode im Hauptthread Ihrer App auf. Diese Methode verwendet einen Verweis auf einBillingFlowParams-Objekt, das das relevanteProductDetails-Objekt enthält, das durch Aufrufen vonqueryProductDetailsAsync()abgerufen wurde. Verwenden Sie dieBillingFlowParams.BuilderKlasse, um einBillingFlowParamsObjekt zu erstellen. Beachten Sie, dass Sie beim Erstellen desBillingFlowParams-Objekts das Angebotstoken für das vom Nutzer ausgewählte Angebot festlegen müssen, Wenn ein Nutzer für die Kaufoption „Ausleihen“ infrage kommt, erhält er inqueryProductDetailsAsync()ein Angebot mit RentalDetails und offerId.Das folgende Beispiel zeigt, wie Sie den Abrechnungsvorgang starten:
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) // Get the offer token: // a. For one-time products, call ProductDetails.getOneTimePurchaseOfferDetailsList() // for a list of offers that are available to the user. // b. For subscriptions, call ProductDetails.getSubscriptionOfferDetails() // for a list of offers that are available to the user. .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<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = ImmutableList.of( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // Get the offer token: // a. For one-time products, call ProductDetails.getOneTimePurchaseOfferDetailsList() // for a list of offers that are available to the user. // b. For subscriptions, call ProductDetails.getSubscriptionOfferDetails() // for a list of offers that are available to the user. .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
Das
offerTokenfinden Sie in denOneTimePurchaseOfferDetails. Wenn Sie dem Nutzer das Angebot präsentieren, müssen Sie die Parameter für den Abrechnungsvorgang mit dem richtigen Angebotstoken konfigurieren. Dieses erhalten Sie über die MethodeoneTimePurchaseOfferDetails.getOfferToken().
Vorbesteller-Angebot
Mit der Vorbestellung können Sie Einmalkaufprodukte so einrichten, dass sie vor der Veröffentlichung gekauft werden können. Wenn ein Nutzer Ihr Produkt vorbestellt, erklärt er sich damit einverstanden, für den Artikel zu bezahlen, wenn das Produkt veröffentlicht wird, es sei denn, der Nutzer storniert die Vorbestellung vor dem Datum der Veröffentlichung. Am Datum der Veröffentlichung wird dem Käufer der Betrag in Rechnung gestellt und er erhält von Google Play eine E‑Mail-Benachrichtigung über die Veröffentlichung des Artikels.
In diesem Dokument werden die Schritte zum Einbinden des Vorbesteller-Kaufangebots in die Play Billing Library (PBL) beschrieben.
Vorbesteller-Angebot in die PBL einbinden
In diesem Abschnitt wird beschrieben, wie Sie das Vorbesteller-Angebot in die Play Billing Library (PBL) einbinden. Dabei wird davon ausgegangen, dass Sie mit den ersten Schritten zur PBL Einbindung vertraut sind, z. B. dem Hinzufügen der PBL-Abhängigkeit zu Ihrer App, Initialisieren von BillingClient und dem Herstellen einer Verbindung zu Google Play. In diesem Abschnitt werden die Aspekte der PBL-Einbindung behandelt, die spezifisch für das Vorbesteller-Angebot sind.
Kaufvorgang für ein Vorbesteller-Angebot starten
So starten Sie einen Kaufvorgang für ein Vorbesteller-Angebot:
Rufen Sie die Metadaten des Vorbesteller-Angebots mit der
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()Methode ab. Das folgende Beispiel zeigt, wie Sie die Metadaten des Vorbesteller-Angebots abrufen:Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a preorder offer. if (oneTimePurchaseOfferDetails.getPreorderDetails() != null) { // process the returned PreorderDetails OneTimePurchaseOfferDetails.PreorderDetails preorderDetails = oneTimePurchaseOfferDetails.getPreorderDetails(); // Get preorder release time in millis. long preorderReleaseTimeMillis = preorderDetails.getPreorderReleaseTimeMillis(); // Get preorder presale end time in millis. long preorderPresaleEndTimeMillis = preorderDetails.getPreorderPresaleEndTimeMillis(); // Get offer ID String offerId = oneTimePurchaseOfferDetails.getOfferId(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } });
Starten Sie den Abrechnungsvorgang.
Wenn Sie eine Kaufanfrage über Ihre App starten möchten, rufen Sie die Methode
launchBillingFlow()im Hauptthread Ihrer App auf. Diese Methode verwendet einen Verweis auf einBillingFlowParams-Objekt, das das relevanteProductDetails-Objekt enthält, das durch Aufrufen von queryProductDetailsAsync() abgerufen wurde. Verwenden Sie dieBillingFlowParams.Builder class, um einBillingFlowParams-Objekt zu erstellen. Beachten Sie, dass Sie beim Erstellen desBillingFlowParams-Objekts das Angebot token für das vom Nutzer ausgewählte Angebot festlegen müssen. Wenn ein Nutzer für das Vorbesteller-Angebot infrage kommt, erhält er in der MethodequeryProductDetailsAsync()ein Angebot mit PreorderDetails und offerId.Das folgende Beispiel zeigt, wie Sie den Abrechnungsvorgang starten:
Java
// An activity reference from which the billing flow will launch. Activity activity = ...; ImmutableList productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for productDetails by calling queryProductDetailsAsync() .setProductDetails(productDetails) // to get an offer token, call // ProductDetails.getOneTimePurchaseOfferDetailsList() for a list of offers // that are available to the user .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
Das
offerTokenfinden Sie in denOneTimePurchaseOfferDetails. Wenn Sie dem Nutzer das Angebot präsentieren, müssen Sie die Parameter für den Abrechnungsvorgang mit dem richtigen Angebotstoken konfigurieren. Dieses erhalten Sie über die MethodeoneTimePurchaseOfferDetails.getOfferToken().
Rabattangebot
In diesem Abschnitt wird beschrieben, wie Sie Rabattangebote für Ihre Einmalkaufprodukte konfigurieren können.
Es gibt vier verschiedene Parameter, die Sie in einem Rabattangebot für Einmalkaufprodukte konfigurieren können:
Preis des Rabattangebots: Gibt Details zum prozentualen oder absoluten Rabatt auf den Originalpreis an.
Länder oder Regionen, für die das Angebot gilt: Gibt die Verfügbarkeit von Angeboten für Einmalkaufprodukte in einem Land oder einer Region an.
Kauflimit (optional): Hiermit können Sie festlegen, wie oft ein Nutzer dasselbe Angebot einlösen kann. Wenn ein Nutzer das Kauflimit überschreitet, kommt er für das Angebot nicht infrage.
Zeitlich begrenzt (optional): Gibt den Zeitraum an, in dem das Angebot verfügbar ist. Außerhalb dieses Zeitraums kann das Angebot nicht gekauft werden.
Informationen zum Preis des Rabattangebots abrufen
Für ein Rabattangebot können Sie den prozentualen Rabatt oder den Gesamtrabatt abrufen.
Beispiel 1: Prozentualen Rabatt des Rabattangebots abrufen
Das folgende Beispiel zeigt, wie Sie den ursprünglichen Vollpreis und den prozentualen Rabatt des Rabattangebots abrufen. Beachten Sie, dass die Informationen zum prozentualen Rabatt nur für Rabattangebote zurückgegeben werden.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult){ // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { long discountedOfferPriceMicros = oneTimePurchaseOfferDetails.getPriceAmountMicros(); // process the returned fullPriceMicros and percentageDiscount. if (oneTimePurchaseOfferDetails.getFullPriceMicros() != null) { long fullPriceMicros = oneTimePurchaseOfferDetails.getFullPriceMicros(); } if (oneTimePurchaseOfferDetails.getDiscountDisplayInfo() != null) { long percentageDiscount = oneTimePurchaseOfferDetails .getDiscountDisplayInfo() .getPercentageDiscount(); } // … } } } });
Beispiel 2: Gesamtrabatt des Rabattangebots abrufen
Das folgende Beispiel zeigt, wie Sie den ursprünglichen Vollpreis und den Gesamtrabatt des Rabattangebots in Mikros abrufen. Beachten Sie, dass die Informationen zum absoluten Rabatt in Mikros nur für Rabattangebote zurückgegeben werden. Für ein Rabattangebot muss entweder der absolute oder der prozentuale Rabatt angegeben werden.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { long discountedOfferPriceMicros = oneTimePurchaseOfferDetails.getPriceAmountMicros(); // process the returned fullPriceMicros and absolute DiscountAmountMicros. if (oneTimePurchaseOfferDetails.getFullPriceMicros() != null) { long fullPriceMicros = oneTimePurchaseOfferDetails.getFullPriceMicros(); } if (oneTimePurchaseOfferDetails.getDiscountDisplayInfo() != null) { long discountAmountMicros = oneTimePurchaseOfferDetails .getDiscountDisplayInfo() .getDiscountAmount() .getDiscountAmountMicros(); } // … } } } });
Gültigen Zeitraum eines Angebots abrufen
Mit der Methode OneTimePurchaseOfferDetails.getValidTimeWindow() können Sie den gültigen Zeitraum für ein Angebot abrufen. Dieses Objekt enthält die Start- und Endzeit des Zeitraums in Millisekunden.
Das folgende Beispiel zeigt, wie Sie den gültigen Zeitraum eines Angebots abrufen:
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { if (oneTimePurchaseOfferDetails.getValidTimeWindow() != null) { // process the returned startTimeMillis and endTimeMillis. ValidTimeWindow validTimeWindow = oneTimePurchaseOfferDetails.getValidTimeWindow(); long startTimeMillis = validTimeWindow.getStartTimeMillis(); long endTimeMillis = validTimeWindow.getEndTimeMillis(); // … } } } } });
Begrenzte Menge auf Ebene des Rabattangebots
Sie können das maximale Mengenlimit auf Ebene des Rabattangebots festlegen, das nur auf Angebotsebene angewendet wird. Hier ein Beispiel zur Veranschaulichung:
- „Super Screensavers“ hat zwei Angebote für das Produkt „Bildschirmschoner“: die Kaufoption „Bildschirmschoner“ und das Rabattangebot „Bildschirmschoner“.
- Für die Kaufoption „Bildschirmschoner“ ist keine begrenzte Menge eingerichtet.
- Für das Rabattangebot „Bildschirmschoner“ ist die maximal zulässige Menge auf Angebotsebene auf 3 festgelegt.
- Für das Produkt „Bildschirmschoner“ ist keine maximal zulässige Menge auf Produktebene festgelegt, sodass Nutzer unbegrenzt viele Einheiten dieses Produkts kaufen können.
- Der Nutzer besitzt einen Bildschirmschoner mit Rabatt und möchte einen weiteren mit dem Rabattangebot kaufen.
- Beim Abrufen der verfügbaren Angebote ist `LimitedQuantityInfo` für die Kaufoption „Bildschirmschoner“ null und die verbleibende Menge für das Rabattangebot „Bildschirmschoner“ ist 2.
Das folgende Beispiel zeigt, wie Sie die begrenzte Menge auf Ebene des Rabattangebots abrufen:
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { if (oneTimePurchaseOfferDetails.getLimitedQuantityInfo() != null) { // process the returned maximumQuantity and remainingQuantity. LimitedQuantityInfo limitedQuantityInfo = oneTimePurchaseOfferDetails.getLimitedQuantityInfo(); int maximumQuantity = limitedQuantityInfo.getMaximumQuantity(); int remainingQuantity = limitedQuantityInfo.getRemainingQuantity(); // … } } } } });
Wenn Nutzer die maximale Anzahl von Einlösungen für ein Angebot erreicht haben, wird das Angebot nicht von der Methode getOneTimePurchaseOfferDetailsList() zurückgegeben.
Einlöselimit berechnen
Das folgende Beispiel zeigt, wie Sie die Informationen zur begrenzten Menge für ein bestimmtes Rabattangebot abrufen. Sie können die maximal zulässige Menge und die verbleibende Menge für den aktuellen Nutzer abrufen. Beachten Sie, dass die Funktion für die begrenzte Menge sowohl für Angebote für verbrauchbare als auch für nicht verbrauchbare Einmalkaufprodukte gilt. Diese Funktion wird nur auf Angebotsebene unterstützt.
Google Play berechnet die verbleibende Menge, indem die Menge, die der Nutzer besitzt, von der von Ihnen festgelegten maximal zulässigen Menge subtrahiert wird. Bei der Berechnung der Menge, die der Nutzer besitzt, berücksichtigt Google Play verbrauchte oder ausstehende Käufe. Stornierte, erstattete oder zurückbelastete Käufe werden nicht in die Menge einbezogen, die der Nutzer besitzt. Beispiel:
„Super Screensavers“ hat ein Rabattangebot mit einer maximal zulässigen Menge von einem eingerichtet, sodass Nutzer maximal einen Bildschirmschoner mit Rabatt kaufen können.
Der Nutzer kauft einen der Bildschirmschoner mit Rabatt. Wenn der Nutzer dann versucht, den zweiten Bildschirmschoner mit Rabatt zu kaufen, tritt ein Fehler auf und der
PurchasesUpdatedListenererhält den Antwortcode `ITEM_UNAVAILABLE`.Der Nutzer beantragt eine Erstattung für den ursprünglich gekauften Bildschirmschoner mit Rabatt und erhält die Erstattung. Der Nutzer versucht, einen der Bildschirmschoner mit Rabatt zu kaufen, und der Kauf ist erfolgreich.
Länder und Regionen, für die das Angebot gilt
Sie können die Länder oder Regionen auswählen, in denen das Angebot für die Kaufoption oder das Rabattangebot für Nutzer verfügbar sein soll. Google Play prüft die Berechtigung des Nutzers anhand des Landes, das in Google Play festgelegt ist. Wenn Sie die regionale Verfügbarkeit für ein Angebot konfigurieren, wird es nur dann als Teil von getOneTimePurchaseOfferDetailsList() zurückgegeben, wenn sich der Nutzer in einem Zielland oder einer Zielregion befindet. Andernfalls ist es nicht Teil der Liste der Angebote, die zurückgegeben werden, wenn Sie queryProductDetailsAsync() aufrufen.
Angebotstags
Das folgende Beispiel zeigt, wie Sie die Angebotstags abrufen, die mit einem Angebot verknüpft sind.
Java
billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResult) { // check billingResult // … // process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // process the returned offer tags. ImmutableList<String> offerTags = oneTimePurchaseOfferDetails.getOfferTagsList(); // … } } } });
Vererbung von Angebotstags
Sie können Angebotstags für Produkte, Kaufoptionen oder Rabattangebote festlegen. Rabattangebote erben die Angebotstags vom Angebot für die Kaufoption. Wenn Angebotstags auf Produktebene angegeben werden, erben sowohl das Angebot für die Kaufoption als auch die Rabattangebote die Angebotstags des Produkts.
„Super Screensavers“ hat beispielsweise zwei Angebote für das Produkt „Bildschirmschoner“: die Kaufoption „Bildschirmschoner“ und das Rabattangebot „Bildschirmschoner“.
- „Super Screensavers“ hat das Produkt-Angebotstag
SSProductTag. - Die Kaufoption „Bildschirmschoner“ hat das Angebotstag
SSPurchaseOptionTag. - Das Rabattangebot „Bildschirmschoner“ hat das Angebotstag
SSDiscountOfferTag.
In diesem Beispiel gibt die Methode oneTimePurchaseOfferDetails.getOfferTagsList() für das Angebot für die Kaufoption SSProductTag und SSPurchaseOptionTag zurück. Für das Rabattangebot gibt die Methode SSProductTag, SSPurchaseOptionTag und SSDiscountOfferTag zurück.