Informacje o wersji Biblioteki płatności w Google Play

Ten dokument zawiera informacje o wersji Biblioteki płatności w Google Play.

Biblioteka płatności w Google Play w wersji 7.1.1 (3.10.2024)

Dostępna jest już wersja 7.1.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Poprawki błędów

Wersja 7.1.0 biblioteki płatności w Google Play (19.09.2024)

Dostępne są już wersje 7.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

  • Ulepszona ochrona wątku związana ze stanem połączenia i zarządzaniem nim.
  • Wprowadziliśmy częściowe zmiany w celu przetestowania kodów odpowiedzi BillingResult, które zostały w pełni udostępnione w wersji 7.1.1 Biblioteki płatności w Google Play. Aby przetestować integrację za pomocą tej funkcji, musisz przejść na Bibliotekę płatności w Play w wersji 7.1.1. Wystąpił błąd, który będzie miał wpływ tylko na aplikacje z włączonym testowaniem zastąpienia płatności i nie wpłynie na normalne korzystanie z aplikacji. Więcej informacji znajdziesz w artykule Testowanie kodów odpowiedzi BillingResult.

Biblioteka płatności w Google Play w wersji 7.0.0 (14.05.2024)

Dostępna jest już wersja 7.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Biblioteka płatności w Google Play w wersji 6.2.1 (16.04.2024)

Dostępna jest już wersja 6.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Biblioteka płatności w Google Play w wersji 6.2.0 (6.03.2024)

Dostępna jest już wersja 6.2.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Biblioteka płatności w Google Play w wersji 6.1.0 (14.11.2023)

Dostępne są już wersje 6.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Biblioteka płatności w Google Play w wersji 6.0.1 (22.06.2023)

Dostępne są już wersje 6.0.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Zaktualizuj Bibliotekę płatności w Play, aby była zgodna z Androidem 14.

Biblioteka płatności w Google Play w wersji 6.0 (10.05.2023)

Dostępna jest już wersja 6.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

  • Dodano nowy enumeracyjny typ danych ReplacementMode, który zastępuje typ ProrationMode.

    Pamiętaj, że ProrationMode jest nadal dostępny ze względu na zgodność z wcześniejszymi wersjami.

  • Usunięto identyfikator zamówienia w przypadku zakupów w ramach PENDING.

    Wcześniej identyfikator zamówienia był zawsze tworzony, nawet jeśli zakup był w toku. Począwszy od wersji 6.0.0 identyfikator zamówienia nie będzie tworzony w przypadku oczekujących zakupów. W przypadku tych zakupów identyfikator zamówienia zostanie wypełniony po przeniesieniu zakupu do stanu PURCHASED.

  • Usunięto metody queryPurchaseslaunchPriceConfirmationFlow.

    Metody queryPurchaseslaunchPriceConfirmationFlow, które zostały wcześniej oznaczone jako wycofane, zostały teraz usunięte z Biblioteki płatności Google w wersji 6.0.0. Deweloperzy powinni używać operatora queryPurchasesAsync zamiast queryPurchases. Informacje o alternatywnych opcjach launchPriceConfirmationFlow znajdziesz w artykule Zmiany cen.

  • Dodano nowy kod odpowiedzi na błąd sieci.

    Od wersji 6.0.0 Biblioteki Google Play dodano nowy kod odpowiedzi na błąd sieci NETWORK_ERROR. Ten kod jest zwracany, gdy wystąpił błąd z powodu problemu z połączeniem sieciowym. Te błędy połączenia z siecią zostały wcześniej zgłoszone jako SERVICE_UNAVAILABLE.

  • Zaktualizowano SERVICE_UNAVAILABLE i SERVICE_TIMEOUT.

    Począwszy od wersji 6.0.0 usługi PBL błędy spowodowane przekroczeniem limitu czasu przetwarzania będą zwracane jako SERVICE_UNAVAILABLE zamiast obecnego SERVICE_TIMEOUT.

    W poprzednich wersjach PBL zachowanie nie ulega zmianie.

  • Usunięto SERVICE_TIMEOUT.

    Od wersji 6.0.0 PBL parametr SERVICE_TIMEOUT nie będzie już zwracany. Poprzednie wersje PBL będą nadal zwracać ten kod.

  • Dodano dodatkowe logowanie.

    Wersja 6 Biblioteki płatności w Google Play zawiera dodatkowe logowanie, które zapewnia informacje o użyciu interfejsu API (np. o udanych i nieudanych próbach) oraz o problemach z połączeniem z usługą. Te informacje posłużą do poprawy działania Biblioteki płatności Google Play i lepszego obsługiwania błędów.

