Ten dokument zawiera informacje o wersjach Biblioteki płatności w Google Play.
Wersja 8.3.0 Biblioteki płatności w Google Play (23.12.2025)
Dostępne są już wersja 8.3.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin.
Podsumowanie zmian
Nowe interfejsy API płatności zewnętrznych:
- Dodano klasy obsługujące proces płatności zewnętrznych:
- Dodano
enableBillingProgram(EnableBillingProgramParams), aby włączyć płatności zewnętrzne. - Dodano
BillingFlowParams.Builder.enableDeveloperBillingOption, aby uruchomić proces płatności zewnętrznych.
Wersja 8.2.1 Biblioteki płatności w Google Play (15.12.2025)
Wersja 8.2.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Poprawki błędów
- Naprawiono błąd w
isBillingProgramAvailableAsyncicreateBillingProgramReportingDetailsAsync. Aby korzystać z tych interfejsów API wprowadzonych w wersji 8.2.0, zaktualizuj pakiet SDK do wersji 8.2.1.
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 rozszerzenia Kotlin.
Podsumowanie zmian
Nowe interfejsy API linków do treści zewnętrznych i ofert zewnętrznych:
- Dodano
enableBillingProgram, aby skonfigurowaćBillingClientw przypadku tych programów. - Dodano
isBillingProgramAvailableAsync, aby określić, czy użytkownik kwalifikuje się do korzystania z usługi. - Dodaliśmy
createBillingProgramReportingDetailsAsync, aby utworzyć token transakcji zewnętrznej, który musi być używany do raportowania. - Dodano
launchExternalLink, aby inicjować link zewnętrzny do oferty treści cyfrowych lub pobierania aplikacji.
- Dodano
Zmiany w programie ofert zewnętrznych:
- Wprowadziliśmy zmiany w zasadach programu ofert zewnętrznych. Szczegółowe informacje znajdziesz w sekcji zmiany w programie. Aby dowiedzieć się, jak uruchamiać przepływy 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ępne są już wersja 8.1.0 Biblioteki płatności w Google Play i rozszerzenia 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 odrzucono jego formę płatności za odnowienie.Obiekt
Purchasezwrócony w obiekcie nasłuchującym będzie zwracać wartośćisSuspended() = truew przypadku wszystkich zawieszonych subskrypcji. W takim przypadku nie należy przyznawać dostępu do kupionej subskrypcji, tylko skierować użytkownika do centrum subskrypcji, gdzie może on zarządzać formami płatności lub stanem wstrzymania, aby ponownie aktywować subskrypcję.Aktualizacje subskrypcji:
Obiekt
BillingFlowParams.ProductDetailsParamsma teraz metodęsetSubscriptionProductReplacementParams(), w której możesz określić informacje o zastąpieniu na poziomie produktu.Obiekt
SubscriptionProductReplacementParamsma dwie metody ustawiające:setOldProductId: stary produkt, który ma zostać zastąpiony produktem w bieżącejProductDetails.setReplacementMode: jest to tryb zastępowania na poziomie produktu. Tryby są zasadniczo takie same jak SubscriptionUpdateParams, ale mapowanie wartości zostało zaktualizowane. Wprowadziliśmy nowy tryb wymianyKEEP_EXISTING, który umożliwia zachowanie dotychczasowego harmonogramu płatności za produkt.
SubscriptionUpdateParams setSubscriptionReplacementMode zostanie wycofany. Zamiast tego użyj zasady
SubscriptionProductReplacementParams.setReplacementMode.
Zaktualizowano
minSdkVersiondo wersji 23.Włączone interfejsy API przedsprzedaży dla produktów kupowanych raz
Interfejs
ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()API, który pobiera szczegóły zamówienia w 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)
Wersja 8.0.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
Elementy w aplikacji będą teraz nazywane produktami kupowanymi raz.
Wiele opcji zakupu i ofert w przypadku produktów kupowanych raz.
Możesz teraz mieć wiele opcji zakupu i ofert dla produktów kupowanych raz. Zapewnia to elastyczność w sposobie sprzedaży produktów i ułatwia zarządzanie nimi.
Ulepszyliśmy metodę
queryProductDetailsAsync().Przed wersją PBL 8.0.0 metoda
queryProductDetailsAsync()nie zwracała produktów, których nie można było pobrać. Może to być spowodowane np. tym, że nie znaleziono produktu lub nie ma ofert dostępnych dla użytkownika. W przypadku PBL w wersji 8.0.0 niepobrane produkty są zwracane z nowym kodem stanu na poziomie produktu, który zawiera informacje o niepobranych produktach. Pamiętaj, że zmienił się podpis funkcjiProductDetailsResponseListener.onProductDetailsResponse(), co wymaga wprowadzenia zmian w aplikacji. Więcej informacji znajdziesz w sekcji Przetwarzanie wyniku.Automatyczne ponowne łączenie z usługą.
Nowy parametr
BillingClient.Builder.enableAutoServiceReconnection()builder umożliwia programistom włączenie automatycznego ponownego łączenia z usługą, co upraszcza zarządzanie połączeniami, ponieważ automatycznie obsługuje ponowne łączenie z usługą Płatności w Play i eliminuje konieczność ręcznego wywoływaniastartConnection()w przypadku rozłączenia usługi. Więcej informacji znajdziesz w artykule Automatyczne przywracanie połączenia.Kody odpowiedzi podrzędnych dla metody
launchBillingFlow().Obiekt BillingResult zwracany przez interfejs
launchBillingFlow()będzie teraz zawierać pole kodu podrzędnej odpowiedzi. To pole jest 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 kwalifikacji do oferty subskrypcji.NO_APPLICABLE_SUB_RESPONSE_CODE– wartość domyślna zwracana, gdy nie ma zastosowania żaden inny kod podrzędnej odpowiedzi.
Usunęliśmy metodę
queryPurchaseHistory().Metoda
queryPurchaseHistory(), która była wcześniej oznaczona jako przestarzała, została usunięta. Więcej informacji o tym, jakich alternatywnych interfejsów API używać, znajdziesz w artykule Sprawdzanie historii zakupów.Usunęliśmy metodę
querySkuDetailsAsync().Metoda
querySkuDetailsAsync(), która była wcześniej oznaczona jako wycofana, została usunięta. Zamiast niej używaj funkcji queryProductDetailsAsync.Usunęliśmy metodę
BillingClient.Builder.enablePendingPurchases().Metoda
enablePendingPurchases()bez parametrów, która była wcześniej oznaczona jako wycofana, została usunięta. Zamiast tego użyj zasadyenablePendingPurchases(PendingPurchaseParams params). Pamiętaj, że wycofany atrybutenablePendingPurchases()jest funkcjonalnie równoważny atrybutowienablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).Usunęliśmy przeciążoną metodę
queryPurchasesAsync(), która przyjmuje argument skuType.Metoda
queryPurchasesAsync(String skuType, PurchasesResponseListener listener), która była wcześniej oznaczona jako przestarzała, została usunięta. Możesz też użyć poleceniaqueryPurchasesAsync(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ępne są już wersja 7.1.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin.
Podsumowanie zmian
- Ulepszone bezpieczeństwo wątków związane ze stanem połączenia i zarządzaniem nim.
- Wprowadzono częściowe zmiany w kodach odpowiedzi na potrzeby testowania
BillingResult, które zostały w pełni udostępnione w Bibliotece płatności w Play w wersji 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 ma wpływ tylko na aplikacje z włączonym testowaniem zastąpień płatności i nie wpływa na zwykłe użytkowanie. Więcej informacji znajdziesz w artykule Testowanie kodów odpowiedzi.BillingResult
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 rozszerzenia Kotlin.
Podsumowanie zmian
Dodano interfejsy API obsługujące subskrypcje ratalne.
- Dodano
ProductDetails.InstallmentPlanDetailsw przypadku abonamentów podstawowych na raty, które użytkownicy mogą kupić. Ten interfejs API pomaga aplikacji zidentyfikować plan ratalny i jego konfigurację zobowiązania, aby przekazywać użytkownikowi powiązane informacje. Więcej informacji znajdziesz w naszym przewodniku po ratach subskrypcji.
- Dodano
Dodaliśmy
PendingPurchasesParamsiBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams), aby zastąpićBillingClient.Builder.enablePendingPurchases(), które zostało wycofane w tej wersji.- Wycofana funkcja
enablePendingPurchases()jest funkcjonalnie równoważna funkcjienablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).
- Wycofana funkcja
Dodano 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. Podczas dodawania obsługi upewnij się, że aplikacja prawidłowo zarządza też cyklami życia subskrypcji. Więcej informacji znajdziesz w naszym przewodniku po zakupach oczekujących. - Dodano
Purchase.PendingPurchaseUpdateiPurchase.getPendingPurchaseUpdate()do pobierania oczekującego doładowania lub zmiany wersji na wyższą lub niższą w przypadku istniejącej subskrypcji.
- Użyj
Usunięto:
BillingClient.Builder.enableAlternativeBilling(),AlternativeBillingListeneriAlternativeChoiceDetails.- Zamiast tego deweloperzy powinni używać
BillingClient.Builder.enableUserChoiceBilling()zUserChoiceBillingListeneriUserChoiceDetailsw wywołaniu zwrotnym detektora.
- Zamiast tego deweloperzy powinni używać
Usunięto:
BillingFlowParams.ProrationMode,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()iBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode().- Deweloperzy powinni zamiast tego używać elementu
BillingFlowParams.SubscriptionUpdateParams.ReplacementModez elementemBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int).
- Deweloperzy powinni zamiast tego używać elementu
Usunięto
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken().- Deweloperzy powinni zamiast tego używać znacznika
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String).
- Deweloperzy powinni zamiast tego używać znacznika
BillingClient.queryPurchaseHistoryAsync()został wycofany i w przyszłej wersji zostanie usunięty. Zamiast tego deweloperzy powinni używać tych alternatyw:- Potwierdzone i oczekujące zakupy: użyj
BillingClient.queryPurchasesAsync()do pobierania aktywnych zakupów. - Zakupy wykorzystane: deweloperzy powinni śledzić zakupy wykorzystane na własnych serwerach.
- Anulowane zakupy: użyj interfejsu API dla programistów voided-purchases.
- Więcej informacji znajdziesz w artykule Query Purchase History (Zapytanie o historię zakupów).
- Potwierdzone i oczekujące zakupy: użyj
BillingFlowParams.ProductDetailsParams.setOfferToken()teraz zgłasza wyjątek, gdy deweloperzy określą pusty elementofferToken.Zaktualizowano
minSdkVersionna 21, atargetSdkVersionna 34.
Wersja 6.2.1 Biblioteki płatności w Google Play (16.04.2024)
Wersja 6.2.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
- Naprawiliśmy błąd w funkcji
BillingClient.showAlternativeBillingOnlyInformationDialog(), który powodował, że w niektórych przypadkach po zamknięciu okna nie wywoływano funkcjiAlternativeBillingOnlyInformationDialogListener.
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
- Dodano interfejsy API obsługujące oferty zewnętrzne.
- Dodano
BillingClient.Builder.enableExternalOffer()aby umożliwić wyświetlanie ofert zewnętrznych. - Dodano
BillingClient.isExternalOfferAvailableAsync()aby sprawdzić dostępność funkcji oferowania ofert zewnętrznych. - Dodano
BillingClient.showExternalOfferInformationDialog()aby wyświetlać użytkownikom okno informacyjne przed przekierowaniem ich poza aplikację. - Dodano
BillingClient.createExternalOfferReportingDetailsAsync()aby utworzyć ładunek wymagany do zgłaszania transakcji dokonanych za pomocą ofert zewnętrznych.
- Dodano
Wersja 6.1.0 Biblioteki płatności w Google Play (14.11.2023)
Dostępna jest już wersja 6.1.0 Biblioteki płatności w Google Play i rozszerzenia 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 tylko rozliczeń alternatywnych. - Dodano
BillingClient.isAlternativeBillingOnlyAvailableAsync()aby sprawdzić dostępność oferowania tylko rozliczeń alternatywnych. - Dodano
BillingClient.showAlternativeBillingOnlyInformationDialog()aby wyświetlać okno informacyjne, które informuje użytkowników, kiedy używane są tylko rozliczenia alternatywne. - Dodano
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()aby utworzyć ładunek wymagany do zgłaszania transakcji dokonanych tylko za pomocą rozliczeń alternatywnych.
- Dodano
- Zaktualizowano interfejsy API systemu rozliczeniowego opartego na wyborze użytkownika.
- Dodano
UserChoiceBillingListenerw miejsce AlternativeBillingListener oznaczonego jako wycofany. - Dodano
UserChoiceDetailsw miejsceAlternativeChoiceDetailsktóre zostało oznaczone jako wycofane. - Dodano
BillingClient.Builder.enableUserChoiceBilling()w miejsceBillingClient.Builder.enableAlternativeBilling()które zostało oznaczone jako wycofane.
- Dodano
- Dodano
BillingClient.getBillingConfigAsync()aby pobrać 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.
Wersja 6.0 Biblioteki płatności w Google Play (10.05.2023)
Wersja 6.0.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
Dodaliśmy nowy wyliczenie
ReplacementMode, aby zastąpić wyliczenieProrationMode.Pamiętaj, że symbol
ProrationModejest nadal dostępny ze względu na zgodność wsteczną.Usunięto identyfikator zamówienia w przypadku zakupów
PENDING.Wcześniej identyfikator zamówienia był zawsze tworzony, nawet jeśli zakup był w stanie oczekiwania. Od wersji 6.0.0 identyfikator zamówienia nie będzie tworzony w przypadku zakupów oczekujących. 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 usunięte z Biblioteki płatności w Google Play w wersji 6.0.0. Deweloperzy powinni używać znacznikaqueryPurchasesAsynczamiast znacznikaqueryPurchases. Alternatywy dlalaunchPriceConfirmationFlowznajdziesz w sekcji Zmiany cen.Dodano nowy kod odpowiedzi na błąd sieci.
Począwszy od wersji 6.0.0 Biblioteki, dodaliśmy nowy kod odpowiedzi błędu sieciowego:
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.Od wersji PBL 6.0.0 błędy spowodowane przekroczeniem limitu czasu przetwarzania będą zwracane jako
SERVICE_UNAVAILABLEzamiast obecnegoSERVICE_TIMEOUT.W starszych wersjach PBL sposób działania nie ulega zmianie.
Usunięto
SERVICE_TIMEOUT.Od wersji PBL 6.0.0 wartość
SERVICE_TIMEOUTnie będzie już zwracana. Poprzednie wersje Biblioteki płatności w Play będą nadal zwracać ten kod.Dodaliśmy dodatkowe logowanie.
Wersja 6 Biblioteki płatności w Play zawiera dodatkowe rejestrowanie, które dostarcza informacji o korzystaniu z interfejsu API (np. o sukcesach i porażkach) oraz o problemach z połączeniem z usługą. Te informacje będą używane do zwiększania wydajności 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)
Wersja 5.2.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.
Wersja 5.2 Biblioteki płatności w Google Play (06.04.2023)
Wersja 5.2.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
- Dodaliśmy klasy obsługujące rozliczenia alternatywne na urządzeniach mobilnych i tabletach dla użytkowników w Korei Południowej:
- Dodano metodę
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()do określania zewnętrznego identyfikatora transakcji subskrypcji źródłowej. - Dodano
BillingClient.Builder.enableAlternativeBilling()metodę umożliwiającą użytkownikom w Korei Południowej wybór rozliczeń alternatywnych.
Wersja 5.1 Biblioteki płatności w Google Play (31.10.2022)
Wersja 5.1.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Ta wersja zawiera następujące zmiany:
Podsumowanie zmian
- Dodano
ProductDetails.SubscriptionOfferDetails.getOfferId()metodę pobierania identyfikatora oferty. - Dodano
ProductDetails.SubscriptionOfferDetails.getBasePlanId()metodę pobierania identyfikatora abonamentu podstawowego. - Zaktualizowano wartość
targetSdkVersiondo 31.
Wersja 5.0 Biblioteki płatności w Google Play (11.05.2022)
Wersja 5.0.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Ta wersja zawiera następujące zmiany:
Podsumowanie zmian
- Wprowadziliśmy nowy model subskrypcji, w tym nowe jednostki, które umożliwiają tworzenie wielu ofert dla jednego produktu objętego subskrypcją. Więcej informacji znajdziesz w przewodniku po migracji.
- Dodano
BillingClient.queryProductDetailsAsync()w miejsceBillingClient.querySkuDetailsAsync(). - Dodano metodę
setIsOfferPersonalized()dotyczącą wymagań w zakresie ujawniania informacji o spersonalizowanych cenach w UE. Więcej informacji o korzystaniu z tej metody znajdziesz w artykule Wskazywanie ceny spersonalizowanej. - Usunięto
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 zostanie usunięty w przyszłej wersji. Więcej informacji o alternatywnych rozwiązaniach znajdziesz w artykule Uruchamianie procesu potwierdzania zmiany ceny. - Usunięto
setVrPurchaseFlow(), które było wcześniej używane podczas tworzenia instancji procesu zakupu. W poprzednich wersjach ta metoda przekierowywała użytkownika, aby dokończył zakup na urządzeniu z Androidem. Po usunięciu tej metody użytkownicy będą mogli dokonywać zakupu w standardowy proces zakupu.
Wersja 4.1 Biblioteki płatności w Google Play (23.02.2022)
Wersja 4.1.0 Biblioteki płatności w Google Play i rozszerzenia Kotlin są już dostępne.
Ta wersja zawiera następujące zmiany:
Podsumowanie zmian
- Dodano
BillingClient.showInAppMessages()aby ułatwić obsługę odrzuconych płatności za subskrypcję. Więcej informacji o tym, jak korzystać z wiadomości w aplikacji do obsługi odrzuconych płatności za subskrypcje, znajdziesz w artykule Obsługa odrzuconych płatności.
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 rozszerzenia Kotlin są już dostępne.
Podsumowanie zmian
Dodano
BillingClient.queryPurchasesAsync()zamiastBillingClient.queryPurchases(), które zostanie usunięte w przyszłej wersji.Dodaliśmy nowy tryb zastępowania subskrypcji
IMMEDIATE_AND_CHARGE_FULL_PRICE.Dodano
BillingClient.getConnectionState()metodę pobierania stanu połączenia Biblioteki płatności w Play.Zaktualizowano dokumentację Javadoc i implementację, aby wskazać, w którym wątku można wywołać metodę i w którym wątku publikowane są wyniki.
Dodano
BillingFlowParams.Builder.setSubscriptionUpdateParams()jako nowy sposób inicjowania aktualizacji subskrypcji. Zastępuje to usunięte elementy:BillingFlowParams#getReplaceSkusProrationMode,BillingFlowParams#getOldSkuPurchaseToken,BillingFlowParams#getOldSku,BillingFlowParams.Builder#setReplaceSkusProrationModeiBillingFlowParams.Builder#setOldSku.Dodano
Purchase.getQuantity()iPurchaseHistoryRecord.getQuantity().Dodano
Purchase#getSkus()iPurchaseHistoryRecord#getSkus(). Zastępują one funkcjePurchase#getSkuiPurchaseHistoryRecord#getSku, które zostały usunięte.Usunięto:
BillingFlowParams#getSku,BillingFlowParams#getSkuDetailsiBillingFlowParams#getSkuType.
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 językach Java i Kotlin
- Naprawiono wyciek pamięci podczas wywoływania funkcji
endConnection(). - Rozwiązanie problemu z Biblioteką płatności w Google Play w aplikacjach, które używają trybu uruchamiania pojedynczego zadania. A
onPurchasesUpdated()Wywołanie zwrotne zostanie wywołane, gdy aplikacja zostanie wznowiona z launchera Androida, a okno płatności było widoczne przed zawieszeniem.
Poprawki błędów w Unity
- Zaktualizuj aplikację do wersji 3.0.3 języka Java, aby naprawić wyciek pamięci i rozwiązać problem uniemożliwiający dokonywanie zakupów po wznowieniu aplikacji z launchera Androida, gdy przed zawieszeniem aplikacji było widoczne okno płatności.
Wersja 3.0.2 Biblioteki płatności w Google Play (24.11.2020)
Wersja 3.0.2 Biblioteki płatności w Google Play i rozszerzenie Kotlin są już dostępne.
Poprawki błędów
- Naprawiliśmy błąd w rozszerzeniu Kotlin, który powodował, że współprogram kończył się niepowodzeniem z błędem „Already resumed”.
- Rozwiązaliśmy problem z nierozwiązanymi odwołaniami, 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)
Wersja 3.0.1 Biblioteki płatności w Google Play i rozszerzenie Kotlin są już dostępne.
Poprawki błędów
- Naprawiliśmy błąd polegający na tym, że jeśli aplikacja została zamknięta i przywrócona podczas procesu płatności, funkcja
PurchasesUpdatedListenermogła nie zostać wywołana z wynikiem zakupu.
Wersja 3.0 Biblioteki płatności w Google Play (8.06.2020)
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ę kodów SKU z nagrodami.
- Usunięto parametry
ChildDirectediUnderAgeOfConsent. - Usunięto wycofane metody ładunku dla deweloperów.
- 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 udostępnia funkcje, które pomagają deweloperom przypisywać zakupy do właściwych użytkowników. Te zmiany zastępują konieczność tworzenia rozwiązań niestandardowych na podstawie danych przekazywanych przez dewelopera. W ramach tej aktualizacji funkcja ładunku dewelopera została wycofana i w przyszłej wersji zostanie usunięta. Więcej informacji, w tym zalecane alternatywy, znajdziesz w artykule Ładunek dla programisty.
Biblioteka płatności w Google Play w wersji 2 dla Unity
Oprócz obecnych wersji Biblioteki płatności w Google Play 2 w językach Java i Kotlin udostępniliśmy wersję tej biblioteki do użytku z silnikiem Unity. Deweloperzy gier korzystający z interfejsu Unity do obsługi zakupów w aplikacji mogą już teraz przejść na nową wersję, aby korzystać ze wszystkich funkcji Biblioteki płatności w Google Play 2 i ułatwić sobie późniejsze aktualizacje do przyszłych wersji tej biblioteki.
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 przypadku metod
AcknowledgePurchaseParams,setDeveloperPayload()igetDeveloperPayload(). - W przypadku metod
ConsumeParams,setDeveloperPayload()igetDeveloperPayload(). - W
BillingFlowParams> zmieniono nazwę nasetAccountId()i udokumentowano ograniczenie długości do 64 znaków oraz ograniczenie uniemożliwiające umieszczanie w tym polu informacji umożliwiających identyfikację.setObfuscatedAccountId()setAccountId()został oznaczony jako przestarzały i zostanie usunięty w przyszłej wersji biblioteki. - W
BillingFlowParamsdodanosetObfuscatedProfileId(), które działa podobnie dosetObfuscatedAccountId(). Więcej informacji znajdziesz w artykule Aktualizacje i alternatywy dla danych programisty. - W
Purchasedodaliśmy metodęgetAccountIdentifiers(), która zwraca zaciemnione identyfikatory konta ustawione wBillingFlowParams. - W przypadku metody
BillingClientloadRewardedSku()oznaczono ją jako przestarzałą w ramach wycofywania kodów SKU z nagrodami. Więcej informacji o wycofaniu znajdziesz w Centrum pomocy Konsoli Play.
- W przypadku metod
Wersja 2.1.0 Biblioteki płatności w Google Play i wersja 2.1.0 rozszerzenia Kotlin (10.12.2019)
Dostępna jest już wersja 2.1.0 Biblioteki płatności w Google Play oraz nowe rozszerzenie Kotlin. Rozszerzenie Kotlin biblioteki płatności w Play udostępnia alternatywne interfejsy API w języku Kotlin, które zapewniają lepsze bezpieczeństwo w przypadku wartości null i 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 go elementemsetOldSku(String oldSku, String purchaseToken), aby rozróżniać sytuacje, w których 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 funkcja
querySkuDetailsAsync()czasami kończyła się niepowodzeniem i zwracała kodDEVELOPER_ERRORzamiast wyniku.
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
- Usunęliśmy błąd, który w niektórych przypadkach powodował zwracanie komunikatów debugowania 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 kupowanie produktów w aplikacji i poza nią. Aby zapewnić spójne wrażenia z zakupów w Google Play niezależnie od tego, gdzie użytkownik kupuje Twój produkt, musisz potwierdzać wszystkie zakupy otrzymane za pomocą Biblioteki płatności w Google Play tak szybko, jak to możliwe po przyznaniu użytkownikowi uprawnień. 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 transakcji oczekujących (nowość w wersji 2.0) 3-dniowe okno rozpoczyna się, gdy zakup przejdzie do stanu PURCHASED, i nie ma zastosowania, gdy zakup jest w stanie PENDING.
W przypadku subskrypcji musisz potwierdzić każdy zakup, który ma nowy token zakupu. Oznacza to, że musisz potwierdzić wszystkie początkowe zakupy, zmiany abonamentu i ponowne rejestracje, 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 dla obu tych elementów:Purchases.products i Purchases.subscriptions.
Zanim potwierdzisz zakup, sprawdź, czy nie został on już potwierdzony.
Potwierdzenie zakupu możesz przesłać za pomocą 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ą konsumowane, użyj wartości
acknowledgePurchase(), która znajduje się w interfejsie API klienta. - W interfejsie Server API dostępna jest też nowa metoda
acknowledge().
Metoda BillingFlowParams.setSku() została usunięta
W tej wersji usunęliśmy wycofaną wcześniej metodę BillingFlowParams#setSku(). Zanim wyrenderujesz produkty w procesie zakupu, musisz wywołać funkcję
BillingClient.querySkuDetailsAsync(), przekazując wynikowy obiekt
SkuDetails do funkcji
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 płatności Google Play dodaje obsługę ładunku dewelopera – dowolnych ciągów znaków, które można dołączyć do zakupów. Możesz dołączyć parametr z danymi dewelopera do zakupu, ale tylko wtedy, gdy zakup zostanie potwierdzony lub skonsumowany. Różni się to od ładunku dewelopera w AIDL, gdzie ładunek można było określić podczas uruchamiania procesu zakupu. Ponieważ zakupy mogą być teraz inicjowane poza aplikacją, ta zmiana zapewnia, że zawsze będziesz mieć możliwość dodania do nich ładunku.
Aby uzyskać dostęp do ładunku w nowej bibliotece, obiekty Purchase zawierają teraz metodę getDeveloperPayload().
Spójne oferty
Gdy oferujesz kod SKU z rabatem, Google Play zwraca teraz pierwotną cenę kodu SKU, aby użytkownicy widzieli, że otrzymują rabat.
SkuDetails zawiera 2 nowe metody pobierania pierwotnej ceny kodu SKU:
getOriginalPriceAmountMicros()- zwraca sformatowaną pierwotną cenę SKU przed rabatem.
getOriginalPrice()- zwraca pierwotną cenę z dodatkowym formatowaniem waluty.
Transakcje oczekujące
W wersji 2.0 Biblioteki płatności w Google Play musisz obsługiwać zakupy, w przypadku których przed przyznaniem uprawnień wymagane jest wykonanie dodatkowej czynności. 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
enablePendingPurchases()
w ramach inicjowania aplikacji.
Użyj
Purchase.getPurchaseState()
, aby określić, czy stan zakupu to PURCHASED czy PENDING. Pamiętaj, że uprawnienia należy przyznawać tylko wtedy, gdy stan to PURCHASED. Aby sprawdzić Purchase stan aktualizacji, wykonaj te czynności:
- Podczas uruchamiania aplikacji wywołaj funkcję
BillingClient.queryPurchases(), aby pobrać listę nieużytych produktów powiązanych z użytkownikiem. - Wywołaj
Purchase.getPurchaseState()na każdym zwróconym obiekciePurchase. - Zaimplementuj metodę
onPurchasesUpdated(), aby reagować na zmiany w obiektachPurchase.
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 wprowadziliśmy też nowy typ powiadomień dla deweloperów w czasie rzeczywistym:OneTimeProductNotification Ten typ powiadomienia zawiera pojedynczą 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
powiązanych z opóźnionymi formami płatności, takimi jak gotówka.
Potwierdzając zakupy oczekujące, rób to tylko wtedy, gdy stan zakupu to PURCHASED, a nie PENDING.
Zmiany w interfejsie API
Biblioteka płatności w Google Play w wersji 2.0 zawiera kilka zmian w API, które mają na celu obsługę nowych funkcji i wyjaśnienie istniejących.
consumeAsync
consumeAsync()
przyjmuje teraz obiekt
ConsumeParams
zamiast purchaseToken. ConsumeParams zawiera purchaseToken oraz opcjonalny ładunek dewelopera.
W tej wersji usunęliśmy poprzednią wersję consumeAsync().
queryPurchaseHistoryAsync
Aby uniknąć nieporozumień, funkcja
queryPurchaseHistoryAsync()
zwraca teraz obiekt
PurchaseHistoryRecord
zamiast obiektu Purchase. Obiekt PurchaseHistoryRecord jest taki sam jak obiekt Purchase, z tym wyjątkiem, że odzwierciedla tylko wartości zwracane przez queryPurchaseHistoryAsync() i nie zawiera pól autoRenewing, orderId ani packageName. Pamiętaj, że zwrócone dane się nie zmieniły – queryPurchaseHistoryAsync() zwraca te same dane co wcześniej.
Wartości zwracane BillingResult
Interfejsy API, które wcześniej zwracały wartość 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 jest zapisany w języku angielskim (Stany Zjednoczone) i nie jest przeznaczony do wyświetlania użytkownikom.
Poprawki błędów
SkuDetails.getIntroductoryPriceAmountMicros()zwraca teraz wartośćlongzamiastString.
Wersja 1.2.2 Biblioteki płatności w Google Play (7.03.2019)
Dostępna jest już wersja 1.2.2 Biblioteki płatności w Google Play. 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 używanie głównego wątku, możesz teraz tworzyć instancje Biblioteki Płatności w Google Play w 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 1.2.1 Biblioteki płatności w Play (4.03.2019)
Dostępna jest już 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 nagrodami. Więcej informacji o opcjach zarabiania znajdziesz w artykule Dodawanie funkcji związanych z reklamami z nagrodą.
Inne zmiany
- Dodano publiczne konstruktory dla klas
PurchasesResultiSkuDetailsResult, aby ułatwić testowanie. - Obiekty
SkuDetailsmogą używać nowej metodygetOriginalJson(). - Wszystkie wywołania usług AIDL są teraz obsługiwane przez wątki w tle.
Poprawki błędów
- Do publicznych interfejsów API nie są już przekazywani odbiorcy wywołań zwrotnych o wartości null.
Wersja 1.2 Biblioteki płatności w Google Play (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 płatności w Google Play jest teraz licencjonowana na podstawie Umowy licencyjnej dotyczącej pakietu Android SDK.
- Dodaliśmy interfejs
launchPriceChangeConfirmationFlowAPI, który wyświetla użytkownikom prośbę o sprawdzenie zmiany oczekującej ceny subskrypcji. - Dodaliśmy obsługę nowego trybu proporcjonalnego rozliczania,
DEFERRED, podczas uaktualniania lub obniżania wersji subskrypcji użytkownika. - W klasie
BillingFlowParamszastąpiliśmysetSku()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 po wejściu 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 funkcję PriceChangeConfirmationListener, aby obsługiwać 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 dialogowe z informacjami o nowej cenie, w którym użytkownicy są proszeni o jej zaakceptowanie. Ten przepływ 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 rozliczenia, DEFERRED. W tym trybie subskrypcja użytkownika zostanie zaktualizowana przy kolejnym odnowieniu.
Więcej informacji o konfigurowaniu tego trybu proporcjonalnego znajdziesz w artykule Ustawianie trybu proporcjonalnego.
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 nowej instancji BillingFlowParams w kliencie płatności w aplikacji zalecamy bezpośrednie używanie obiektu 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 rozliczenia w metodzie
BillingFlowParamspodczas przechodzenia na wyższą lub niższą wersję istniejącej subskrypcji. - Flaga logiczna
replaceSkusProrationwBillingFlowParamsnie jest już obsługiwana. Użyj w zamian zasadyreplaceSkusProrationMode. 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 działaniu:
Deweloperzy mogą ustawić replaceSkusProrationMode w klasie BillingFlowParams.
ProrationMode zawiera więcej informacji o rodzaju proporcjonalnego rozliczenia w przypadku przejścia 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 |
Wymiana zaczyna obowiązywać natychmiast, a nowy czas wygaśnięcia zostanie proporcjonalnie rozliczony i zwrócony lub obciążony na koncie użytkownika. Jest to obecnie domyślne zachowanie. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Wymiana zacznie obowiązywać od razu, a cykl rozliczeniowy pozostanie bez zmian. Zostanie pobrana cena za pozostały okres.
Uwaga: ta opcja jest dostępna tylko w przypadku uaktualnienia subskrypcji. |
IMMEDIATE_WITHOUT_PRORATION |
Zmiana zacznie obowiązywać od razu, a nowa cena zostanie naliczona przy kolejnym odnowieniu subskrypcji. Cykl rozliczeniowy pozostaje bez zmian. |
replaceSkusProration nie jest już obsługiwana w przypadku klasy BillingFlowParams.
Deweloperzy mogli ustawić flagę logiczną, aby pobierać proporcjonalną kwotę za prośbę o przejście na wyższą wersję subskrypcji. Obsługujemy już parametr ProrationMode, który zawiera bardziej szczegółowe instrukcje dotyczące proporcjonalnego rozliczania, więc ta wartość 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 wartość
BillingResponse. Zachowana jest też synchroniczna wartość zwracana BillingResponse.
Poprawki błędów
- Prawidłowo kończy działanie w metodach asynchronicznych, gdy usługa jest odłączona.
BuilderObiekty parametrów nie zmieniają już wbudowanych obiektów.- Problem 68087141:
launchBillingFlow()wywołanie zwrotne jest teraz aktywowane 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 wbudowanych w manifeście biblioteki. Nie musisz już dodawać uprawnienia
com.android.vending.BILLINGdo pliku manifestu Androida. - Nowy konstruktor dodany do klasy
BillingClient.Builder. - Wprowadzono wzorzec konstruktora dla klasy
SkuDetailsParamsdo użycia w metodach wysyłania zapytań o kody SKU. - Zaktualizowaliś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 w działaniu:
Klasa BillingClient.Builder
BillingClient.Builder
jest teraz inicjowany za pomocą nowego 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ą 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 wyszukiwania dostępnych produktów
Argumenty metod
queryPurchaseHistoryAsync() i
querySkuDetailsAsync() zostały opakowane
w 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 opakowującej, co ułatwia korzystanie z interfejsu API i zapewnia spójność w ramach naszych interfejsów 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 w przypadku funkcji onConsumeResponse z interfejsu ConsumeResponseListener uległa zmianie, 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 zachować 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., komunikat)
Uruchomiliśmy wersję dla programistów, która ma uprościć proces tworzenia aplikacji pod względem rozliczeń, dzięki czemu deweloperzy mogą skupić się na implementowaniu 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 integrowania aplikacji na Androida z interfejsem Płatności w Google Play API. Biblioteka zapewnia też warstwę abstrakcji nad usługą Android Interface Definition Language (AIDL), co ułatwia deweloperom definiowanie interfejsu między aplikacją a interfejsem Płatności w Google Play API.