Ten dokument zawiera informacje o wersjach Biblioteki płatności w Google Play.
Umiejętności związane z Androidem
Wyświetl na GitHubieUaktualnianie Biblioteki płatności w Play
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.Wersja 9.1.0 Biblioteki płatności w Google Play (18.06.2026)
Dostępna jest już wersja 9.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
- Nowe interfejsy API do opcji rozliczeń:
- Dodaliśmy metodę
BillingClient.getBillingChoiceInfoAsync(), która umożliwia pobieranie informacji o opcjach płatności dostępnych dla użytkownika. - Dodano klasę
BillingChoiceInfo, która zawiera szczegóły odpowiedzi, w tym adresy URL obrazów i informacje o lojalności. - Dodano
GetBillingChoiceInfoParams, aby skonfigurować żądanie. - Dodano numer
BillingChoiceInfoResponseListener, aby można było odebrać połączenie zwrotne. - Dodano funkcję zawieszenia rozszerzenia Kotlin
BillingClient.getBillingChoiceInfo(). - Dodano
BillingClient.showBillingProgramInformationDialog(), aby wyświetlać okno z informacjami o programie rozliczeniowym. - Dodano
BillingProgramInformationDialogParams, aby skonfigurować okno. - Dodano numer
BillingProgramInformationDialogListener, na który ma zostać wykonane połączenie zwrotne. - Dodaliśmy
BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails, aby podać szczegółowe informacje o dostępności opcji rozliczeniowych. - Dodano parametr
ChoiceScreenType, aby określić typ ekranu wyboru.
- Dodaliśmy metodę
Wersja 9.0.0 Biblioteki płatności w Google Play (19.05.2026)
Wersja 9.0.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne. Jeśli chcesz przeprowadzić migrację z poprzednich wersji PBL, zapoznaj się z przewodnikiem po migracji do PBL 9.
Podsumowanie zmian
Zaktualizowane kody błędów dotyczące zablokowanej aktywności w Sklepie Play: zaktualizowaliśmy kody błędów dotyczące zablokowanych aplikacji w Sklepie Play. W przypadkach, gdy aplikacja Sklep Play jest blokowana przez system (np. w trybie dziecięcym dostosowanym przez producenta OEM), kod odpowiedzi zmienił się z
ERRORnaBILLING_UNAVAILABLE. Dodatkowo w takich przypadkachBillingResultwyświetla teraz komunikat debugowania Sklep Play jest zablokowany.Aktualizacja dotycząca dopuszczalności wartości null w przypadku rozliczeń udostępnianych przez dewelopera: metoda
DeveloperProvidedBillingDetails.getLinkUri()została zaktualizowana i może zwracać wartość@Nullable. Ta zmiana obsługuje scenariusze, w których identyfikator URI bezpośredniego linku do płatności zewnętrznych jest niedostępny na etapie wyboru płatności.Aby bezpiecznie obsłużyć tę zmianę, upewnij się, że kod integracji obsługuje zarówno wartości
null, jak i puste ciągi znaków ("") z metodyDeveloperProvidedBillingDetails.getLinkUri()przed analizą lub uruchomieniem intencji przeglądarki.Zaktualizowano
targetSdkVersiondo 35.Możesz teraz używać wiadomości w aplikacji, aby powiadamiać użytkowników o nadchodzącym wzroście ceny wymagającym zgody użytkownika. Dzięki temu użytkownicy mogą potwierdzić wzrost ceny bez opuszczania aplikacji. Wiadomość o oczekującym wzroście ceny wymagającym zgody użytkownika jest wyświetlana od pierwszego dnia, w którym użytkownik może zaakceptować wzrost ceny, i jest wyświetlana maksymalnie raz na 7 dni.
Wersja 8.3.0 Biblioteki płatności w Google Play (23.12.2025)
Dostępna jest już wersja 8.3.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
Nowe interfejsy API do płatności zewnętrznych:
- Dodaliśmy klasy obsługujące proces płatności zewnętrznych:
- Dodano
enableBillingProgram(EnableBillingProgramParams), aby umożliwić płatności zewnętrzne. - Dodano
BillingFlowParams.Builder.enableDeveloperBillingOption, aby uruchomić proces płatności zewnętrznych.
Ulepszona kategoryzacja błędów w przypadku rezygnacji z procesu płatności zewnętrznych:
- Jeśli użytkownik opuści proces zakupu, aby dokonać płatności w aplikacji zewnętrznej (np. w e-portfelu), i porzuci transakcję bez powrotu, kod odpowiedzi zwracany klientowi to teraz
BillingResponseCode.USER_CANCELED(1) z komunikatem debugowaniaBILLING_ACTIVITY_PAUSED(wcześniej domyślnieBillingResponseCode.ERROR(6)).
- Jeśli użytkownik opuści proces zakupu, aby dokonać płatności w aplikacji zewnętrznej (np. w e-portfelu), i porzuci transakcję bez powrotu, kod odpowiedzi zwracany klientowi to teraz
Wersja 8.2.1 Biblioteki płatności w Google Play (15.12.2025)
Dostępna jest już wersja 8.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Poprawki błędów
- Naprawiliśmy błąd w
isBillingProgramAvailableAsyncicreateBillingProgramReportingDetailsAsync. Zaktualizuj do wersji 8.2.1, aby korzystać z tych interfejsów API wprowadzonych w wersji 8.2.0.
Wersja 8.2.0 Biblioteki płatności w Google Play (9.12.2025)
Dostępna jest już wersja 8.2.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
Nowe interfejsy API do linków do treści zewnętrznych i ofert zewnętrznych:
- Dodano
enableBillingProgram, aby skonfigurowaćBillingClientdla tych programów. - Dodaliśmy
isBillingProgramAvailableAsync, aby określić, czy użytkownik kwalifikuje się do korzystania z funkcji. - Dodaliśmy metodę
createBillingProgramReportingDetailsAsync, która umożliwia utworzenie tokena transakcji zewnętrznej, który musi być używany do raportowania. - Dodano
launchExternalLink, aby umożliwić inicjowanie linku zewnętrznego do oferty treści cyfrowych lub pobrania aplikacji.
- Dodano
Zmiany w programie ofert zewnętrznych:
- Wprowadziliśmy zmiany w zasadach dotyczących programu ofert zewnętrznych. Szczegółowe informacje znajdziesz w zmianach w programie. Aby dowiedzieć się, jak uruchamiać procesy ofert zewnętrznych za pomocą nowych interfejsów API, zapoznaj się z przewodnikiem po integracji.
- Wycofano interfejs API
BillingClient.Builder.enableExternalOffer. - Wycofano interfejs API
isExternalOfferAvailableAsync. - Wycofano interfejs API
createExternalOfferReportingDetailsAsync. - Wycofano interfejs API
showExternalOfferInformationDialog.
Wersja 8.1.0 Biblioteki płatności w Google Play (6.11.2025)
Dostępna jest już wersja 8.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
Zawieszone subskrypcje
Do metody
BillingClient.queryPurchasesAsync()dodano nowy parametr, który umożliwia uwzględnianie zawieszonych subskrypcji podczas wysyłania zapytań o subskrypcje. Zawieszone subskrypcje są nadal przypisane do użytkownika, ale nie są aktywne, ponieważ użytkownik wstrzymał subskrypcję lub jego forma płatności za odnowienie została odrzucona.Obiekt
Purchasezwrócony w detektorze zwróci wartośćisSuspended() = truew przypadku wszystkich zawieszonych subskrypcji. W takim przypadku nie należy przyznawać dostępu do kupionej subskrypcji, ale skierować użytkownika do centrum subskrypcji, gdzie może on zarządzać formami płatności lub stanem wstrzymania, aby ponownie aktywować subskrypcję.Zmiany dotyczące subskrypcji:
Obiekt
BillingFlowParams.ProductDetailsParamsma teraz metodęsetSubscriptionProductReplacementParams(), w której możesz określić informacje o zastąpieniu na poziomie produktu.Obiekt
SubscriptionProductReplacementParamsma 2 metody ustawiające:setOldProductId: stary produkt, który należy zastąpić produktem w bieżącymProductDetails.setReplacementMode: to jest tryb zastępowania na poziomie produktu. Tryby są zasadniczo takie same jak w przypadku SubscriptionUpdateParams, ale mapowanie wartości zostało zaktualizowane. Wprowadziliśmy nowy tryb zastępowaniaKEEP_EXISTING, który pozwala zachować dotychczasowy harmonogram płatności za produkt.
SubscriptionUpdateParams setSubscriptionReplacementMode zostanie wycofany. Zamiast tego użyj
SubscriptionProductReplacementParams.setReplacementMode.
Zaktualizowano
minSdkVersiondo wersji 23.Włączyliśmy interfejsy API przedsprzedaży produktów kupowanych raz.
Interfejs API
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails(), który pobiera szczegóły przedsprzedaży, jest już dostępny.Biblioteka płatności w Google Play obsługuje teraz Kotlin w wersji 2.2.0.
Wersja 8.0.0 Biblioteki płatności w Google Play (30.06.2025)
Dostępna jest już wersja 8.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
Zakupy w aplikacji będą teraz nazywane produktami kupowanymi raz.
Wiele opcji zakupu i ofert w przypadku produktów kupowanych raz.
Teraz możesz mieć wiele opcji zakupu i ofert w przypadku produktów kupowanych raz. Zapewnia to elastyczność w zakresie sprzedaży produktów i ułatwia zarządzanie nimi.
Ulepszyliśmy metodę
queryProductDetailsAsync().Przed wprowadzeniem PBL w wersji 8.0.0 metoda
queryProductDetailsAsync()nie zwracała produktów, których nie udało się pobrać. Może to być spowodowane tym, że produkt nie został znaleziony lub nie ma ofert dostępnych dla użytkownika. W przypadku PBL 8.0.0 niepobrane produkty są zwracane z nowym kodem stanu na poziomie produktu, który zawiera informacje o niepobranych produktach. Zwróć uwagę, że nastąpiła zmiana w podpisie metodyProductDetailsResponseListener.onProductDetailsResponse(), która wymaga zmian w aplikacji. Więcej informacji znajdziesz w sekcji Przetwarzanie wyniku.Automatyczne ponowne łączenie z usługą.
Nowy parametr kreatora
BillingClient.Builder.enableAutoServiceReconnection()umożliwia deweloperom włączenie automatycznego ponownego łączenia z usługą, co upraszcza zarządzanie połączeniami, ponieważ ponowne połączenia z usługą Płatności w Play są obsługiwane automatycznie i nie trzeba ręcznie wywoływać metodystartConnection()w przypadku rozłączenia. Więcej informacji znajdziesz w artykule Automatyczne ponowne nawiązywanie połączenia.Kody pododpowiedzi dla metody
launchBillingFlow().BillingResult zwracany z
launchBillingFlow()będzie teraz zawierać pole kodu subodpowiedzi. To pole będzie wypełniane tylko w niektórych przypadkach, aby podać bardziej szczegółowy powód niepowodzenia. Pole sub-response może mieć te wartości:PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS– zwracany, gdy środki użytkownika są mniejsze niż cena produktu, który próbuje kupić.USER_INELIGIBLE– zwracany, gdy użytkownik nie spełnia skonfigurowanych wymagań dotyczących oferty subskrypcji.NO_APPLICABLE_SUB_RESPONSE_CODE– wartość domyślna zwracana, gdy nie ma zastosowania żaden inny kod pododpowiedzi.
Usunęliśmy metodę
queryPurchaseHistory().Metoda
queryPurchaseHistory(), która wcześniej została oznaczona jako wycofana, została teraz usunięta. Szczegółowe informacje o alternatywnych interfejsach API znajdziesz w artykule Sprawdzanie historii zakupów.Usunęliśmy metodę
querySkuDetailsAsync().Metoda
querySkuDetailsAsync(), która została wcześniej oznaczona jako przestarzała, została usunięta. Zamiast tego użyj metody queryProductDetailsAsync.Usunęliśmy metodę
BillingClient.Builder.enablePendingPurchases().Metoda
enablePendingPurchases()bez parametrów, która wcześniej została oznaczona jako przestarzała, została teraz usunięta. Zamiast tego użyjenablePendingPurchases(PendingPurchaseParams params). Pamiętaj, że wycofana metodaenablePendingPurchases()jest funkcjonalnie równoważna metodzieenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).Usunęliśmy przeciążoną metodę
queryPurchasesAsync(), która przyjmuje skuType.Metoda
queryPurchasesAsync(String skuType, PurchasesResponseListener listener), która wcześniej została oznaczona jako przestarzała, została usunięta. Możesz też użyćqueryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener).
Wersja 7.1.1 Biblioteki płatności w Google Play (3.10.2024)
Wersja 7.1.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Poprawki błędów
- Naprawiliśmy błąd w Bibliotece płatności w Play w wersji 7.1.0 związany z testowaniem kodów odpowiedzi
BillingResult.
Wersja 7.1.0 Biblioteki płatności w Google Play (19.09.2024)
Dostępna jest już wersja 7.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
- Ulepszone bezpieczeństwo wątków związane ze stanem połączenia i zarządzaniem.
- Wprowadziliśmy częściowe zmiany w celu przetestowania kodów odpowiedzi
BillingResult, które zostały w pełni opublikowane w Bibliotece płatności w Play 7.1.1. Aby przetestować integrację za pomocą tej funkcji, musisz przejść na Bibliotekę płatności w Google Play w wersji 7.1.1. Występuje błąd, który wpływa tylko na aplikacje z włączonym testowaniem zastępowania płatności i nie ma wpływu na normalne użytkowanie. Więcej informacji znajdziesz w artykule Testowanie kodów odpowiedziBillingResult.
Wersja 7.0.0 Biblioteki płatności w Google Play (14.05.2024)
Dostępna jest już wersja 7.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
Dodaliśmy interfejsy API obsługujące subskrypcje ratalne.
- Dodaliśmy
ProductDetails.InstallmentPlanDetailsw przypadku abonamentów ratalnych, które użytkownicy mogą kupić. Ten interfejs API pomaga aplikacji zidentyfikować plan ratalny i jego konfigurację zobowiązania, aby przekazać użytkownikowi powiązane informacje. Więcej informacji znajdziesz w przewodniku po ratach za subskrypcję.
- Dodaliśmy
Dodano
PendingPurchasesParamsiBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams), które zastępują wycofany w tej wersji elementBillingClient.Builder.enablePendingPurchases().- Wycofana funkcja
enablePendingPurchases()jest funkcjonalnie równoważna funkcjienablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).
- Wycofana funkcja
Dodaliśmy interfejsy API obsługujące oczekujące transakcje w przypadku abonamentów przedpłaconych:
- Użyj
PendingPurchasesParams.Builder.enablePrepaidPlans()wraz zBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams), aby włączyć oczekujące transakcje w przypadku abonamentów przedpłaconych. Dodając obsługę, upewnij się, że aplikacja prawidłowo zarządza cyklami życia subskrypcji. Więcej informacji znajdziesz w przewodniku po oczekujących zakupach. - Dodano metody
Purchase.PendingPurchaseUpdateiPurchase.getPendingPurchaseUpdate()do pobierania oczekującego doładowania lub przejścia na wyższą lub niższą wersję istniejącej subskrypcji.
- Użyj
Usunięto:
BillingClient.Builder.enableAlternativeBilling(),AlternativeBillingListeneriAlternativeChoiceDetails.- Deweloperzy powinni zamiast tego używać
BillingClient.Builder.enableUserChoiceBilling()zUserChoiceBillingListeneriUserChoiceDetailsw wywołaniu zwrotnym detektora.
- Deweloperzy powinni zamiast tego używać
Usunięto:
BillingFlowParams.ProrationMode,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()iBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode().Usunięto
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken().- Deweloperzy powinni zamiast tego używać
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String).
- Deweloperzy powinni zamiast tego używać
Metoda
BillingClient.queryPurchaseHistoryAsync()została wycofana i zostanie usunięta w przyszłej wersji. Deweloperzy powinni zamiast tego używać tych alternatywnych rozwiązań:- Potwierdzone i oczekujące zakupy: użyj metody
BillingClient.queryPurchasesAsync(), aby pobrać aktywne zakupy. - Zakupy zużywalne: deweloperzy powinni śledzić zakupy zużywalne na własnych serwerach.
- Anulowane zakupy: użyj interfejsu API dla deweloperów voided-purchases.
- Więcej informacji znajdziesz w artykule Sprawdzanie historii zakupów.
- Potwierdzone i oczekujące zakupy: użyj metody
BillingFlowParams.ProductDetailsParams.setOfferToken()teraz zgłasza wyjątek, gdy deweloperzy podają pusty parametrofferToken.Zaktualizowano
minSdkVersiondo 21 itargetSdkVersiondo 34.
Wersja 6.2.1 Biblioteki płatności w Google Play (16.04.2024)
Dostępna jest już wersja 6.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
- Naprawiliśmy błąd w
BillingClient.showAlternativeBillingOnlyInformationDialog(), który powodował, że w niektórych przypadkach po zakończeniu działania okna nie była wywoływana metodaAlternativeBillingOnlyInformationDialogListener.
thought Wersja 6.2.0 Biblioteki płatności w Google Play (6.03.2024)
Wersja 6.2.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
- Dodaliśmy interfejsy API obsługujące oferty zewnętrzne.
- Dodaliśmy
BillingClient.Builder.enableExternalOffer(), aby umożliwić udostępnianie ofert zewnętrznych. - Dodaliśmy metodę
BillingClient.isExternalOfferAvailableAsync(), która pozwala sprawdzić dostępność funkcji ofert zewnętrznych. - Dodano
BillingClient.showExternalOfferInformationDialog(), aby wyświetlać użytkownikom okno z informacjami, zanim zostaną przekierowani poza aplikację. - Dodano metodę
BillingClient.createExternalOfferReportingDetailsAsync(), aby utworzyć ładunek wymagany do raportowania transakcji dokonanych w ramach ofert zewnętrznych.
- Dodaliśmy
Biblioteka płatności w Google Play w wersji 6.1.0 (14.11.2023)
Dostępna jest już wersja 6.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Podsumowanie zmian
- Dodaliśmy interfejsy API obsługujące tylko rozliczenia alternatywne (tj.bez opcji wyboru przez użytkownika).
- Dodano
BillingClient.Builder.enableAlternativeBillingOnly(), aby umożliwić oferowanie wyłącznie rozliczeń alternatywnych. - Dodaliśmy
BillingClient.isAlternativeBillingOnlyAvailableAsync(), aby sprawdzić dostępność opcji oferowania wyłącznie rozliczeń alternatywnych. - Dodano metodę
BillingClient.showAlternativeBillingOnlyInformationDialog(), która wyświetla okno z informacją dla użytkowników, że używane są tylko rozliczenia alternatywne. - Dodano
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync(), aby utworzyć ładunek wymagany do raportowania transakcji dokonanych tylko za pomocą rozliczeń alternatywnych.
- Dodano
- Zaktualizowaliśmy interfejsy API systemu rozliczeniowego opartego na wyborze użytkownika.
- Dodano interfejs
UserChoiceBillingListener, który zastępuje interfejs AlternativeBillingListener oznaczony jako wycofany. - Dodano
UserChoiceDetails, aby zastąpićAlternativeChoiceDetails, który został oznaczony jako wycofany. - Dodano
BillingClient.Builder.enableUserChoiceBilling(), aby zastąpićBillingClient.Builder.enableAlternativeBilling(), które zostało oznaczone jako wycofane.
- Dodano interfejs
- Dodano
BillingClient.getBillingConfigAsync(), aby pobierać kraj w Google Play.
Wersja 6.0.1 Biblioteki płatności w Google Play (22.06.2023)
Wersja 6.0.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
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ń Kotlin.
Podsumowanie zmian
Dodaliśmy nowy typ wyliczeniowy
ReplacementMode, który zastępujeProrationMode.Pamiętaj, że
ProrationModejest nadal dostępny ze względu na zgodność wsteczną.Usunięto identyfikator zamówienia w przypadku zakupów w aplikacji
PENDING.Wcześniej identyfikator zamówienia był zawsze tworzony, nawet jeśli zakup był oczekujący. 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.Usunęliśmy metody
queryPurchasesilaunchPriceConfirmationFlow.Metody
queryPurchasesilaunchPriceConfirmationFlow, które wcześniej zostały oznaczone jako wycofane, zostały teraz usunięte z Biblioteki płatności w Sklepie Play w wersji 6.0.0. Deweloperzy powinni używaćqueryPurchasesAsynczamiastqueryPurchases. Informacje o alternatywach dlalaunchPriceConfirmationFlowznajdziesz w artykule Zmiany cen.Dodano nowy kod odpowiedzi na błąd sieci.
W Bibliotece rozliczeń Google Play w wersji 6.0.0 dodano nowy kod odpowiedzi błędu sieci:
NETWORK_ERROR. Ten kod jest zwracany, gdy wystąpi błąd z powodu problemu z połączeniem sieciowym. Te błędy połączenia sieciowego były wcześniej zgłaszane jakoSERVICE_UNAVAILABLE.Zaktualizowano
SERVICE_UNAVAILABLEiSERVICE_TIMEOUT.Począwszy od wersji 6.0.0 PBL, błędy spowodowane przekroczeniem limitu czasu przetwarzania będą zwracane jako
SERVICE_UNAVAILABLEzamiast obecnegoSERVICE_TIMEOUT.W przypadku wcześniejszych wersji PBL działanie nie ulega zmianie.
Usunięto
SERVICE_TIMEOUT.Od wersji 6.0.0 biblioteki PBL metoda
SERVICE_TIMEOUTnie będzie już zwracana. Poprzednie wersje Biblioteki płatności w Play będą nadal zwracać ten kod.Dodano dodatkowe logowanie.
Wersja 6 Biblioteki rozliczeniowej Play zawiera dodatkowe logowanie, które zapewnia wgląd w korzystanie z interfejsu API (np. informacje o powodzeniu i niepowodzeniu) oraz problemy z połączeniem z usługą. Te informacje będą używane do ulepszania działania Biblioteki płatności w Play i zapewniania lepszej pomocy w przypadku błędów.
Wersja 5.2.1 Biblioteki płatności w Google Play (22.06.2023)
Dostępna jest teraz wersja 5.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
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ń Kotlin.
Podsumowanie zmian
- Dodaliśmy klasy obsługujące alternatywne procesy płatności na telefonach i tabletach dla użytkowników w Korei Południowej:
- Dodano metodę
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId(), która umożliwia określenie identyfikatora transakcji zewnętrznej dla subskrypcji źródłowej. - Dodano metodę
BillingClient.Builder.enableAlternativeBilling(), aby umożliwić użytkownikom w Korei Południowej wybór opcji rozliczeń alternatywnych.
Biblioteka płatności w Google Play w wersji 5.1 (31.10.2022)
Dostępna jest już wersja 5.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Dodano metodę
ProductDetails.SubscriptionOfferDetails.getOfferId()do pobierania identyfikatora oferty. - Dodano metodę
ProductDetails.SubscriptionOfferDetails.getBasePlanId()do pobierania identyfikatora abonamentu podstawowego. - Zaktualizowano
targetSdkVersiondo 31.
Wersja 5.0 Biblioteki płatności w Google Play (11.05.2022)
Dostępna jest już wersja 5.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Wprowadziliśmy nowy model subskrypcji, w tym nowe elementy, które umożliwiają tworzenie wielu ofert dla jednego produktu objętego subskrypcją. Więcej informacji znajdziesz w przewodniku po migracji.
- Dodano
BillingClient.queryProductDetailsAsync(), aby zastąpićBillingClient.querySkuDetailsAsync(). - Dodano metodę
setIsOfferPersonalized()na potrzeby wymagań dotyczących ujawniania informacji o spersonalizowanych cenach w UE. Więcej informacji o korzystaniu z tej metody znajdziesz w artykule Wskazywanie spersonalizowanej ceny. - Usunęliśmy metodę
queryPurchases(), która została wcześniej wycofana i zastąpiona przez metodę queryPurchasesAsync wprowadzoną w Bibliotece płatności w Google Play w wersji 4.0.0. - Interfejs
launchPriceChangeFlowzostał wycofany i w przyszłej wersji zostanie usunięty. Więcej informacji o alternatywach znajdziesz w artykule Uruchamianie procesu potwierdzania zmiany ceny. - Usunięto metodę
setVrPurchaseFlow(), która była wcześniej używana podczas tworzenia instancji procesu zakupu. W poprzednich wersjach ta metoda przekierowywała użytkownika na urządzenie z Androidem, aby mógł dokończyć zakup. Gdy usuniesz tę metodę, użytkownicy będą dokonywać zakupów w standardowy proces zakupu.
Biblioteka płatności w Google Play w wersji 4.1 (23.02.2022)
Dostępna jest już wersja 4.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlin.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Dodaliśmy metodę
BillingClient.showInAppMessages(), aby ułatwić obsługę odrzuconych płatności za subskrypcję. Więcej informacji o tym, jak używać wiadomości w aplikacji do obsługi odrzuconych płatności za subskrypcje, znajdziesz w artykule Obsługa odrzuconych płatności.
Biblioteka płatności w Google Play w wersji 4.0 (18.05.2021)
Wersja 4.0.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
Dodano zasadę
BillingClient.queryPurchasesAsync(), która zastąpi zasadęBillingClient.queryPurchases(). Ta ostatnia zostanie usunięta w przyszłej wersji.Dodano nowy tryb zastępowania subskrypcji
IMMEDIATE_AND_CHARGE_FULL_PRICE.Dodano metodę
BillingClient.getConnectionState()do pobierania stanu połączenia Biblioteki płatności w Play.Zaktualizowano Javadoc i implementację, aby wskazać, w którym wątku można wywołać metodę i w którym wątku są publikowane wyniki.
Dodaliśmy metodę
BillingFlowParams.Builder.setSubscriptionUpdateParams()jako nowy sposób inicjowania aktualizacji subskrypcji. Zastępuje to usunięte:BillingFlowParams#getReplaceSkusProrationMode,BillingFlowParams#getOldSkuPurchaseToken,BillingFlowParams#getOldSku,BillingFlowParams.Builder#setReplaceSkusProrationMode,BillingFlowParams.Builder#setOldSku.Dodano
Purchase.getQuantity()iPurchaseHistoryRecord.getQuantity().Dodano:
Purchase#getSkus()iPurchaseHistoryRecord#getSkus(). Zastępują one usunięte funkcjePurchase#getSkuiPurchaseHistoryRecord#getSku.Usunięto:
BillingFlowParams#getSku,BillingFlowParams#getSkuDetailsiBillingFlowParams#getSkuType.
Biblioteka płatności w Google Play w wersji 3.0.3 (12.03.2021)
Dostępna jest już wersja 3.0.3 Biblioteki płatności w Google Play, rozszerzenia Kotlin i wtyczki Unity.
Poprawki błędów w językach Java i Kotlin
- Naprawiono wyciek pamięci podczas wywoływania funkcji
endConnection(). - Rozwiązaliśmy problem występujący, gdy Biblioteka płatności w Google Play jest używana przez aplikacje, które korzystają z trybu uruchamiania pojedynczego zadania. Gdy aplikacja zostanie wznowiona z poziomu programu uruchamiającego Androida, a okno rozliczeniowe było widoczne przed zawieszeniem, zostanie wywołane wywołanie zwrotne
onPurchasesUpdated().
Poprawki błędów w Unity
- Zaktualizuj do wersji 3.0.3 Javy, aby naprawić wyciek pamięci i rozwiązać problem uniemożliwiający zakupy, gdy aplikacja jest wznawiana z poziomu programu uruchamiającego Androida, a okno rozliczeń było widoczne przed zawieszeniem.
Biblioteka płatności w Google Play w wersji 3.0.2 (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 współprogram kończył się błędem „Already resumed” (Już wznowiono).
- Naprawiliśmy nierozwiązane odwołania, gdy rozszerzenie Kotlin jest używane 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ępna jest już wersja 3.0.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że jeśli aplikacja została zamknięta i przywrócona podczas procesu płatności, metoda
PurchasesUpdatedListenermogła nie zostać wywołana z wynikiem zakupu.
Wersja 3.0 Biblioteki płatności w Google Play (8.06.2020)
Dostępna jest już wersja 3.0.0 Biblioteki płatności w Google Play, rozszerzenia Kotlin i wtyczki Unity.
Podsumowanie zmian
- Usunęliśmy obsługę kodów SKU z nagrodą.
- Usunięto parametry
ChildDirectediUnderAgeOfConsent. - Usunęliśmy wycofane metody ładunku dewelopera.
- Usunęliśmy wycofane metody
BillingFlowParams.setAccountId()iBillingFlowParams.setDeveloperId(). - Usunęliśmy wycofane metody
BillingFlowParams.setOldSkus(String oldSku)iBillingFlowParams.addOldSku(String oldSku). - Dodano adnotacje dotyczące dopuszczalności wartości null.
Poprawki błędów
SkuDetails.getIntroductoryPriceCycles()zwraca terazintzamiastString.- 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 (20.05.2020)
Dostępna jest już wersja 2.2.1 Biblioteki płatności w Google Play.
Poprawki błędów
- Zaktualizowano domyślną wersję biblioteki Płatności w Google Play w języku Java, 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 Płatności w Google Play zawiera funkcje, które pomagają deweloperom upewnić się, że zakupy są przypisywane do właściwego użytkownika. Dzięki tym zmianom nie trzeba już tworzyć niestandardowych rozwiązań na podstawie danych o płatnościach dewelopera. W ramach tej aktualizacji funkcja ładunku dewelopera została wycofana i zostanie usunięta w przyszłej wersji. Więcej informacji, w tym zalecane alternatywy, znajdziesz w artykule Ładunek dewelopera.
Biblioteka płatności w Google Play 2 na Unity
Oprócz obecnych wersji Biblioteki płatności w Google Play 2 w językach Java i Kotlin udostępniliśmy też wersję biblioteki do użytku z silnikiem Unity. Deweloperzy gier korzystający z interfejsu API zakupów w aplikacji Unity mogą teraz przejść na nową wersję, aby korzystać ze wszystkich funkcji Biblioteki płatności w Google Play 2 i ułatwić sobie późniejsze uaktualnienia do przyszłych wersji Biblioteki płatności w Google Play.
Więcej informacji znajdziesz w artykule Korzystanie z Płatności w Google Play w Unity.
Podsumowanie zmian
- Biblioteka płatności w Google Play w języku Java
- W
AcknowledgePurchaseParamswycofano metodysetDeveloperPayload()igetDeveloperPayload(). - W
ConsumeParamswycofano metodysetDeveloperPayload()igetDeveloperPayload(). - W
BillingFlowParamszmieniono nazwęsetAccountId()nasetObfuscatedAccountId()oraz dodano informację o ograniczeniu długości do 64 znaków i ograniczeniu uniemożliwiającym podawanie w tym polu informacji umożliwiających identyfikację.setAccountId()została oznaczona jako wycofana i zostanie usunięta w przyszłej wersji biblioteki. - W
BillingFlowParamsdodanosetObfuscatedProfileId(), który działa podobnie dosetObfuscatedAccountId(). Więcej informacji znajdziesz w artykule o aktualizacjach i alternatywach dla danych dewelopera. - W
Purchasedodaliśmy metodęgetAccountIdentifiers(), która zwraca ukryte identyfikatory kont ustawione wBillingFlowParams. - W
BillingClientmetodaloadRewardedSku()została oznaczona jako wycofana w ramach wycofywania kodów SKU nagród.
- W
Biblioteka płatności w Google Play w wersji 2.1.0 i rozszerzenie Kotlin w wersji 2.1.0 (10.12.2019)
Dostępna jest już wersja 2.1.0 Biblioteki płatności w Google Play i nowe rozszerzenie Kotlin. Rozszerzenie Biblioteki płatności w Play dla języka Kotlin udostępnia idiomy interfejsu API, które są alternatywą dla języka Kotlin i zapewniają lepsze bezpieczeństwo wartości null oraz współprogramy. Przykłady kodu znajdziesz w artykule Korzystanie z Biblioteki płatności w Google Play.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- W
BillingFlowParamswycofanosetOldSku(String oldSku)i zastąpiono przezsetOldSku(String oldSku, String purchaseToken), aby uniknąć niejednoznaczności, gdy wiele kont na urządzeniu ma ten sam kod SKU.
Wersja 2.0.3 Biblioteki płatności w Google Play (5.08.2019)
Dostępna jest już wersja 2.0.3 Biblioteki płatności w Google Play.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że usługa
querySkuDetailsAsync()czasami kończyła działanie z kodemDEVELOPER_ERROR, zamiast zwracać wynik powodzenia.
Wersja 2.0.2 Biblioteki płatności w Google Play (8.07.2019)
Dostępna jest już wersja 2.0.2 Biblioteki płatności w Google Play. Ta wersja zawiera aktualizacje dokumentacji referencyjnej i nie zmienia funkcjonalności biblioteki.
Wersja 2.0.1 Biblioteki płatności w Google Play (6.06.2019)
Dostępna jest już wersja 2.0.1 Biblioteki płatności w Google Play. Ta wersja zawiera następujące zmiany.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że w niektórych przypadkach komunikaty debugowania były zwracane jako
null. - Rozwiązaliśmy potencjalny problem z wyciekiem pamięci.
Wersja 2.0 Biblioteki płatności w Google Play (7.05.2019)
Dostępna jest już wersja 2.0 Biblioteki płatności w Google Play. Ta wersja zawiera następujące zmiany.
Zakupy muszą zostać potwierdzone w ciągu 3 dni
Google Play obsługuje zakupy produktów w aplikacji lub poza nią. Aby zapewnić spójne wrażenia podczas zakupów niezależnie od tego, gdzie użytkownik kupuje Twój produkt, musisz jak najszybciej potwierdzić wszystkie zakupy otrzymane przez Bibliotekę płatności w Google Play po przyznaniu uprawnień użytkownikowi. Jeśli nie potwierdzisz zakupu w ciągu 3 dni, 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 rozpoczyna się, gdy zakup przejdzie w stan PURCHASED, i nie obowiązuje, gdy zakup jest w stanie 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ą zostać potwierdzone, ale nie musisz potwierdzać kolejnych odnowień. Aby sprawdzić, czy zakup wymaga potwierdzenia, możesz sprawdzić pole potwierdzenia w zakupie.
Obiekt Purchase zawiera teraz metodę isAcknowledged(), która wskazuje, czy zakup został potwierdzony. Dodatkowo interfejs Google Play Developer API zawiera 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.
Zakup możesz potwierdzić na jeden z tych sposobów:
- W przypadku produktów konsumpcyjnych użyj metody
consumeAsync(), którą znajdziesz w interfejsie API klienta. - W przypadku produktów, które nie są zużywane, użyj metody
acknowledgePurchase(), którą znajdziesz w interfejsie API klienta. - W interfejsie Server API dostępna jest też nowa metoda
acknowledge().
Usunięto metodę BillingFlowParams.setSku()
W tej wersji usunięto wycofaną wcześniej metodę BillingFlowParams#setSku(). Przed renderowaniem produktów w procesie zakupu musisz teraz wywołać metodę BillingClient.querySkuDetailsAsync(), przekazując wynikowy obiekt SkuDetails do metody BillingFlowParams.Builder.setSkuDetails().
Przykłady kodu znajdziesz w artykule Korzystanie z Biblioteki płatności w Google Play.
Ładunek dewelopera jest obsługiwany
Wersja 2.0 Biblioteki rozliczeniowej Google Play dodaje obsługę ładunku dewelopera – dowolnych ciągów znaków, które można dołączać do zakupów. Możesz dołączyć parametr ładunku dewelopera do zakupu, ale tylko wtedy, gdy zakup zostanie potwierdzony lub wykorzystany. Różni się to od danych dewelopera w AIDL, gdzie można je określić podczas uruchamiania procesu zakupu. Ponieważ zakupy można teraz inicjować spoza aplikacji, ta zmiana gwarantuje, że zawsze będziesz mieć możliwość dodania ładunku do zakupów.
Aby uzyskać dostęp do ładunku w nowej bibliotece, obiekty Purchase zawierają teraz metodę getDeveloperPayload().
Spójne oferty
Gdy oferujesz kod SKU ze zniżką, Google Play zwraca teraz pierwotną cenę kodu SKU, dzięki czemu możesz pokazać użytkownikom, że otrzymują rabat.
SkuDetails zawiera 2 nowe metody pobierania pierwotnej ceny SKU:
getOriginalPriceAmountMicros()- zwraca niesformatowaną pierwotną cenę SKU przed rabatem.
getOriginalPrice()- zwraca pierwotną cenę z dodatkowym formatowaniem waluty.
Transakcje oczekujące
W przypadku wersji 2.0 Biblioteki płatności w Google Play musisz obsługiwać zakupy, które wymagają dodatkowego działania 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 realizowana poza aplikacją. W takim przypadku należy przyznać uprawnienia dopiero po zakończeniu transakcji przez użytkownika.
Aby włączyć oczekujące zakupy, wywołaj metodę enablePendingPurchases() podczas inicjowania aplikacji.
Użyj 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ć aktualizacje stanu Purchase, wykonaj te czynności:
- Podczas uruchamiania aplikacji wywołaj metodę
BillingClient.queryPurchases(), aby pobrać listę nieskonsumowanych produktów powiązanych z użytkownikiem. - Wywołaj
Purchase.getPurchaseState()dla każdego zwróconego obiektuPurchase. - Zaimplementuj metodę
onPurchasesUpdated(), aby reagować na zmiany obiektówPurchase.
Dodatkowo interfejs Google Play Developer API zawiera stan PENDING dla Purchases.products.
Oczekujące transakcje nie są obsługiwane w przypadku subskrypcji.
W tej wersji wprowadziliśmy też nowy typ powiadomień w czasie rzeczywistym dla deweloperów: OneTimeProductNotification. Ten typ powiadomienia zawiera pojedynczą wiadomość o wartości ONE_TIME_PRODUCT_PURCHASED lub ONE_TIME_PRODUCT_CANCELED. Ten typ powiadomienia jest wysyłany tylko w przypadku zakupów powiązanych z opóźnionymi formami płatności, takimi jak gotówka.
Pamiętaj, aby potwierdzać oczekujące zakupy tylko wtedy, gdy stan zakupu to PURCHASED, a nie PENDING.
Zmiany w interfejsie API
Wersja 2.0 Biblioteki płatności w Google Play zawiera kilka zmian w interfejsie API, które obsługują nowe funkcje i wyjaśniają istniejące funkcje.
consumeAsync
consumeAsync() przyjmuje teraz obiekt ConsumeParams zamiast purchaseToken. ConsumeParams zawiera purchaseToken oraz opcjonalne dane dewelopera.
W tej wersji usunięto poprzednią wersję consumeAsync().
queryPurchaseHistoryAsync
Aby uniknąć nieporozumień, queryPurchaseHistoryAsync() zwraca teraz obiekt PurchaseHistoryRecord zamiast obiektu Purchase. Obiekt PurchaseHistoryRecord jest taki sam jak obiekt Purchase, ale odzwierciedla tylko wartości zwracane przez queryPurchaseHistoryAsync() i nie zawiera pól autoRenewing, orderId i packageName. Zwrócone dane nie uległy zmianie – queryPurchaseHistoryAsync() zwraca te same dane co wcześniej.
Wartości zwracane przez BillingResult
Interfejsy API, które wcześniej zwracały liczbę całkowitą BillingResponse, teraz zwracają obiekt BillingResult. BillingResult zawiera liczbę całkowitą BillingResponse oraz ciąg znaków debugowania, którego możesz użyć do diagnozowania błędów. Ciąg debugowania używa języka en-US i nie jest przeznaczony do wyświetlania użytkownikom.
Poprawki błędów
SkuDetails.getIntroductoryPriceAmountMicros()zwraca terazlongzamiastString.
Wersja 1.2.2 Biblioteki płatności w Google Play (7.03.2019)
Wersja 1.2.2 Biblioteki płatności w Google Play już jest. Ta wersja zawiera następujące zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z wątkami, który pojawił się 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 płatności w Google Play z wątku w tle.
- Tworzenie instancji zostało w pełni przeniesione do wątku w tle, aby zmniejszyć prawdopodobieństwo wystąpienia błędów ANR.
Biblioteka płatności w Play w wersji 1.2.1 (4 marca 2019 r.)
Już jest dostępna wersja 1.2.1 Biblioteki płatności w Google Play. Ta wersja zawiera następujące zmiany.
Najważniejsze zmiany
- Dodaliśmy obsługę produktów z nagrodą. Więcej informacji o opcjach zarabiania znajdziesz w artykule Dodawanie funkcji związanych z produktami z nagrodą.
Inne zmiany
- Dodano publiczne konstruktory dla
PurchasesResultiSkuDetailsResult, aby ułatwić testowanie. - Obiekty
SkuDetailsmogą używać nowej metodygetOriginalJson(). - Wszystkie wywołania usługi AIDL są teraz obsługiwane przez wątki w tle.
Poprawki błędów
- Do publicznych interfejsów API nie są już przekazywane detektory wywołań zwrotnych o wartości null.
Biblioteka płatności w Google Play w wersji 1.2 (18.10.2018)
Dostępna jest już wersja 1.2 Biblioteki płatności w Google Play. Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Biblioteka rozliczeniowa Google Play jest teraz objęta licencją zgodnie z Umową licencyjną dotyczącą pakietu Android SDK.
- Dodaliśmy interfejs API
launchPriceChangeConfirmationFlow, który prosi użytkowników o sprawdzenie zmiany oczekującej ceny subskrypcji. - Dodaliśmy obsługę nowego trybu proporcjonalnego (
DEFERRED) podczas przechodzenia na wyższą lub niższą wersję subskrypcji użytkownika. - W klasie
BillingFlowParamszastąpionosetSku()właściwościąsetSkuDetails(). - Naprawiono drobne błędy i zoptymalizowano kod.
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 wejdą do aplikacji.
Aby użyć tego interfejsu API, utwórz obiekt PriceChangeFlowParams, używając skuDetails produktu objętego subskrypcją, a następnie wywołaj launchPriceChangeConfirmationFlow(). Zaimplementuj interfejs PriceChangeConfirmationListener, aby obsłużyć wynik po zakończeniu procesu potwierdzania zmiany ceny, 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. } });
Proces potwierdzania zmiany ceny wyświetla okno z informacjami o nowej cenie i prośbą o jej zaakceptowanie. Ten proces zwraca kod odpowiedzi typu BillingClient.BillingResponse.
Nowy tryb proporcjonalny
Podczas przechodzenia na wyższą lub niższą wersję subskrypcji użytkownika możesz użyć nowego trybu proporcjonalnego: DEFERRED. W tym trybie subskrypcja użytkownika jest aktualizowana przy następnym odnowieniu.
Więcej informacji o ustawianiu tego trybu proporcjonalnego znajdziesz w artykule Ustawianie trybu proporcjonalnego.
Nowa metoda ustawiania szczegółów SKU
W klasie BillingFlowParams metoda setSku() została wycofana.
Ta zmiana ma na celu optymalizację procesu płatności w Google Play.
Podczas tworzenia nowej instancji BillingFlowParams w klientach rozliczeń w aplikacji zalecamy bezpośrednią pracę z obiektem JSON za pomocą 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 1.1 Biblioteki płatności w Play (7.05.2018)
Dostępna jest już wersja 1.1 Biblioteki płatności w Google Play. Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Dodaliśmy obsługę określania trybu proporcjonalnego w
BillingFlowParamspodczas przechodzenia na wyższą lub niższą wersję dotychczasowej subskrypcji. - Flaga logiczna
replaceSkusProrationwBillingFlowParamsnie jest już obsługiwana. Użyj w zamian zasadyreplaceSkusProrationMode. - Metoda
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 w zachowaniu.
Deweloperzy mogą ustawić replaceSkusProrationMode w klasie BillingFlowParams.
ProrationMode zawiera więcej informacji o typie proporcjonalnego rozliczania podczas przechodzenia na wyższą lub niższą wersję 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();
Google Play obsługuje te tryby proporcjonalnego rozliczania:
IMMEDIATE_WITH_TIME_PRORATION |
Zastąpienie zaczyna obowiązywać natychmiast, a nowy czas ważności zostanie proporcjonalnie naliczony i przypisany do konta użytkownika lub pobrany z jego konta. Jest to obecnie działanie domyślne. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Wymiana zacznie obowiązywać natychmiast, a cykl rozliczeniowy pozostanie bez zmian. Zostanie naliczona opłata za pozostały okres.
Uwaga: ta opcja jest dostępna tylko w przypadku przejścia na wyższą wersję subskrypcji. |
IMMEDIATE_WITHOUT_PRORATION |
Zastąpienie zacznie obowiązywać natychmiast, a nowa cena zostanie naliczona przy następnym odnowieniu. Cykl rozliczeniowy pozostaje bez zmian. |
Atrybut replaceSkusProration nie jest już obsługiwany w klasie BillingFlowParams
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óry zawiera bardziej szczegółowe instrukcje dotyczące proporcjonalnego rozliczania, ta flaga logiczna nie jest już obsługiwana.
launchBillingFlow() wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi
Biblioteka płatności zawsze wywołuje wywołanie zwrotne PurhcasesUpdatedListener i asynchronicznie zwraca BillingResponse. Zachowywana jest też synchroniczna wartość zwracana przez BillingResponse.
Poprawki błędów
- Prawidłowo kończy działanie metod asynchronicznych, gdy usługa jest odłączona.
BuilderObiekty parametrów nie zmieniają już utworzonych obiektów.- Problem 68087141:
launchBillingFlow()wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi.
Wersja 1.0 Biblioteki płatności w Google Play (19.09.2017, ogłoszenie)
Dostępna jest już wersja 1.0 Biblioteki płatności w Google Play. Ta wersja zawiera następujące zmiany.
Ważne zmiany
- Uprawnienia do płatności wbudowane w pliku manifestu biblioteki. Nie trzeba już dodawać uprawnienia
com.android.vending.BILLINGw pliku manifestu Androida. - Do klasy
BillingClient.Builderdodano nowego konstruktora. - Wprowadziliśmy wzorzec kreatora dla klasy
SkuDetailsParams, który będzie używany w metodach do wysyłania zapytań o SKU. - Zaktualizowano 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 w zachowaniu.
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 za zakup lub subskrypcję, metoda launchBillingFlow() otrzymuje instancję BillingFlowParams zainicjowaną z parametrami właściwymi 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 wysyłania zapytań o dostępne produkty
Argumenty metod queryPurchaseHistoryAsync() i querySkuDetailsAsync() zostały opakowane we wzorzec 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 otoki, co jest wygodniejsze i zapewnia spójność 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 metody 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)
Rozpakowany obiekt PurchaseResult
PurchaseResult
został rozpakowany, aby zapewnić spójność w naszym interfejsie API:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Poprawki błędów
- Brak kodu odpowiedzi w pakiecie PURCHASES_UPDATED
- Rozwiązywanie problemów z ProxyBillingActivity i PurchasesUpdatedListener podczas obracania urządzenia
Wersja przedpremierowa dla programistów 1 (12 czerwca 2017 r., ogłoszenie)
Uruchomiliśmy wersję przedpremierową dla programistów, która ma uprościć proces tworzenia aplikacji w zakresie rozliczeń, dzięki czemu deweloperzy mogą skupić się na wdrażaniu logiki specyficznej dla aplikacji na Androida, takiej jak architektura aplikacji i struktura nawigacji.
Biblioteka zawiera kilka wygodnych klas i funkcji, których możesz używać podczas integracji aplikacji na Androida z interfejsem API Płatności w Google Play. Biblioteka udostępnia też warstwę abstrakcji nad usługą języka definiowania interfejsu Androida (AIDL), co ułatwia deweloperom definiowanie interfejsu między aplikacją a interfejsem API Płatności w Google Play.