Wersja 5.2.1 Biblioteki płatności w Google Play (22.06.2023)

Dostępna jest już wersja 5.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Zaktualizuj Bibliotekę płatności w Play, aby była zgodna z Androidem 14.

Biblioteka płatności w Google Play w wersji 5.2 (6.04.2023)

Dostępna jest już wersja 5.2.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Podsumowanie zmian

Wersja 5.1 biblioteki Płatności w Google Play (31.10.2022)

Dostępna jest już wersja 5.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Ta wersja zawiera te zmiany.

Podsumowanie zmian

Biblioteka płatności w Google Play w wersji 5.0 (11.05.2022)

Dostępna jest już wersja 5.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Ta wersja zawiera te zmiany.

Podsumowanie zmian

  • Wprowadziliśmy nowy model subskrypcji, w tym nowe elementy, które umożliwiają tworzenie wielu ofert dla jednego produktu z subskrypcją. Więcej informacji znajdziesz w przewodniku po migracji.
  • Dodano BillingClient.queryProductDetailsAsync(), aby zastąpić BillingClient.querySkuDetailsAsync().
  • Dodano metodę setIsOfferPersonalized() w związku z wymogami UE dotyczącymi ujawniania informacji o spersonalizowanych cenach. Więcej informacji o korzystaniu z tej metody znajdziesz w artykule Wskazanie ceny indywidualnej.
  • Usunięto queryPurchases(), która została wycofana i zastąpiona przez queryPurchasesAsync wprowadzoną w Bibliotece płatności w Google Play w wersji 4.0.0.
  • Interfejs launchPriceChangeFlow został wycofany i zostanie usunięty w przyszłej wersji. Więcej informacji o alternatywnych opcjach znajdziesz w artykule Uruchomienie procesu potwierdzenia zmiany ceny.
  • Usunięto parametr setVrPurchaseFlow(), który był używany wcześniej podczas tworzenia instancji procesu zakupu. W poprzednich wersjach ta metoda przekierowywała użytkownika do dokonania zakupu na urządzeniu z Androidem. Po usunięciu tej metody użytkownicy będą dokonywać zakupów w ramach standardowego procesu zakupu.

Wersja 4.1 biblioteki płatności w Google Play (23.02.2022)

Dostępna jest już wersja 4.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.

Ta wersja zawiera te zmiany.

Podsumowanie zmian

Wersja 4.0 biblioteki Płatności w Google Play (18.05.2021)

Wersja 4.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina jest już dostępna.

Podsumowanie zmian

Wersja 3.0.3 biblioteki Płatności w Google Play (12.03.2021)

Dostępne są już wersje 3.0.3 Biblioteki płatności w Google Play, rozszerzenia Kotlin i wtyczki Unity.

Poprawki błędów w Java i Kotlin

  • Naprawiono wyciek pamięci podczas wywoływania funkcji endConnection().
  • Naprawiono problem z korzystaniem z Biblioteki płatności w Google Play przez aplikacje, które używają trybu uruchamiania pojedynczego zadania. onPurchasesUpdated() Ponowne uruchomienie aplikacji z wyszukiwarki Androida spowoduje wywołanie funkcji zwrotnej, jeśli przed zawieszeniem aplikacja wyświetlała okno płatności.

