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 8.0.0 (30.06.2025)

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

Podsumowanie zmian

  • Produkty w aplikacji będą teraz nazywane produktami kupowanymi raz.

  • Wiele opcji zakupu i ofert dla produktów kupowanych raz.

    Teraz możesz oferować wiele opcji zakupu i ofert dla produktów jednorazowych. Daje to elastyczność w sposobie sprzedaży produktów i upraszcza zarządzanie nimi.

  • Ulepszono metodę queryProductDetailsAsync().

    Przed wersją PBL 8.0.0 metoda queryProductDetailsAsync() nie zwracała produktów, których nie udało się pobrać. Może to być spowodowane tym, że nie znaleziono produktu lub nie ma żadnych ofert dostępnych dla użytkownika. W wersji 8.0.0 interfejsu PBL niewyszukane produkty są zwracane z nowym kodem stanu na poziomie produktu, który zawiera informacje o niewyszukanych produktach. Pamiętaj, że podpis ProductDetailsResponseListener.onProductDetailsResponse() uległ zmianie i wymaga wprowadzenia zmian w aplikacji. Więcej informacji znajdziesz w sekcji Przetwarzanie wyniku.

  • automatyczne ponowne łączenie się z usługą,

    Nowy parametr konstruktora BillingClient.Builder.enableAutoServiceReconnection() pozwala deweloperom włączyć automatyczne ponowne łączenie z usługą, co upraszcza zarządzanie połączeniem, ponieważ automatycznie obsługuje ponowne łączenie z usługą Google Play Billing i eliminuje konieczność ręcznego wywoływania funkcji startConnection() w przypadku utraty połączenia z usługą. Więcej informacji znajdziesz w artykule Automatyczne nawiązywanie połączenia ponownie.

  • Kody odpowiedzi podrzędnych dla metody launchBillingFlow().

    BillingResult zwracany przez launchBillingFlow() będzie teraz zawierać pole kodu odpowiedzi podrzędnej. To pole będzie wypełniane tylko w niektórych przypadkach, aby podać bardziej szczegółowy powód niepowodzenia. W wersji PBL 8.0.0 zwracany jest podkod PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS, gdy środki użytkownika są mniejsze niż cena produktu, który próbuje kupić.

  • Usunięto metodę queryPurchaseHistory().

    Metoda queryPurchaseHistory(), która została wcześniej oznaczona jako wycofana, została teraz usunięta. Więcej informacji o tym, którego z interfejsów API możesz użyć zamiast tego, znajdziesz w artykule Wysyłanie zapytania o historię zakupów.

  • Usunięto metodę querySkuDetailsAsync().

    Metoda querySkuDetailsAsync(), która została wcześniej oznaczona jako wycofana, została teraz usunięta. Zamiast tego użyj funkcji queryProductDetailsAsync.

  • Usunięto metodę BillingClient.Builder.enablePendingPurchases().

    Metoda enablePendingPurchases() bez parametrów, która została wcześniej oznaczona jako wycofana, została teraz usunięta. Zamiast tego użyj interfejsu enablePendingPurchases(PendingPurchaseParams params). Uwaga: wycofane ustawienie enablePendingPurchases() jest funkcjonalnie równoważne ustawieniu enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).

  • Usunięto przeciążoną metodę queryPurchasesAsync(), która przyjmuje parametr skuType.

    Metoda queryPurchasesAsync(String skuType, PurchasesResponseListener listener), która została wcześniej oznaczona jako wycofana, została teraz usunięta. Możesz też użyć polecenia queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener).

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][billing-result], które są w pełni dostępne 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 Google Play w wersji 7.1.1. Wystąpił błąd, który będzie miał wpływ tylko na aplikacje z [testowaniem zastąpienia płatności włączonym][enable-billing-overrides-testing] i nie wpłynie na zwykłe korzystanie z aplikacji. Więcej informacji znajdziesz w sekcji Testowanie kodów odpowiedzi BillingResult. [billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing

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 typ enumeracji ReplacementMode, który zastępuje typ ProrationMode.

    Pamiętaj, że ProrationMode jest nadal dostępny ze względu na zgodność wsteczną.

  • Usunięto identyfikator zamówienia w przypadku zakupów w usłudze 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 Play Billing Library zawiera dodatkowe logowanie, które zapewnia wgląd w korzystanie z interfejsu API (np. powodzenie i niepowodzenie) oraz problemy z połączeniem z usługą. Te informacje posłużą do poprawy wydajności 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 subskrypcyjnego. 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 tym, jak korzystać z tej metody, znajdziesz w artykule Wskazanie ceny spersonalizowanej.
  • 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 Procedura potwierdzenia wprowadzenia 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 sfinalizowania zakupu na urządzeniu z Androidem. Po usunięciu tej metody użytkownicy będą mogli dokonać zakupu 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().
  • Rozwiązanie problemu z Biblioteką płatności w Google Play używaną przez aplikacje, które korzystają z 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ępne są już wersje 3.0.2 Biblioteki płatności w Google Play i jej rozszerzenia na potrzeby Kotlina.

Poprawki błędów

  • Naprawiliśmy błąd w rozszerzeniu Kotlin, który powodował, że coroutine kończyła się z błędem „Już wznowiono”.
  • 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 jej rozszerzenia na potrzeby Kotlina.

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, funkcja 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 przejść na nowszą wersję, aby korzystać ze wszystkich funkcji Biblioteki płatności w Google Play 2 i ułatwić sobie dalsze przechodzenie na nowsze wersje 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 wycofano setOldSku(String oldSku) i zastąpiono go wartością setOldSku(String oldSku, String purchaseToken), aby uniknąć niejasności w przypadku wielu kont na urządzeniu z tym samym identyfikatorem 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

  • Naprawiliśmy błąd, który w niektórych przypadkach powodował zwracanie komunikatów debugowania 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. Nie dotyczy to stanu 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.

Interfejs Google Play Developer API zawiera też 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. Połączenia 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

  • Dodano publiczne konstruktory 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ą na podstawie 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ę abonamentu 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 przepływ 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 przy następnym odnowieniu. 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 odpowiedzi, które nie powiodły się.

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 dodatkowe informacje o typie proporcjonalnego przedłużenia subskrypcji podczas jej uaktualniania lub obniżania.

Kotlin

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

Java

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

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 przejście na wyższą wersję subskrypcji. Ponieważ obsługujemy ProrationMode, która zawiera bardziej szczegółowe instrukcje podziału, 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ę PurhcasesUpdatedListener i zwróci asynchronicznie wartość BillingResponse. 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 wywołuje 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

  • Wbudowane uprawnienie do płatności 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ć 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ę BillingFlowParamsinicjowaną parametrami określonymi w żądaniu:

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()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() {...})

Wynik jest teraz zwracany za pomocą kodu wyniku i listy obiektów SkuDetails zamiast poprzedniej klasy opakowującej, co ma na celu zapewnienie wygody i spójności w naszym interfejsie API:

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 interfejsu onConsumeResponse w interfejsie ConsumeResponseListener została zmieniona, aby była spójna w naszych interfejsach 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)

Udostępniliś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), ułatwiając deweloperom definiowanie interfejsu między aplikacją a interfejsem Google Play Billing API.