Ten dokument zawiera informacje o wersji Biblioteki płatności w Google Play.
Biblioteka płatności w Google Play w wersji 7.1.1 (3.10.2024)
Dostępna jest już wersja 7.1.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Poprawki błędów
- Naprawiono 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ż wersje 7.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
- Ulepszona ochrona wątku związana ze stanem połączenia i zarządzaniem nim.
- Wprowadziliśmy częściowe zmiany w celu przetestowania kodów odpowiedzi
BillingResult
, które zostały w pełni udostępnione w wersji 7.1.1 Biblioteki płatności w Google Play. Aby przetestować integrację za pomocą tej funkcji, musisz przejść na Bibliotekę płatności w Play w wersji 7.1.1. Wystąpił błąd, który będzie miał wpływ tylko na aplikacje z włączonym testowaniem zastąpienia płatności i nie wpłynie na normalne korzystanie z aplikacji. Więcej informacji znajdziesz w artykule Testowanie kodów odpowiedziBillingResult
.
Biblioteka płatności w Google Play w wersji 7.0.0 (14.05.2024)
Dostępna jest już wersja 7.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
Dodano interfejsy API do obsługi subskrypcji ratalnych.
- Dodano
ProductDetails.InstallmentPlanDetails
dla abonamentów bazowych z ratami, które użytkownicy mogą kupić. Ten interfejs API pomaga aplikacji zidentyfikować plan ratalny i jego konfigurację, aby udostępnić użytkownikowi odpowiednie informacje. Więcej informacji znajdziesz w przewodniku na temat rat.
- Dodano
Dodaliśmy
PendingPurchasesParams
iBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
w celu zastąpieniaBillingClient.Builder.enablePendingPurchases()
, które zostało wycofane w tej wersji.- Wycofane środowisko wykonawcze
enablePendingPurchases()
jest funkcjonalnie identyczne zenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.
- Wycofane środowisko wykonawcze
Dodano interfejsy API do obsługi oczekujących transakcji w przypadku abonamentów przedpłaconych:
- Użyj tagu
PendingPurchasesParams.Builder.enablePrepaidPlans()
wraz z tagiemBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
, aby umożliwić oczekujące transakcje w przypadku abonamentów przedpłaconych. Dodając obsługę, upewnij się, że Twoja aplikacja prawidłowo zarządza cyklem subskrypcji. Więcej informacji znajdziesz w przewodniku po zakupach oczekujących na realizację. - Dodano parametry
Purchase.PendingPurchaseUpdate
iPurchase.getPendingPurchaseUpdate()
do pobierania oczekujących doładowań oraz przechodzenia na wyższą lub niższą wersję istniejącej subskrypcji.
- Użyj tagu
Usunięto
BillingClient.Builder.enableAlternativeBilling()
,AlternativeBillingListener
iAlternativeChoiceDetails
.- Deweloperzy powinni używać w zamiast tego operatora
BillingClient.Builder.enableUserChoiceBilling()
zUserChoiceBillingListener
iUserChoiceDetails
w wywołaniu zwrotnym listenera.
- Deweloperzy powinni używać w zamiast tego operatora
Usunięto
BillingFlowParams.ProrationMode
,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
iBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.- Deweloperzy powinni zamiast tego używać operatora
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
zBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
. BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
.BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Deweloperzy powinni zamiast tego używać operatora
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ć
BillingClient.queryPurchaseHistoryAsync()
został wycofany i zostanie usunięty w przyszłej wersji. Deweloperzy powinni zamiast tego używać tych alternatyw:- Zaakceptowane i oczekujące zakupy: użyj parametru
BillingClient.queryPurchasesAsync()
, aby pobrać aktywne zakupy. - Konsumowane zakupy: deweloperzy powinni prowadzić na własnych serwerach rejestr zakupów.
- Anulowane zakupy: użyj interfejsu API dla deweloperów voided-purchases.
- Więcej informacji znajdziesz w artykule Wysyłanie zapytania o historię zakupów.
- Zaakceptowane i oczekujące zakupy: użyj parametru
BillingFlowParams.ProductDetailsParams.setOfferToken()
wyrzuca teraz wyjątek, gdy deweloperzy podają pusty parametrofferToken
.Zaktualizowano
minSdkVersion
na 21, atargetSdkVersion
na 34.
Biblioteka płatności w Google Play w wersji 6.2.1 (16.04.2024)
Dostępna jest już wersja 6.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
- Naprawiliśmy błąd w
BillingClient.showAlternativeBillingOnlyInformationDialog()
, który powodował, że w niektórych przypadkach po zakończeniu dialogu nie wywoływana była funkcjaAlternativeBillingOnlyInformationDialogListener
.
Biblioteka płatności w Google Play w wersji 6.2.0 (6.03.2024)
Dostępna jest już wersja 6.2.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
- Dodaliśmy interfejsy API do obsługi ofert zewnętrznych.
- Dodaliśmy
BillingClient.Builder.enableExternalOffer()
, aby umożliwić wyświetlanie ofert zewnętrznych. - Dodano
BillingClient.isExternalOfferAvailableAsync()
, aby sprawdzić dostępność funkcji oferowania ofert zewnętrznych. - Dodaliśmy
BillingClient.showExternalOfferInformationDialog()
, aby wyświetlać użytkownikom okno z informacjami przed przekierowaniem ich poza aplikację. - Dodano
BillingClient.createExternalOfferReportingDetailsAsync()
, aby utworzyć ładunek wymagany do raportowania transakcji dokonanych za pomocą ofert zewnętrznych.
- Dodaliśmy
Biblioteka płatności w Google Play w wersji 6.1.0 (14.11.2023)
Dostępne są już wersje 6.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
- Dodaliśmy interfejsy API do obsługi tylko rozliczeń alternatywnych (tj.bez opcji wyboru przez użytkownika).
- Dodaliśmy
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ć użytkownikom okno informacyjne, gdy używany jest tylko alternatywny system rozliczeniowy. - Dodano
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
, aby utworzyć ładunek wymagany do raportowania transakcji dokonanych tylko za pomocą rozliczeń alternatywnych.
- Dodaliśmy
- Zaktualizowano interfejsy API rozliczeń o wyborze użytkownika
- Dodano
UserChoiceBillingListener
, aby zastąpić AlternativeBillingListener, który został oznaczony jako przestarzały. - Dodano
UserChoiceDetails
, aby zastąpićAlternativeChoiceDetails
, które zostało oznaczone jako przestarzałe. - Dodano
BillingClient.Builder.enableUserChoiceBilling()
, aby zastąpićBillingClient.Builder.enableAlternativeBilling()
, które zostało oznaczone jako przestarzałe.
- Dodano
- Dodano
BillingClient.getBillingConfigAsync()
, aby pobrać kraj w Google Play.
Biblioteka płatności w Google Play w wersji 6.0.1 (22.06.2023)
Dostępne są już wersje 6.0.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
Zaktualizuj Bibliotekę płatności w Play, aby była zgodna z Androidem 14.
Biblioteka płatności w Google Play w wersji 6.0 (10.05.2023)
Dostępna jest już wersja 6.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
Dodano nowy enumeracyjny typ danych
ReplacementMode
, który zastępuje typProrationMode
.Pamiętaj, że
ProrationMode
jest nadal dostępny ze względu na zgodność z wcześniejszymi wersjami.Usunięto identyfikator zamówienia w przypadku zakupów w ramach
PENDING
.Wcześniej identyfikator zamówienia był zawsze tworzony, nawet jeśli zakup był w toku. Począwszy od wersji 6.0.0 identyfikator zamówienia nie będzie tworzony w przypadku oczekujących zakupów. W przypadku tych zakupów identyfikator zamówienia zostanie wypełniony po przeniesieniu zakupu do stanu
PURCHASED
.Usunięto metody
queryPurchases
ilaunchPriceConfirmationFlow
.Metody
queryPurchases
ilaunchPriceConfirmationFlow
, które zostały wcześniej oznaczone jako wycofane, zostały teraz usunięte z Biblioteki płatności Google w wersji 6.0.0. Deweloperzy powinni używać operatoraqueryPurchasesAsync
zamiastqueryPurchases
. Informacje o alternatywnych opcjachlaunchPriceConfirmationFlow
znajdziesz w artykule Zmiany cen.Dodano nowy kod odpowiedzi na błąd sieci.
Od wersji 6.0.0 Biblioteki Google Play dodano nowy kod odpowiedzi na błąd sieci
NETWORK_ERROR
. Ten kod jest zwracany, gdy wystąpił błąd z powodu problemu z połączeniem sieciowym. Te błędy połączenia z siecią zostały wcześniej zgłoszone jakoSERVICE_UNAVAILABLE
.Zaktualizowano
SERVICE_UNAVAILABLE
iSERVICE_TIMEOUT
.Począwszy od wersji 6.0.0 usługi PBL błędy spowodowane przekroczeniem limitu czasu przetwarzania będą zwracane jako
SERVICE_UNAVAILABLE
zamiast obecnegoSERVICE_TIMEOUT
.W poprzednich wersjach PBL zachowanie nie ulega zmianie.
Usunięto
SERVICE_TIMEOUT
.Od wersji 6.0.0 PBL parametr
SERVICE_TIMEOUT
nie będzie już zwracany. Poprzednie wersje PBL będą nadal zwracać ten kod.Dodano dodatkowe logowanie.
Wersja 6 Biblioteki płatności w Google Play zawiera dodatkowe logowanie, które zapewnia informacje o użyciu interfejsu API (np. o udanych i nieudanych próbach) oraz o problemach z połączeniem z usługą. Te informacje posłużą do poprawy działania Biblioteki płatności Google Play i lepszego obsługiwania błędów.
Wersja 5.2.1 Biblioteki płatności w Google Play (22.06.2023)
Dostępna jest już wersja 5.2.1 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
Zaktualizuj Bibliotekę płatności w Play, aby była zgodna z Androidem 14.
Biblioteka płatności w Google Play w wersji 5.2 (6.04.2023)
Dostępna jest już wersja 5.2.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Podsumowanie zmian
- Dodaliśmy klasy, które obsługują procesy rozliczeń alternatywnych na urządzeniach mobilnych/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ę, która umożliwia użytkownikom w Korei Południowej wybranie alternatywnego systemu rozliczeniowego.
Wersja 5.1 biblioteki Płatności w Google Play (31.10.2022)
Dostępna jest już wersja 5.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Ta wersja zawiera te zmiany.
Podsumowanie zmian
- Dodano metodę
ProductDetails.SubscriptionOfferDetails.getOfferId()
, która umożliwia pobieranie identyfikatora oferty. - Dodano metodę
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
, która umożliwia pobieranie identyfikatora abonamentu podstawowego. - Zaktualizowano
targetSdkVersion
do 31.
Biblioteka płatności w Google Play w wersji 5.0 (11.05.2022)
Dostępna jest już wersja 5.0.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Ta wersja zawiera te zmiany.
Podsumowanie zmian
- Wprowadziliśmy nowy model subskrypcji, w tym nowe elementy, które umożliwiają tworzenie wielu ofert dla jednego produktu z subskrypcją. Więcej informacji znajdziesz w przewodniku po migracji.
- Dodano
BillingClient.queryProductDetailsAsync()
, aby zastąpićBillingClient.querySkuDetailsAsync()
. - Dodano metodę
setIsOfferPersonalized()
w związku z wymogami UE dotyczącymi ujawniania informacji o spersonalizowanych cenach. Więcej informacji o korzystaniu z tej metody znajdziesz w artykule Wskazanie ceny indywidualnej. - Usunięto
queryPurchases()
, która została wycofana i zastąpiona przez queryPurchasesAsync wprowadzoną w Bibliotece płatności w Google Play w wersji 4.0.0. - Interfejs
launchPriceChangeFlow
został wycofany i zostanie usunięty w przyszłej wersji. Więcej informacji o alternatywnych opcjach znajdziesz w artykule Uruchomienie procesu potwierdzenia zmiany ceny. - Usunięto parametr
setVrPurchaseFlow()
, który był używany wcześniej podczas tworzenia instancji procesu zakupu. W poprzednich wersjach ta metoda przekierowywała użytkownika do dokonania zakupu na urządzeniu z Androidem. Po usunięciu tej metody użytkownicy będą dokonywać zakupów w ramach standardowego procesu zakupu.
Wersja 4.1 biblioteki płatności w Google Play (23.02.2022)
Dostępna jest już wersja 4.1.0 Biblioteki płatności w Google Play i rozszerzeń Kotlina.
Ta wersja zawiera te zmiany.
Podsumowanie zmian
- Dodano
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 subskrypcję, 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 rozszerzeń Kotlina jest już dostępna.
Podsumowanie zmian
Dodano
BillingClient.queryPurchasesAsync()
, aby zastąpićBillingClient.queryPurchases()
, który zostanie usunięty w przyszłej wersji.Dodano nowy tryb zastępowania subskrypcji
IMMEDIATE_AND_CHARGE_FULL_PRICE
.Dodano metodę
BillingClient.getConnectionState()
, która umożliwia pobieranie stanu połączenia z biblioteką płatności Play.Zaktualizowano Javadoc i implementację, aby wskazać, z którego wątku można wywołać metodę i które wyniki wątku są publikowane.
Dodano
BillingFlowParams.Builder.setSubscriptionUpdateParams()
jako nowy sposób inicjowania aktualizacji subskrypcji. Zastępuje ona strategieBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
iBillingFlowParams.Builder#setOldSku
, które zostały usunięte.Dodano użytkowników
Purchase.getQuantity()
iPurchaseHistoryRecord.getQuantity()
.Dodano użytkowników
Purchase#getSkus()
iPurchaseHistoryRecord#getSkus()
. Zastępują one usunięte usługiPurchase#getSku
iPurchaseHistoryRecord#getSku
.Usunięto
BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
iBillingFlowParams#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 Java i Kotlin
- Naprawiono wyciek pamięci podczas wywoływania funkcji
endConnection()
. - Naprawiono problem z korzystaniem z Biblioteki płatności w Google Play przez aplikacje, które używają trybu uruchamiania pojedynczego zadania.
onPurchasesUpdated()
Ponowne uruchomienie aplikacji z wyszukiwarki Androida spowoduje wywołanie funkcji zwrotnej, jeśli przed zawieszeniem aplikacja wyświetlała okno płatności.
Poprawki błędów w Unity
- Zaktualizuj Java do wersji 3.0.3, aby naprawić wyciek pamięci i rozwiązać problem uniemożliwiający dokonywanie zakupów, gdy aplikacja jest wznawiana z wyrzutki Androida, a okno płatności było widoczne przed zawieszeniem.
Wersja 3.0.2 biblioteki płatności w Google Play (24.11.2020)
Dostępna jest już wersja 3.0.2 Biblioteki płatności w Google Play i rozszerzenia Kotlin.
Poprawki błędów
- Naprawiliśmy błąd w rozszerzeniu Kotlin, który powodował, że coroutine kończyła się z błędem „Already resumed”.
- Rozwiązaliśmy problem z nierozwiązanymi odwołaniami podczas używania rozszerzenia Kotlin z biblioteką kotlinx.coroutines w wersji 1.4 lub nowszej.
Wersja 3.0.1 Biblioteki płatności w Google Play (30.09.2020)
Dostępne są już wersje 3.0.1 Biblioteki płatności w Google Play i rozszerzenia Kotlin.
Poprawki błędów
- Rozwiązaliśmy błąd, który powodował, że jeśli aplikacja została zamknięta i przywrócona podczas procesu płatności, metoda
PurchasesUpdatedListener
mogła nie zostać wywołana z wynikiem zakupu.
Wersja 3.0 Biblioteki płatności w Google Play (8 czerwca 2020 r.)
Dostępne są już wersje 3.0.0 Biblioteki płatności w Google Play, rozszerzenia Kotlin i wtyczki Unity.
Podsumowanie zmian
- Usunięto obsługę kodu SKU nagrody.
- Usunięto parametry
ChildDirected
iUnderAgeOfConsent
. - Usunięto wycofane metody przesyłania danych przez deweloperów.
- Usunięto wycofane metody
BillingFlowParams.setAccountId()
iBillingFlowParams.setDeveloperId()
. - Usunięto wycofane metody
BillingFlowParams.setOldSkus(String oldSku)
iBillingFlowParams.addOldSku(String oldSku)
. - Dodano adnotacje dotyczące możliwości wystąpienia wartości null.
Poprawki błędów
SkuDetails.getIntroductoryPriceCycles()
zwraca teraz wartośćint
zamiastString
.- Naprawiliśmy błąd, który powodował, że proces płatności był traktowany jako zawierający dodatkowe parametry, nawet jeśli nie były one ustawione.
Wersja 2.2.1 biblioteki Płatności w Google Play (2020-05-20)
Biblioteka płatności w Google Play w wersji 2.2.1 jest już dostępna.
Poprawki błędów
- Zaktualizowano domyślną wersję biblioteki Java Play Billing, od której zależy rozszerzenie Kotlin.
Wersja 2.2.0 Biblioteki płatności w Google Play i obsługa Unity (23.03.2020)
Wersja 2.2.0 systemu płatności Google Play zawiera funkcje, które pomagają deweloperom przypisywać zakupy do właściwego użytkownika. Dzięki tym zmianom nie musisz już tworzyć rozwiązań niestandardowych na podstawie danych przesyłanych przez dewelopera. W ramach tej aktualizacji wycofujemy funkcję przesyłania danych dla deweloperów, która zostanie usunięta w kolejnych wersjach. Więcej informacji, w tym zalecane alternatywy, znajdziesz w artykule Dane programisty.
Biblioteka płatności w Google Play 2 dla Unity
Oprócz obecnych wersji Biblioteki płatności w Google Play w językach Java i Kotlin udostępniliśmy wersję biblioteki do użycia z Unity. Deweloperzy gier korzystający z interfejsu API zakupów w aplikacji Unity mogą już teraz przeprowadzić uaktualnienie, aby korzystać ze wszystkich funkcji Biblioteki płatności w Google Play 2 i ułatwić sobie kolejne uaktualnienia do przyszłych wersji tej biblioteki.
Więcej informacji znajdziesz w artykule Korzystanie z płatności w Google Play w Unity.
Podsumowanie zmian
- Biblioteka płatności w Google Play w języku Java
- W
AcknowledgePurchaseParams
metodysetDeveloperPayload()
igetDeveloperPayload()
są wycofane. - W
ConsumeParams
metodysetDeveloperPayload()
igetDeveloperPayload()
są wycofane. - W pliku
BillingFlowParams
zmieniliśmy nazwę nasetObfuscatedAccountId()
i zastosowaliśmy ograniczenie długości do 64 znaków oraz ograniczenie dotyczące informacji umożliwiających identyfikację.setAccountId()
InterfejssetAccountId()
został oznaczony jako przestarzały i zostanie usunięty w przyszłej wersji biblioteki. - W
BillingFlowParams
dodaliśmysetObfuscatedProfileId()
, który działa podobnie dosetObfuscatedAccountId()
. Więcej informacji znajdziesz w artykule Aktualizacje i alternatywne rozwiązania dotyczące ładunku. - W
Purchase
dodano metodęgetAccountIdentifiers()
, która zwraca zanonimizowane identyfikatory kont ustawione wBillingFlowParams
. - W wersji
BillingClient
metodaloadRewardedSku()
została oznaczona jako przestarzała w ramach wycofywania kodów SKU z nagrodami. Więcej informacji o wycofaniu znajdziesz w Centrum pomocy Konsoli Play.
- W
Wersja 2.1.0 Biblioteki płatności w Google Play i wersja 2.1.0 rozszerzenia Kotlin (10 grudnia 2019 r.)
Dostępna jest już wersja 2.1.0 Biblioteki płatności w Google Play i nowe rozszerzenie Kotlina. Rozszerzenie Kotlina do biblioteki Play Billing zapewnia alternatywne interfejsy API do użycia w Kotlinie, które zapewniają większą ochronę przed nullami i lepsze coroutines. Przykłady kodu znajdziesz w artykule Korzystanie z biblioteki Płatności w Google Play.
Ta wersja zawiera te zmiany.
Podsumowanie zmian
- W
BillingFlowParams
wycofujemysetOldSku(String oldSku)
i zastępujemy gosetOldSku(String oldSku, String purchaseToken)
, aby uniknąć nieporozumień, gdy kilka kont na urządzeniu ma ten sam identyfikator sku.
Wersja 2.0.3 biblioteki Płatności w Google Play (5 sierpnia 2019 r.)
Biblioteka Google Play Billing w wersji 2.0.3 jest już dostępna.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że funkcja
querySkuDetailsAsync()
zamiast zwracać pomyślny wynik, czasami kończyła się niepowodzeniem z kodemDEVELOPER_ERROR
.
Biblioteka płatności w Google Play w wersji 2.0.2 (8 lipca 2019 r.)
Biblioteka płatności w Google Play w wersji 2.0.2 jest już dostępna. Ta wersja zawiera aktualizacje dokumentacji referencyjnej i nie zmienia funkcjonalności biblioteki.
Wersja 2.0.1 Biblioteki płatności w Google Play (6 czerwca 2019 r.)
Biblioteka Google Play Billing w wersji 2.0.1 jest już dostępna. Ta wersja zawiera następujące zmiany.
Poprawki błędów
- Usunęliśmy błąd, który w niektórych przypadkach powodował, że komunikaty debugowania były zwracane jako
null
. - Naprawiono potencjalny problem z wyciekiem pamięci.
Wersja Biblioteki płatności w Google Play 2.0 (07.05.2019)
Biblioteka Google Play Billing w wersji 2.0 jest już dostępna. Ta wersja zawiera następujące zmiany.
Zakupy muszą zostać potwierdzone w ciągu 3 dni
Google Play umożliwia kupowanie produktów w aplikacji lub poza nią. Aby zapewnić spójne wrażenia z zakupów w Google Play niezależnie od tego, gdzie użytkownik kupuje produkt, musisz potwierdzić wszystkie zakupy dokonane za pomocą Biblioteki płatności w Google Play tak szybko, jak to możliwe po przyznaniu uprawnień użytkownikowi. Jeśli w ciągu 3 dni nie potwierdzisz zakupu, użytkownik automatycznie otrzyma zwrot środków, a Google Play unieważni zakup. W przypadku oczekujących transakcji (nowość w wersji 2.0) 3-dniowy okres zaczyna się, gdy zakup ma stan PURCHASED
, i nie ma zastosowania, gdy zakup ma stan PENDING
.
W przypadku subskrypcji musisz potwierdzić każdy zakup, który ma nowy token zakupu. Oznacza to, że wszystkie początkowe zakupy, zmiany abonamentu i ponowne rejestracje muszą być potwierdzone, ale nie musisz potwierdzać kolejnych odnowień. Aby określić, czy zakup wymaga potwierdzenia, sprawdź pole potwierdzenia w zakupie.
Obiekt Purchase
zawiera teraz metodę isAcknowledged()
, która wskazuje, czy zakup został potwierdzony. Interfejs Google Play Developer API zawiera też wartości logiczne potwierdzenia zarówno dla Purchases.products
, jak i Purchases.subscriptions
.
Zanim potwierdzisz zakup, użyj tych metod, aby sprawdzić, czy zakup został już potwierdzony.
Możesz potwierdzić zakup, korzystając z jednej z tych metod:
- W przypadku produktów konsumpcyjnych użyj wartości
consumeAsync()
, która znajduje się w interfejsie API klienta. - W przypadku produktów, które nie są zużywane, użyj
acknowledgePurchase()
, dostępnego w interfejsie klienta API. - Nowa metoda
acknowledge()
jest też dostępna w interfejsie Server API.
Metoda BillingFlowParams.setSku() została usunięta
W tej wersji została usunięta metoda BillingFlowParams#setSku()
, która została wycofana. Zanim zrenderujesz produkty w procesie zakupu, musisz wywołać funkcję BillingClient.querySkuDetailsAsync()
, przekazując jej wynikowy obiekt SkuDetails
do BillingFlowParams.Builder.setSkuDetails()
.
Przykłady kodu znajdziesz w artykule Korzystanie z biblioteki Płatności w Google Play.
Obsługiwane są dane programisty.
Wersja 2.0 biblioteki Google Play Billing obsługuje dane dewelopera – dowolne ciągi znaków, które można dołączyć do zakupów. Parametr ładunku dewelopera możesz dołączyć do zakupu, ale tylko wtedy, gdy zakup został potwierdzony lub wykorzystany. W przeciwieństwie do danych dewelopera w AIDL dane te można określić podczas uruchamiania procesu zakupu. Zakupy można teraz inicjować poza aplikacją, więc ta zmiana zapewnia, że zawsze możesz dodać ładunek do zakupów.
Aby uzyskać dostęp do ładunku w nowej bibliotece, obiekty Purchase
zawierają teraz metodę getDeveloperPayload()
.
Stałe oferty
Gdy oferujesz kod SKU ze zniżką, Google Play zwraca teraz pierwotną cenę tego kodu, aby umożliwić użytkownikom sprawdzenie, czy otrzymują zniżkę.
SkuDetails
zawiera 2 nowe metody pobierania pierwotnej ceny SKU:
getOriginalPriceAmountMicros()
– zwraca niesformatowaną cenę pierwotną 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, które wymagają dodatkowych działań przed przyznaniem uprawnień. Użytkownik może na przykład kupić produkt w aplikacji w sklepie stacjonarnym, płacąc gotówką. Oznacza to, że transakcja jest przeprowadzana poza Twoją aplikacją. W tym scenariuszu uprawnienia należy przyznać dopiero po zakończeniu transakcji przez użytkownika.
Aby umożliwić zakupy oczekujące, wywołaj funkcję enablePendingPurchases()
w ramach inicjowania aplikacji.
Użyj parametru Purchase.getPurchaseState()
, aby określić, czy stan zakupu to PURCHASED
czy PENDING
. Pamiętaj, że uprawnienia należy przyznać tylko wtedy, gdy stan to PURCHASED
. Aby sprawdzić aktualny stan Purchase
:
- Podczas uruchamiania aplikacji wywołaj funkcję
BillingClient.queryPurchases()
, aby pobrać listę niewykorzystanych produktów powiązanych z użytkownikiem. - Wywołaj funkcję
Purchase.getPurchaseState()
w przypadku każdego zwróconego obiektuPurchase
. - Zaimplementuj metodę
onPurchasesUpdated()
, aby reagować na zmiany w obiektachPurchase
.
Ponadto interfejs Google Play Developer API zawiera stan PENDING
dla Purchases.products
.
Transakcje oczekujące nie są obsługiwane w przypadku subskrypcji.
W tej wersji wprowadzamy też nowy typ powiadomienia dla deweloperów w czasie rzeczywistym.OneTimeProductNotification
Ten typ powiadomienia zawiera jedną wiadomość, której wartość to ONE_TIME_PRODUCT_PURCHASED
lub ONE_TIME_PRODUCT_CANCELED
. Ten typ powiadomienia jest wysyłany tylko w przypadku zakupów związanych z opóźnionymi formami płatności, takimi jak gotówka.
Potwierdzanie oczekujących zakupów należy przeprowadzać tylko wtedy, gdy stan zakupu to PURCHASED
, a nie PENDING
.
Zmiany w interfejsie API
Biblioteka Google Play Billing w wersji 2.0 zawiera kilka zmian w interfejsie API, które umożliwiają obsługę nowych funkcji i uproszczają korzystanie z dotychczasowych.
consumeAsync
consumeAsync()
odbiera teraz obiekt ConsumeParams
zamiast obiektu purchaseToken
. ConsumeParams
zawiera purchaseToken
, a także opcjonalny ładunek dewelopera.
W tej wersji usunięto poprzednią wersję (consumeAsync()
).
queryPurchaseHistoryAsync
Aby zminimalizować dezorientację, funkcja queryPurchaseHistoryAsync()
zwraca teraz obiekt PurchaseHistoryRecord
zamiast obiektu Purchase
. Obiekt PurchaseHistoryRecord
jest taki sam jak obiekt Purchase
, z tym że odzwierciedla tylko wartości zwracane przez obiekt queryPurchaseHistoryAsync()
i nie zawiera pól autoRenewing
, orderId
ani packageName
. Pamiętaj, że zwrócone dane się nie zmieniły – funkcja queryPurchaseHistoryAsync()
zwraca te same dane co wcześniej.
Wartości zwracane przez BillingResult
Interfejsy API, które wcześniej zwracały wartość całkowitą BillingResponse
, zwracają teraz obiekt BillingResult
. BillingResult
zawiera liczbę całkowitą BillingResponse
oraz ciąg znaków debugowania, który możesz wykorzystać do diagnozowania błędów. Ciąg debugowania jest w języku angielskim (US) i nie jest przeznaczony do wyświetlania użytkownikom.
Poprawki błędów
SkuDetails.getIntroductoryPriceAmountMicros()
zwraca teraz wartośćlong
zamiastString
.
Wersja 1.2.2 Biblioteki płatności w Google Play (7 marca 2019 r.)
Biblioteka płatności w Google Play w wersji 1.2.2 jest już dostępna. Ta wersja zawiera następujące zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z wątkami wprowadzony w wersji 1.2.1. Wywołania w tle nie blokują już wątku głównego.
Inne zmiany
- Chociaż nadal zalecamy korzystanie z głównego wątku, możesz teraz utworzyć instancję biblioteki Google Play Billing Library z wątku w tle.
- Tworzenie instancji zostało w pełni przeniesione do wątku w tle, aby zmniejszyć ryzyko wystąpienia błędów ANR.
Wersja Biblioteki płatności w Play 1.2.1 (04.03.2019)
Biblioteka płatności w Google Play w wersji 1.2.1 jest już dostępna. Ta wersja zawiera następujące zmiany.
Najważniejsze zmiany
- Dodaliśmy obsługę produktów z nagrodą. Więcej informacji o opcjach zarabiania znajdziesz w artykule Dodawanie funkcji związanych z produktami z nagrodami.
Inne zmiany
- Dodaliśmy publiczne konstruktory dla
PurchasesResult
iSkuDetailsResult
, aby ułatwić testowanie. - Obiekty
SkuDetails
mogą używać nowej metodygetOriginalJson()
. - Wszystkie wywołania usługi AIDL są teraz obsługiwane przez wątki w tle.
Poprawki błędów
- Listeners wywoływanych metod zwrotnych o wartości null nie są już przekazywane do publicznych interfejsów API.
Wersja 1.2 Biblioteki płatności w Google Play (18 października 2018 r.)
Biblioteka płatności w Google Play w wersji 1.2 jest już dostępna. Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Biblioteka Google Play Billing Library jest teraz objęta licencją Umowy licencyjnej na pakiet Android SDK.
- Dodaliśmy interfejs API
launchPriceChangeConfirmationFlow
, który prosi użytkowników o sprawdzenie oczekującej zmiany ceny abonamentu. - Dodano obsługę nowego trybu proporcjonalnego
DEFERRED
podczas podwyższania lub obniżania poziomu subskrypcji użytkownika. - W klasie
BillingFlowParams
zastąpionosetSku()
wartościąsetSkuDetails()
. - Drobne poprawki błędów i optymalizacje kodu.
Potwierdzenie zmiany ceny
Możesz teraz zmienić cenę subskrypcji w Konsoli Google Play i poprosić użytkowników o sprawdzenie i zaakceptowanie nowej ceny, gdy otworzą aplikację.
Aby użyć tego interfejsu API, utwórz obiekt PriceChangeFlowParams
, korzystając z identyfikatora skuDetails
produktu subskrypcji, a następnie wywołaj funkcję launchPriceChangeConfirmationFlow()
. Aby przetworzyć wynik po zakończeniu procesu potwierdzenia zmiany ceny, zastosuj fragment kodu PriceChangeConfirmationListener
, jak pokazano w tym fragmencie kodu:
Kotlin
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
Java
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
W ramach procesu potwierdzenia zmiany ceny wyświetla się okno z informacjami o nowej cenie i prośbą o jej zaakceptowanie. Ten proces zwraca kod odpowiedzi typu BillingClient.BillingResponse
.
Nowy tryb przydziału
Podczas przechodzenia na wyższą lub niższą wersję subskrypcji możesz użyć nowego trybu podziału DEFERRED
. Ten tryb aktualizuje subskrypcję użytkownika podczas następnej odnowy. Więcej informacji o skonfigurowaniu tego trybu znajdziesz w artykule Konfigurowanie trybu podziału na częście.
Nowa metoda ustawiania szczegółów kodu SKU
W klasie BillingFlowParams
metoda setSku()
została wycofana.
Ta zmiana ma na celu optymalizację procesu Płatności w Google Play.
Podczas tworzenia nowego wystąpienia BillingFlowParams
w kliencie płatności w aplikacji zalecamy bezpośrednie korzystanie z obiektu JSON za pomocą funkcji setSkuDetails()
, jak pokazano w tym fragmencie kodu:
W klasie BillingFlowParams
Builder metoda setSku()
została wycofana. Zamiast tego użyj metody setSkuDetails()
, jak pokazano w tym fragmencie kodu. Obiekt przekazany do obiektu setSkuDetails()
pochodzi z metody querySkuDetailsAsync()
.
Kotlin
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
Java
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
Wersja Biblioteki płatności w Play 1.1 (7 maja 2018 r.)
Biblioteka płatności w Google Play w wersji 1.1 jest już dostępna. Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Dodano obsługę określania trybu proporcjonalnego w
BillingFlowParams
podczas przechodzenia na wyższą lub niższą wersję istniejącej subskrypcji. - Flaga logiczna
replaceSkusProration
wBillingFlowParams
nie jest już obsługiwana. Zamiast tego użyjreplaceSkusProrationMode
. launchBillingFlow()
wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi.
Zmiany w zachowaniu
Wersja 1.1 Biblioteki płatności w Google Play zawiera te zmiany zachowania:
Deweloperzy mogą ustawić replaceSkusProrationMode
w klasie BillingFlowParams
ProrationMode
zawiera więcej informacji o typie proporcjonalnego przedłużenia subskrypcji użytkownika.
Kotlin
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Java
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Obecnie Google Play obsługuje te tryby podziału:
IMMEDIATE_WITH_TIME_PRORATION |
Zastąpienie zacznie obowiązywać natychmiast, a nowy czas ważności będzie proporcjonalnie naliczany i doliczony do konta użytkownika lub odjęty od jego rachunku. Jest to obecne domyślne zachowanie. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Zastąpienie zacznie obowiązywać natychmiast, a cykl rozliczeniowy pozostanie bez zmian. Obciążymy Cię ceną za pozostałą część okresu.
Uwaga: ta opcja jest dostępna tylko w przypadku uaktualnienia subskrypcji. |
IMMEDIATE_WITHOUT_PRORATION |
Zastąpienie wejdzie w życie natychmiast, a nowa cena zostanie naliczona przy następnym odnowieniu. Cykl rozliczeniowy pozostaje bez zmian. |
W klasie BillingFlowParams
nie jest już obsługiwana kolumna replaceSkusProration
Deweloperzy mogli wcześniej ustawić flagę logiczną, aby naliczać proporcjonalną kwotę za prośbę o ulepszenie subskrypcji. Ponieważ obsługujemy już flagę ProrationMode
, która zawiera bardziej szczegółowe instrukcje, ten parametr logiczny nie jest już obsługiwany.
launchBillingFlow()
wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi
Biblioteka płatności zawsze wywoła funkcję wywołania zwrotnego PurhcasesUpdatedListener
i zwróci obiekt BillingResponse
asynchronicznie. Zachowana jest też synchroniczna wartość zwracana przez funkcję BillingResponse
.
Poprawki błędów
- W metodach asynchronicznych prawidłowo kończy się wcześnie, gdy usługa zostanie odłączona.
Builder
param obiekty nie zmieniają już zbudowanych obiektów.- Problem 68087141:
launchBillingFlow()
teraz powoduje wywołanie zwrotne w przypadku nieudanych odpowiedzi.
Wersja 1.0 Biblioteki płatności w Google Play (19.09.2017, ogłoszenie)
Biblioteka płatności w Google Play w wersji 1.0 jest już dostępna. Ta wersja zawiera następujące zmiany.
Ważne zmiany
- Uprawnienia do płatności wbudowane w pliku manifestu biblioteki. Nie musisz już dodawać uprawnienia
com.android.vending.BILLING
w pliku manifestu Androida. - Do klasy
BillingClient.Builder
dodano nowy kreator. - Wprowadziliśmy wzór konstruktora dla klasy
SkuDetailsParams
, która ma służyć do wywoływania metod służących do zapytania o kody SKU. - Zmieniliśmy kilka metod interfejsu API, aby zapewnić ich spójność (te same nazwy i kolejność argumentów zwracanych).
Zmiany w zachowaniu
Wersja 1.0 Biblioteki płatności w Google Play zawiera te zmiany zachowania:
Klasa BillingClient.Builder
BillingClient.Builder
jest teraz inicjowany za pomocą wzorca newBuilder:
Kotlin
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Java
billingClient = BillingClient.newBuilder(context).setListener(this).build();
Metoda launchBillingFlow jest teraz wywoływana za pomocą klasy BillingFlowParams.
Aby zainicjować proces płatności w przypadku zakupu lub subskrypcji, metoda launchBillingFlow()
otrzymuje instancję BillingFlowParams
zainicjowaną za pomocą parametrów specyficznych dla żądania:
Kotlin
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
Java
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
Nowy sposób przesyłania zapytań o dostępne produkty
Argumenty metod queryPurchaseHistoryAsync()
i querySkuDetailsAsync()
zostały zapakowane w schemat Builder:
Kotlin
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
Java
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
Dla wygody użytkowników i w celu zapewnienia spójności w naszych interfejsach API wynik jest teraz zwracany za pomocą kodu wyniku i listy obiektów SkuDetails
zamiast poprzedniej klasy owijającej:
Kotlin
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Java
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Zmieniono kolejność parametrów w metodzie onConsumeResponse()
Kolejność argumentów funkcji onConsumeResponse
z interfejsu ConsumeResponseListener
została zmieniona, aby była spójna w całym interfejsie API:
Kotlin
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Java
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Rozwinięty obiekt PurchaseResult
PurchaseResult
został odwinięty, aby zachować spójność w naszych interfejsach API:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Poprawki błędów
- Brak kodu odpowiedzi w pakiecie PURCHASES_UPDATED
- Rozwiązywanie problemów z ProxyBillingActivity i PurchasesUpdatedListener podczas obracania urządzenia
Wersja przedpremierowa 1 dla programistów (12 czerwca 2017 r., ogłoszenie)
Uruchomiliśmy wersję przedpremierową dla deweloperów, która ma na celu uproszczenie procesu tworzenia w zakresie płatności. Dzięki temu deweloperzy mogą skupić się na wdrażaniu logiki specyficznej dla aplikacji na Androida, takiej jak architektura aplikacji czy struktura nawigacji.
Biblioteka zawiera kilka przydatnych klas i funkcji, których możesz używać podczas integrowania aplikacji na Androida z interfejsem Google Play Billing API. Biblioteka zapewnia też warstwę abstrakcji na poziomie usługi Android Interface Definition Language (AIDL), co ułatwia deweloperom definiowanie interfejsu między aplikacją a interfejsem Google Play Billing API.