Poprawki błędów w Unity

  • Zaktualizuj Java do wersji 3.0.3, aby naprawić wyciek pamięci i rozwiązać problem uniemożliwiający dokonywanie zakupów, gdy aplikacja jest wznawiana z wyrzutki Androida, a okno płatności było widoczne przed zawieszeniem.

Wersja 3.0.2 biblioteki płatności w Google Play (24.11.2020)

Dostępna jest już wersja 3.0.2 Biblioteki płatności w Google Play i rozszerzenia Kotlin.

Poprawki błędów

  • Naprawiliśmy błąd w rozszerzeniu Kotlin, który powodował, że coroutine kończyła się z błędem „Already resumed”.
  • Rozwiązaliśmy problem z nierozwiązanymi odwołaniami podczas używania rozszerzenia Kotlin z biblioteką kotlinx.coroutines w wersji 1.4 lub nowszej.

Wersja 3.0.1 Biblioteki płatności w Google Play (30.09.2020)

Dostępne są już wersje 3.0.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin.

Poprawki błędów

  • Rozwiązaliśmy błąd, który powodował, że jeśli aplikacja została zamknięta i przywrócona podczas procesu płatności, metoda PurchasesUpdatedListener mogła nie zostać wywołana z wynikiem zakupu.

Wersja 3.0 Biblioteki płatności w Google Play (8 czerwca 2020 r.)

Dostępne są już wersje 3.0.0 Biblioteki płatności w Google Play, rozszerzenia Kotlin i wtyczki Unity.

Podsumowanie zmian

  • Usunięto obsługę kodu SKU nagrody.
  • Usunięto parametry ChildDirectedUnderAgeOfConsent.
  • Usunięto wycofane metody przesyłania danych przez deweloperów.
  • Usunięto wycofane metody BillingFlowParams.setAccountId()BillingFlowParams.setDeveloperId().
  • Usunięto wycofane metody BillingFlowParams.setOldSkus(String oldSku)BillingFlowParams.addOldSku(String oldSku).
  • Dodano adnotacje dotyczące możliwości wystąpienia wartości null.

Poprawki błędów

  • SkuDetails.getIntroductoryPriceCycles() zwraca teraz wartość int zamiast String.
  • Naprawiliśmy błąd, który powodował, że proces płatności był traktowany jako zawierający dodatkowe parametry, nawet jeśli nie były one ustawione.

Wersja 2.2.1 biblioteki Płatności w Google Play (2020-05-20)

Biblioteka płatności w Google Play w wersji 2.2.1 jest już dostępna.

Poprawki błędów

  • Zaktualizowano domyślną wersję biblioteki Java Play Billing, od której zależy rozszerzenie Kotlin.

Wersja 2.2.0 Biblioteki płatności w Google Play i obsługa Unity (23.03.2020)

Wersja 2.2.0 systemu płatności Google Play zawiera funkcje, które pomagają deweloperom przypisywać zakupy do właściwego użytkownika. Dzięki tym zmianom nie musisz już tworzyć rozwiązań niestandardowych na podstawie danych przesyłanych przez dewelopera. W ramach tej aktualizacji wycofujemy funkcję przesyłania danych dla deweloperów, która zostanie usunięta w kolejnych wersjach. Więcej informacji, w tym zalecane alternatywy, znajdziesz w artykule Dane programisty.

Biblioteka płatności w Google Play 2 dla Unity

Oprócz obecnych wersji Biblioteki płatności w Google Play w językach Java i Kotlin udostępniliśmy wersję biblioteki do użycia z Unity. Deweloperzy gier korzystający z interfejsu API zakupów w aplikacji Unity mogą już teraz przeprowadzić uaktualnienie, aby korzystać ze wszystkich funkcji Biblioteki płatności w Google Play 2 i ułatwić sobie kolejne uaktualnienia do przyszłych wersji tej biblioteki.

Więcej informacji znajdziesz w artykule Korzystanie z płatności w Google Play w Unity.

