W tym dokumencie opisujemy integrację produktów kupowanych raz z Biblioteką płatności w Play. Wyjaśniamy też, jak zintegrować różne opcje zakupu i oferty związane z produktami kupowanymi raz.
Możesz skonfigurować wiele opcji zakupu i ofert dotyczących produktów kupowanych raz. Możesz na przykład skonfigurować opcję zakupu i ofertę przedsprzedaży dla tego samego produktu kupowanego raz.
Wymagania wstępne
Aby skonfigurować wiele ofert dotyczących produktów kupowanych raz, musisz użyć interfejsu API
queryProductDetailsAsync(). Wycofany interfejs API querySkuDetailsAsync() nie jest obsługiwany. Informacje o tym, jak używać
queryProductDetailsAsync() i wersji launchBillingFlow()
, która przyjmuje ProductDetailsParams jako dane wejściowe, znajdziesz w sekcji Kroki migracji.
Wysyłanie zapytań o szczegóły produktu
Jeśli skonfigurujesz wiele ofert lub opcji zakupu produktu kupowanego raz, obiekt ProductDetails zwracany przez metodę
queryProductDetailsAsync() może zawierać więcej niż 1 dostępną opcję zakupu
lub wypożyczenia na produkt kupowany raz. Aby uzyskać listę wszystkich
kwalifikujących się ofert dla każdego ProductDetails obiektu, użyj
getOneTimePurchaseOfferDetailsList() metody. W ramach tej listy zostaną zwrócone tylko oferty i opcje zakupu, do których użytkownik ma uprawnienia. Kod
w metodzie onProductDetailsResponse() powinien obsługiwać zwrócone
oferty.
Uruchamianie procesu płatności
Aby rozpocząć prośbę o zakup z aplikacji, wywołaj launchBillingFlow()
metodę z głównego wątku aplikacji. Ta metoda przyjmuje odwołanie do obiektu
BillingFlowParams, który zawiera odpowiedni obiektProductDetails
uzyskany przez wywołaniequeryProductDetailsAsync(). Aby utworzyć obiekt
BillingFlowParams, użyj klasy BillingFlowParams.Builder. Pamiętaj, że podczas tworzenia obiektu BillingFlowParams musisz ustawić token oferty odpowiadający ofercie
wybranej przez użytkownika.
Poniższy przykład pokazuje, jak uruchomić proces zakupu produktu kupowanego raz z wieloma ofertami:
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);
offerToken można znaleźć w OneTimePurchaseOfferDetails. Gdy wyświetlasz ofertę użytkownikowi, skonfiguruj parametry procesu płatności za pomocą prawidłowego tokena oferty, który możesz uzyskać za pomocą metody oneTimePurchaseOfferDetails.getOfferToken().
Opcje zakupu i oferty
Opcja zakupu pozwala określić, w jaki sposób uprawnienie jest przyznawane użytkownikowi. Zawiera też informacje o jego cenie i regionie, w którym będzie dostępny. W przypadku jednego produktu może być dostępnych kilka opcji zakupu, które mogą reprezentować miejsce i sposób sprzedaży produktu.
Google Play obsługuje te opcje zakupu produktów kupowanych raz:
- opcja zakupu
- opcja wypożyczenia
Oferty to schemat cenowy, który możesz utworzyć dla produktów kupowanych raz. Możesz na przykład utworzyć ofertę rabatową na produkt kupowany raz.
Google Play obsługuje te oferty zakupu produktów kupowanych raz:
- oferta przedsprzedaży (obsługiwana tylko w przypadku opcji zakupu);
- oferta rabatowa (obsługiwana w przypadku opcji zakupu i wypożyczenia).
Opcja zakupu
Opcja zakupu oznacza standardowy, bezpośredni zakup produktu kupowanego raz. Ma opcjonalne pole `legacyCompatible`, które wskazuje, czy ta opcja zakupu będzie dostępna w starszych procesach Biblioteki płatności w Play (w wersji 7 lub starszej), które nie obsługują nowego modelu. Aby zapewnić zgodność wsteczną, co najmniej 1 opcja zakupu powinna być oznaczona jako zgodna ze starszą wersją.
Kroki integracji opcji zakupu i wypożyczenia z Biblioteką płatności w Play są takie same. Aby dowiedzieć się, jak zintegrować opcję zakupu z Biblioteką płatności w Play, przeczytaj artykuł Integracja opcji wypożyczenia z Biblioteką płatności w Play.
Opcja wypożyczenia
Opcja wypożyczenia umożliwia użytkownikom dostęp do produktów kupowanych raz przez określony czas. Możesz określić okres wypożyczenia i jego wygaśnięcie. W tym dokumencie opisujemy, jak zintegrować opcję wypożyczenia z Biblioteką płatności w Play.
Integracja opcji wypożyczenia z Biblioteką płatności w Play
W tej sekcji opisujemy, jak zintegrować opcję wypożyczenia z Biblioteką płatności w Play. Zakładamy, że znasz wstępne kroki integracji z Biblioteką płatności w Play , takie jak dodanie zależności Biblioteki płatności w Play do aplikacji, zainicjowanie BillingClient i połączenie z Google Play. Ta sekcja skupia się na aspektach integracji z Biblioteką płatności w Play, które są specyficzne dla opcji wypożyczenia.
Aby skonfigurować produkty dostępne do wypożyczenia, musisz użyć nowej usługi monetization.onetimeproducts interfejsu Play Developer API lub interfejsu Konsoli Play. Aby korzystać z usługi, możesz bezpośrednio wywołać interfejs REST API lub
użyć biblioteki klienta Java.
Uruchamianie procesu zakupu w przypadku opcji wypożyczenia
Aby uruchomić proces zakupu w przypadku oferty wypożyczenia:
Pobierz metadane opcji wypożyczenia za pomocą metody
ProductDetails.oneTimePurchaseOfferDetails.getRentalDetails().Poniższy przykład pokazuje, jak uzyskać metadane wypożyczenia:
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(); } } } } } });
Uruchom proces płatności.
Aby rozpocząć prośbę o zakup z aplikacji, wywołaj metodę
launchBillingFlow()z głównego wątku aplikacji. Ta metoda przyjmuje odwołanie do obiektuBillingFlowParams, który zawiera odpowiedni obiektProductDetailsuzyskany przez wywołaniequeryProductDetailsAsync(). Aby utworzyć obiektBillingFlowParams, użyj klasyBillingFlowParams.Builder. Pamiętaj, że musisz ustawić token oferty odpowiadający ofercie wybranej przez użytkownika podczas tworzenia obiektuBillingFlowParams. Jeśli użytkownik kwalifikuje się do opcji wypożyczenia, otrzyma ofertę z elementami RentalDetails i offerId wqueryProductDetailsAsync().Poniższy przykład pokazuje, jak uruchomić proces płatności:
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);
offerTokenmożna znaleźć wOneTimePurchaseOfferDetails. Gdy wyświetlasz ofertę użytkownikowi, skonfiguruj parametry procesu płatności za pomocą prawidłowego tokena oferty, który możesz uzyskać za pomocą metodyoneTimePurchaseOfferDetails.getOfferToken().
Zamów w przedsprzedaży
Zamówienie w przedsprzedaży umożliwia skonfigurowanie produktów kupowanych raz tak, aby można je było kupić przed premierą. Gdy użytkownik zamówi produkt w przedsprzedaży, zgadza się zapłacić za niego w dniu premiery, chyba że anuluje zamówienie przed tą datą. W dniu premiery kupujący zostanie obciążony opłatą, a Google Play wyśle mu e-maila z powiadomieniem o premierze produktu.
W tym dokumencie opisujemy, jak zintegrować ofertę przedsprzedaży z Biblioteką płatności w Play.
Integracja oferty przedsprzedaży z Biblioteką płatności w Play
W tej sekcji opisujemy, jak zintegrować ofertę przedsprzedaży z Biblioteką płatności w Play. Zakładamy, że znasz wstępne kroki integracji z Biblioteką płatności w Play , takie jak dodanie zależności Biblioteki płatności w Play do aplikacji, zainicjowanie BillingClient i połączenie z Google Play. Ta sekcja skupia się na aspektach integracji z Biblioteką płatności w Play, które są specyficzne dla oferty przedsprzedaży.
Uruchamianie procesu zakupu w przypadku oferty przedsprzedaży
Aby uruchomić proces zakupu w przypadku oferty przedsprzedaży:
Pobierz metadane oferty przedsprzedaży za pomocą metody
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails(). Poniższy przykład pokazuje, jak uzyskać metadane oferty przedsprzedaży: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(); } } } } } });
Uruchom proces płatności.
Aby rozpocząć prośbę o zakup z aplikacji, wywołaj metodę
launchBillingFlow()z głównego wątku aplikacji. Ta metoda przyjmuje odwołanie doBillingFlowParamsobiektu, który zawiera odpowiedniProductDetailsobiekt uzyskany przez wywołanie queryProductDetailsAsync(). Aby utworzyćBillingFlowParamsobiekt, użyj klasyBillingFlowParams.Builder class. Pamiętaj, że podczas tworzenia obiektuBillingFlowParamsmusisz ustawić token oferty odpowiadający ofercie wybranej przez użytkownika. Jeśli użytkownik kwalifikuje się do oferty przedsprzedaży, otrzyma ofertę z elementami PreorderDetails i offerId w metodziequeryProductDetailsAsync().Poniższy przykład pokazuje, jak uruchomić proces płatności:
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);
offerTokenmożna znaleźć wOneTimePurchaseOfferDetails. Gdy wyświetlasz ofertę użytkownikowi, skonfiguruj parametry procesu płatności za pomocą prawidłowego tokena oferty, który możesz uzyskać za pomocą metodyoneTimePurchaseOfferDetails.getOfferToken().
Rabaty
W tej sekcji opisujemy, jak skonfigurować oferty rabatowe na produkty kupowane raz.
W ofercie rabatowej na produkt kupowany raz możesz skonfigurować 4 różne parametry:
Cena oferty z rabatem: określa szczegóły dotyczące rabatu procentowego lub kwoty rabatu od ceny pierwotnej.
Kraje lub regiony, w których oferta jest dostępna: określa dostępność ofert produktów kupowanych raz w danym kraju lub regionie.
Limit zakupu (opcjonalnie): pozwala określić, ile razy użytkownik może skorzystać z tej samej oferty. Jeśli użytkownik przekroczy limit zakupu, nie będzie mógł skorzystać z oferty.
Ograniczenie czasowe (opcjonalnie): określa okres, w którym oferta jest dostępna. Po upływie tego okresu oferta nie będzie dostępna.
Pobieranie informacji o cenie oferty z rabatem
W przypadku oferty z rabatem możesz pobrać procent rabatu lub oferowany rabat bezwarunkowy.
Przykład 1. Pobieranie procentu rabatu oferty z rabatem
Poniższy przykład pokazuje, jak uzyskać pierwotną cenę oferty z rabatem i jej procent rabatu. Pamiętaj, że informacje o procencie rabatu są zwracane tylko w przypadku ofert z rabatem.
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(); } // … } } } });
Przykład 2. Pobieranie rabatu bezwarunkowego oferty z rabatem
Poniższy przykład pokazuje, jak uzyskać pierwotną pełną cenę oferty z rabatem i jej rabat bezwarunkowy w mikrach. Pamiętaj, że informacje o rabacie bezwzględnym w mikrach są zwracane tylko w przypadku ofert z rabatem. W przypadku oferty rabatowej należy określić rabat bezwzględny lub procent rabatu.
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(); } // … } } } });
Pobieranie prawidłowego okna czasowego oferty
Aby uzyskać prawidłowe okno czasowe oferty, możesz użyć metody OneTimePurchaseOfferDetails.getValidTimeWindow(). Ten obiekt zawiera czas rozpoczęcia i zakończenia okna czasowego w milisekundach.
Poniższy przykład pokazuje, jak uzyskać prawidłowe okno czasowe oferty:
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(); // … } } } } });
Ograniczona ilość na poziomie oferty rabatowej
Możesz określić maksymalny limit ilości na poziomie oferty rabatowej, który jest stosowany tylko na poziomie oferty. Oto przykład:
- Firma Super screensavers ma 2 oferty na wygaszacz ekranu: opcję zakupu wygaszacza ekranu i wygaszacz ekranu z rabatem.
- Opcja zakupu wygaszacza ekranu nie ma ustawionego limitu ilości.
- W przypadku wygaszacza ekranu z rabatem maksymalna dozwolona ilość na poziomie oferty jest ustawiona na 3.
- Wygaszacz ekranu nie ma maksymalnej dozwolonej ilości na poziomie produktu, więc użytkownicy mogą kupować nieograniczoną ilość tego produktu.
- Użytkownik ma 1 wygaszacz ekranu z rabatem i planuje kupić kolejny z rabatem.
- Podczas pobierania dostępnych ofert LimitedQuantityInfo dla opcji zakupu wygaszacza ekranu ma wartość null, a pozostała ilość dla wygaszacza ekranu z rabatem wynosi 2.
Poniższy przykład pokazuje, jak uzyskać ograniczoną ilość na poziomie oferty rabatowej:
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(); // … } } } } });
Gdy użytkownicy wykorzystają maksymalną liczbę wykorzystań oferty, oferta nie będzie zwracana przez metodę getOneTimePurchaseOfferDetailsList().
Obliczanie limitu wykorzystania
Poniższy przykład pokazuje, jak uzyskać informacje o ograniczonej ilości w przypadku określonej oferty rabatowej. Możesz uzyskać maksymalną dozwoloną ilość i pozostałą ilość dla bieżącego użytkownika. Pamiętaj, że funkcja ograniczonej ilości ma zastosowanie zarówno do ofert produktów kupowanych raz, które można wykorzystać, jak i tych, których nie można wykorzystać. Ta funkcja jest obsługiwana tylko na poziomie oferty.
Google Play oblicza pozostałą ilość, odejmując ilość należącą do użytkownika od maksymalnej dozwolonej ilości, którą skonfigurowano. Podczas zliczania ilości należącej do użytkownika Google Play uwzględnia zakupy wykorzystane lub oczekujące. Zakupy, które zostały anulowane, zwrócone lub obciążone zwrotem, nie są uwzględniane w ilości należącej do użytkownika. Przykład:
Firma Super screensavers skonfigurowała ofertę rabatową z maksymalną dozwoloną ilością 1, więc użytkownicy mogą kupić maksymalnie 1 wygaszacz ekranu z rabatem.
Użytkownik kupuje 1 wygaszacz ekranu z rabatem. Jeśli użytkownik spróbuje kupić drugi wygaszacz ekranu z rabatem, wystąpi błąd, a
PurchasesUpdatedListenerotrzyma kod odpowiedzi ITEM_UNAVAILABLE.Użytkownik prosi o zwrot środków za pierwotnie zakupiony wygaszacz ekranu z rabatem i otrzymuje zwrot. Użytkownik próbuje kupić wygaszacz ekranu z rabatem, a zakup się powiedzie.
Dostępność w poszczególnych krajach i regionach
Możesz wybrać kraje lub regiony, w których oferta opcji zakupu lub oferta rabatowa będzie dostępna dla użytkowników. Google Play oceni uprawnienia użytkownika na podstawie kraju w Google Play. Jeśli skonfigurujesz dostępność regionalną oferty, będzie ona zwracana w ramach getOneTimePurchaseOfferDetailsList() tylko wtedy, gdy użytkownik znajduje się w kraju lub regionie docelowym. W przeciwnym razie nie będzie ona częścią listy ofert zwracanych po wywołaniu queryProductDetailsAsync().
Tagi ofert
Poniższy przykład pokazuje, jak pobrać tagi ofert powiązane z ofertą.
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(); // … } } } });
Dziedziczenie tagów ofert
Tagi ofert możesz ustawić dla produktu, opcji zakupu lub oferty rabatowej. Oferty rabatowe dziedziczą tagi ofert z oferty opcji zakupu. Podobnie, jeśli tagi ofert są określone na poziomie produktu, zarówno oferta opcji zakupu, jak i oferty rabatowe dziedziczą tagi ofert produktu.
Na przykład firma Super screensavers ma 2 oferty na wygaszacz ekranu: opcję zakupu wygaszacza ekranu i wygaszacz ekranu z rabatem.
- Firma Super screensavers ma tag oferty produktu
SSProductTag. - Opcja zakupu wygaszacza ekranu ma tag oferty
SSPurchaseOptionTag. - Wygaszacz ekranu z rabatem ma tag oferty
SSDiscountOfferTag.
W tym przykładzie metoda oneTimePurchaseOfferDetails.getOfferTagsList() dla oferty opcji zakupu zwraca SSProductTag i SSPurchaseOptionTag. W przypadku oferty rabatowej metoda zwraca SSProductTag, SSPurchaseOptionTag i SSDiscountOfferTag.