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. Na tej liście 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ą dla produktu kupowanego 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 opcji 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().
Oferta przedsprzedaży
Przedsprzedaż umożliwia skonfigurowanie produktów kupowanych raz, tak aby można je było kupić przed premierą. Gdy użytkownik kupi produkt w przedsprzedaży, zgadza się zapłacić za niego w dniu premiery, chyba że użytkownik 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ą
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()metody. 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().
Oferta rabatowa
W tej sekcji opisujemy, jak skonfigurować oferty rabatowe dla produktów kupowanych raz.
W ofercie rabatowej dotyczącej produktu kupowanego raz możesz skonfigurować 4 różne parametry:
Cena oferty z rabatem: określa szczegóły dotyczące rabatu procentowego lub ceny bezwzględnej w stosunku do 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 rabatu procentowego oferty z rabatem
Poniższy przykład pokazuje, jak uzyskać pierwotną cenę biletu normalnego oferty z rabatem i jej rabat procentowy. Pamiętaj, że informacje o rabacie procentowym 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ą cenę pełną 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 rabat procentowy.
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 okresu obowiązywania oferty
Aby uzyskać prawidłowy okres obowiązywania oferty, możesz użyć metody OneTimePurchaseOfferDetails.getValidTimeWindow(). Ten obiekt zawiera czas rozpoczęcia i zakończenia okresu w milisekundach.
Poniższy przykład pokazuje, jak uzyskać prawidłowy okres obowiązywania 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 dotyczące wygaszacza 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, dzięki czemu 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ć 1 wygaszacz ekranu z rabatem i zakup się powiedzie.
Kraje i regiony, w których oferta jest dostępna
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 regionalną dostępność 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 dotyczące wygaszacza ekranu: opcję zakupu wygaszacza ekranu i wygaszacz ekranu z rabatem.
- Super screensaver 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.