Podsumowanie zmian

Wersja 2.1.0 Biblioteki płatności w Google Play i wersja 2.1.0 rozszerzenia Kotlin (10 grudnia 2019 r.)

Dostępna jest już wersja 2.1.0 Biblioteki płatności w Google Play i nowe rozszerzenie Kotlina. Rozszerzenie Kotlina do biblioteki Play Billing zapewnia alternatywne interfejsy API do użycia w Kotlinie, które zapewniają większą ochronę przed nullami i lepsze coroutines. Przykłady kodu znajdziesz w artykule Korzystanie z biblioteki Płatności w Google Play.

Ta wersja zawiera te zmiany.

Podsumowanie zmian

  • BillingFlowParams wycofujemy setOldSku(String oldSku) i zastępujemy go setOldSku(String oldSku, String purchaseToken), aby uniknąć nieporozumień, gdy kilka kont na urządzeniu ma ten sam identyfikator sku.

Wersja 2.0.3 biblioteki Płatności w Google Play (5 sierpnia 2019 r.)

Biblioteka Google Play Billing w wersji 2.0.3 jest już dostępna.

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że funkcja querySkuDetailsAsync() zamiast zwracać pomyślny wynik, czasami kończyła się niepowodzeniem z kodem DEVELOPER_ERROR.

Biblioteka płatności w Google Play w wersji 2.0.2 (8 lipca 2019 r.)

Biblioteka płatności w Google Play w wersji 2.0.2 jest już dostępna. Ta wersja zawiera aktualizacje dokumentacji referencyjnej i nie zmienia funkcjonalności biblioteki.

Wersja 2.0.1 Biblioteki płatności w Google Play (6 czerwca 2019 r.)

Biblioteka Google Play Billing w wersji 2.0.1 jest już dostępna. Ta wersja zawiera następujące zmiany.

Poprawki błędów

  • Usunęliśmy błąd, który w niektórych przypadkach powodował, że komunikaty debugowania były zwracane jako null.
  • Naprawiono potencjalny problem z wyciekiem pamięci.

Wersja Biblioteki płatności w Google Play 2.0 (07.05.2019)

Biblioteka Google Play Billing w wersji 2.0 jest już dostępna. Ta wersja zawiera następujące zmiany.

Zakupy muszą zostać potwierdzone w ciągu 3 dni

Google Play umożliwia kupowanie produktów w aplikacji lub poza nią. Aby zapewnić spójne wrażenia z zakupów w Google Play niezależnie od tego, gdzie użytkownik kupuje produkt, musisz potwierdzić wszystkie zakupy dokonane za pomocą Biblioteki płatności w Google Play tak szybko, jak to możliwe po przyznaniu uprawnień użytkownikowi. Jeśli w ciągu 3 dni nie potwierdzisz zakupu, użytkownik automatycznie otrzyma zwrot środków, a Google Play unieważni zakup. W przypadku oczekujących transakcji (nowość w wersji 2.0) 3-dniowy okres zaczyna się, gdy zakup ma stan PURCHASED, i nie ma zastosowania, gdy zakup ma stan PENDING.

W przypadku subskrypcji musisz potwierdzić każdy zakup, który ma nowy token zakupu. Oznacza to, że wszystkie początkowe zakupy, zmiany abonamentu i ponowne rejestracje muszą być potwierdzone, ale nie musisz potwierdzać kolejnych odnowień. Aby określić, czy zakup wymaga potwierdzenia, sprawdź pole potwierdzenia w zakupie.

Obiekt Purchase zawiera teraz metodę isAcknowledged(), która wskazuje, czy zakup został potwierdzony. Interfejs Google Play Developer API zawiera też wartości logiczne potwierdzenia zarówno dla Purchases.products, jak i Purchases.subscriptions. Zanim potwierdzisz zakup, użyj tych metod, aby sprawdzić, czy zakup został już potwierdzony.

Możesz potwierdzić zakup, korzystając z jednej z tych metod:

  • W przypadku produktów konsumpcyjnych użyj wartości consumeAsync(), która znajduje się w interfejsie API klienta.
  • W przypadku produktów, które nie są zużywane, użyj acknowledgePurchase(), dostępnego w interfejsie klienta API.
  • Nowa metoda acknowledge() jest też dostępna w interfejsie Server API.

Metoda BillingFlowParams.setSku() została usunięta

W tej wersji została usunięta metoda BillingFlowParams#setSku(), która została wycofana. Zanim zrenderujesz produkty w procesie zakupu, musisz wywołać funkcję BillingClient.querySkuDetailsAsync(), przekazując jej wynikowy obiekt SkuDetails do BillingFlowParams.Builder.setSkuDetails().

Przykłady kodu znajdziesz w artykule Korzystanie z biblioteki Płatności w Google Play.

Obsługiwane są dane programisty.

Wersja 2.0 biblioteki Google Play Billing obsługuje dane dewelopera – dowolne ciągi znaków, które można dołączyć do zakupów. Parametr ładunku dewelopera możesz dołączyć do zakupu, ale tylko wtedy, gdy zakup został potwierdzony lub wykorzystany. W przeciwieństwie do danych dewelopera w AIDL dane te można określić podczas uruchamiania procesu zakupu. Zakupy można teraz inicjować poza aplikacją, więc ta zmiana zapewnia, że zawsze możesz dodać ładunek do zakupów.

Aby uzyskać dostęp do ładunku w nowej bibliotece, obiekty Purchase zawierają teraz metodę getDeveloperPayload().

Stałe oferty

Gdy oferujesz kod SKU ze zniżką, Google Play zwraca teraz pierwotną cenę tego kodu, aby umożliwić użytkownikom sprawdzenie, czy otrzymują zniżkę.

SkuDetails zawiera 2 nowe metody pobierania pierwotnej ceny SKU:

Transakcje oczekujące

W wersji 2.0 biblioteki Płatności w Google Play musisz obsługiwać zakupy, które wymagają dodatkowych działań przed przyznaniem uprawnień. Użytkownik może na przykład kupić produkt w aplikacji w sklepie stacjonarnym, płacąc gotówką. Oznacza to, że transakcja jest przeprowadzana poza Twoją aplikacją. W tym scenariuszu uprawnienia należy przyznać dopiero po zakończeniu transakcji przez użytkownika.

Aby umożliwić zakupy oczekujące, wywołaj funkcję enablePendingPurchases() w ramach inicjowania aplikacji.

Użyj parametru Purchase.getPurchaseState(), aby określić, czy stan zakupu to PURCHASED czy PENDING. Pamiętaj, że uprawnienia należy przyznać tylko wtedy, gdy stan to PURCHASED. Aby sprawdzić aktualny stan Purchase:

  1. Podczas uruchamiania aplikacji wywołaj funkcję BillingClient.queryPurchases(), aby pobrać listę niewykorzystanych produktów powiązanych z użytkownikiem.
  2. Wywołaj funkcję Purchase.getPurchaseState() w przypadku każdego zwróconego obiektu Purchase.
  3. Zaimplementuj metodę onPurchasesUpdated(), aby reagować na zmiany w obiektach Purchase.

Ponadto interfejs Google Play Developer API zawiera stan PENDING dla Purchases.products. Transakcje oczekujące nie są obsługiwane w przypadku subskrypcji.

W tej wersji wprowadzamy też nowy typ powiadomienia dla deweloperów w czasie rzeczywistym.OneTimeProductNotification Ten typ powiadomienia zawiera jedną wiadomość, której wartość to ONE_TIME_PRODUCT_PURCHASED lub ONE_TIME_PRODUCT_CANCELED. Ten typ powiadomienia jest wysyłany tylko w przypadku zakupów związanych z opóźnionymi formami płatności, takimi jak gotówka.

Potwierdzanie oczekujących zakupów należy przeprowadzać tylko wtedy, gdy stan zakupu to PURCHASED, a nie PENDING.

Zmiany w interfejsie API

Biblioteka Google Play Billing w wersji 2.0 zawiera kilka zmian w interfejsie API, które umożliwiają obsługę nowych funkcji i uproszczają korzystanie z dotychczasowych.

consumeAsync

consumeAsync() odbiera teraz obiekt ConsumeParams zamiast obiektu purchaseToken. ConsumeParams zawiera purchaseToken, a także opcjonalny ładunek dewelopera.

W tej wersji usunięto poprzednią wersję (consumeAsync()).

queryPurchaseHistoryAsync

Aby zminimalizować dezorientację, funkcja queryPurchaseHistoryAsync() zwraca teraz obiekt PurchaseHistoryRecord zamiast obiektu Purchase. Obiekt PurchaseHistoryRecord jest taki sam jak obiekt Purchase, z tym że odzwierciedla tylko wartości zwracane przez obiekt queryPurchaseHistoryAsync() i nie zawiera pól autoRenewing, orderId ani packageName. Pamiętaj, że zwrócone dane się nie zmieniły – funkcja queryPurchaseHistoryAsync() zwraca te same dane co wcześniej.

Wartości zwracane przez BillingResult

Interfejsy API, które wcześniej zwracały wartość całkowitą BillingResponse, zwracają teraz obiekt BillingResult. BillingResult zawiera liczbę całkowitą BillingResponse oraz ciąg znaków debugowania, który możesz wykorzystać do diagnozowania błędów. Ciąg debugowania jest w języku angielskim (US) i nie jest przeznaczony do wyświetlania użytkownikom.

Poprawki błędów

Wersja 1.2.2 Biblioteki płatności w Google Play (7 marca 2019 r.)

Biblioteka płatności w Google Play w wersji 1.2.2 jest już dostępna. Ta wersja zawiera następujące zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem z wątkami wprowadzony w wersji 1.2.1. Wywołania w tle nie blokują już wątku głównego.

Inne zmiany

  • Chociaż nadal zalecamy korzystanie z głównego wątku, możesz teraz utworzyć instancję biblioteki Google Play Billing Library z wątku w tle.
  • Tworzenie instancji zostało w pełni przeniesione do wątku w tle, aby zmniejszyć ryzyko wystąpienia błędów ANR.

Wersja Biblioteki płatności w Play 1.2.1 (04.03.2019)

Biblioteka płatności w Google Play w wersji 1.2.1 jest już dostępna. Ta wersja zawiera następujące zmiany.

Najważniejsze zmiany

Inne zmiany

  • Dodaliśmy publiczne konstruktory dla PurchasesResultSkuDetailsResult, aby ułatwić testowanie.
  • Obiekty SkuDetails mogą używać nowej metody getOriginalJson().
  • Wszystkie wywołania usługi AIDL są teraz obsługiwane przez wątki w tle.

Poprawki błędów

  • Listeners wywoływanych metod zwrotnych o wartości null nie są już przekazywane do publicznych interfejsów API.

Wersja 1.2 Biblioteki płatności w Google Play (18 października 2018 r.)

Biblioteka płatności w Google Play w wersji 1.2 jest już dostępna. Ta wersja zawiera następujące zmiany.

Podsumowanie zmian

  • Biblioteka Google Play Billing Library jest teraz objęta licencją Umowy licencyjnej na pakiet Android SDK.
  • Dodaliśmy interfejs API launchPriceChangeConfirmationFlow, który prosi użytkowników o sprawdzenie oczekującej zmiany ceny abonamentu.
  • Dodano obsługę nowego trybu proporcjonalnego DEFERRED podczas podwyższania lub obniżania poziomu subskrypcji użytkownika.
  • W klasie BillingFlowParams zastąpiono setSku() wartością setSkuDetails().
  • Drobne poprawki błędów i optymalizacje kodu.

Potwierdzenie zmiany ceny

Możesz teraz zmienić cenę subskrypcji w Konsoli Google Play i poprosić użytkowników o sprawdzenie i zaakceptowanie nowej ceny, gdy otworzą aplikację.

Aby użyć tego interfejsu API, utwórz obiekt PriceChangeFlowParams, korzystając z identyfikatora skuDetails produktu subskrypcji, a następnie wywołaj funkcję launchPriceChangeConfirmationFlow(). Aby przetworzyć wynik po zakończeniu procesu potwierdzenia zmiany ceny, zastosuj fragment kodu PriceChangeConfirmationListener, jak pokazano w tym fragmencie kodu:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

W ramach procesu potwierdzenia zmiany ceny wyświetla się okno z informacjami o nowej cenie i prośbą o jej zaakceptowanie. Ten proces zwraca kod odpowiedzi typu BillingClient.BillingResponse.

Nowy tryb przydziału

Podczas przechodzenia na wyższą lub niższą wersję subskrypcji możesz użyć nowego trybu podziału DEFERRED. Ten tryb aktualizuje subskrypcję użytkownika podczas następnej odnowy. Więcej informacji o skonfigurowaniu tego trybu znajdziesz w artykule Konfigurowanie trybu podziału na częście.

Nowa metoda ustawiania szczegółów kodu SKU

W klasie BillingFlowParams metoda setSku() została wycofana. Ta zmiana ma na celu optymalizację procesu Płatności w Google Play.

Podczas tworzenia nowego wystąpienia BillingFlowParams w kliencie płatności w aplikacji zalecamy bezpośrednie korzystanie z obiektu JSON za pomocą funkcji setSkuDetails(), jak pokazano w tym fragmencie kodu:

W klasie BillingFlowParams Builder metoda setSku() została wycofana. Zamiast tego użyj metody setSkuDetails(), jak pokazano w tym fragmencie kodu. Obiekt przekazany do obiektu setSkuDetails() pochodzi z metody querySkuDetailsAsync().

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Wersja Biblioteki płatności w Play 1.1 (7 maja 2018 r.)

Biblioteka płatności w Google Play w wersji 1.1 jest już dostępna. Ta wersja zawiera następujące zmiany.

Podsumowanie zmian

  • Dodano obsługę określania trybu proporcjonalnego w BillingFlowParams podczas przechodzenia na wyższą lub niższą wersję istniejącej subskrypcji.
  • Flaga logiczna replaceSkusProrationBillingFlowParamsnie jest już obsługiwana. Zamiast tego użyj replaceSkusProrationMode.
  • launchBillingFlow()wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi.

Zmiany w zachowaniu

Wersja 1.1 Biblioteki płatności w Google Play zawiera te zmiany zachowania:

Deweloperzy mogą ustawić replaceSkusProrationMode w klasie BillingFlowParams

ProrationMode zawiera więcej informacji o typie proporcjonalnego przedłużenia subskrypcji użytkownika.

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Obecnie Google Play obsługuje te tryby podziału:

IMMEDIATE_WITH_TIME_PRORATION Zastąpienie zacznie obowiązywać natychmiast, a nowy czas ważności będzie proporcjonalnie naliczany i doliczony do konta użytkownika lub odjęty od jego rachunku. Jest to obecne domyślne zachowanie.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE Zastąpienie zacznie obowiązywać natychmiast, a cykl rozliczeniowy pozostanie bez zmian. Obciążymy Cię ceną za pozostałą część okresu.

Uwaga: ta opcja jest dostępna tylko w przypadku uaktualnienia subskrypcji.

IMMEDIATE_WITHOUT_PRORATION Zastąpienie wejdzie w życie natychmiast, a nowa cena zostanie naliczona przy następnym odnowieniu. Cykl rozliczeniowy pozostaje bez zmian.

W klasie BillingFlowParams nie jest już obsługiwana kolumna replaceSkusProration

Deweloperzy mogli wcześniej ustawić flagę logiczną, aby naliczać proporcjonalną kwotę za prośbę o ulepszenie subskrypcji. Ponieważ obsługujemy już flagę ProrationMode, która zawiera bardziej szczegółowe instrukcje, ten parametr logiczny nie jest już obsługiwany.

launchBillingFlow() wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi

Biblioteka płatności zawsze wywoła funkcję wywołania zwrotnego PurhcasesUpdatedListener i zwróci obiekt BillingResponse asynchronicznie. Zachowana jest też synchroniczna wartość zwracana przez funkcję BillingResponse.

Poprawki błędów

  • W metodach asynchronicznych prawidłowo kończy się wcześnie, gdy usługa zostanie odłączona.
  • Builder param obiekty nie zmieniają już zbudowanych obiektów.
  • Problem 68087141: launchBillingFlow()teraz powoduje wywołanie zwrotne w przypadku nieudanych odpowiedzi.

Wersja 1.0 Biblioteki płatności w Google Play (19.09.2017, ogłoszenie)

Biblioteka płatności w Google Play w wersji 1.0 jest już dostępna. Ta wersja zawiera następujące zmiany.

Ważne zmiany

  • Uprawnienia do płatności wbudowane w pliku manifestu biblioteki. Nie musisz już dodawać uprawnienia com.android.vending.BILLING w pliku manifestu Androida.
  • Do klasy BillingClient.Builder dodano nowy kreator.
  • Wprowadziliśmy wzór konstruktora dla klasy SkuDetailsParams, która ma służyć do wywoływania metod służących do zapytania o kody SKU.
  • Zmieniliśmy kilka metod interfejsu API, aby zapewnić ich spójność (te same nazwy i kolejność argumentów zwracanych).

Zmiany w zachowaniu

Wersja 1.0 Biblioteki płatności w Google Play zawiera te zmiany zachowania:

Klasa BillingClient.Builder

BillingClient.Builder jest teraz inicjowany za pomocą wzorca newBuilder:

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

Metoda launchBillingFlow jest teraz wywoływana za pomocą klasy BillingFlowParams.

Aby zainicjować proces płatności w przypadku zakupu lub subskrypcji, metoda launchBillingFlow() otrzymuje instancję BillingFlowParams zainicjowaną za pomocą parametrów specyficznych dla żądania:

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

Nowy sposób przesyłania zapytań o dostępne produkty

Argumenty metod queryPurchaseHistoryAsync() i querySkuDetailsAsync() zostały zapakowane w schemat Builder:

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

Dla wygody użytkowników i w celu zapewnienia spójności w naszych interfejsach API wynik jest teraz zwracany za pomocą kodu wyniku i listy obiektów SkuDetails zamiast poprzedniej klasy owijającej:

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

Zmieniono kolejność parametrów w metodzie onConsumeResponse()

Kolejność argumentów funkcji onConsumeResponse z interfejsu ConsumeResponseListener została zmieniona, aby była spójna w całym interfejsie API:

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

Rozwinięty obiekt PurchaseResult

PurchaseResult został odwinięty, aby zachować spójność w naszych interfejsach API:

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

Poprawki błędów

Wersja przedpremierowa 1 dla programistów (12 czerwca 2017 r., ogłoszenie)

Uruchomiliśmy wersję przedpremierową dla deweloperów, która ma na celu uproszczenie procesu tworzenia w zakresie płatności. Dzięki temu deweloperzy mogą skupić się na wdrażaniu logiki specyficznej dla aplikacji na Androida, takiej jak architektura aplikacji czy struktura nawigacji.

Biblioteka zawiera kilka przydatnych klas i funkcji, których możesz używać podczas integrowania aplikacji na Androida z interfejsem Google Play Billing API. Biblioteka zapewnia też warstwę abstrakcji na poziomie usługi Android Interface Definition Language (AIDL), co ułatwia deweloperom definiowanie interfejsu między aplikacją a interfejsem Google Play Billing API.