Ten temat zawiera informacje o wersjach Biblioteki płatności w Google Play.
Biblioteka płatności w Google Play w wersji 7.0.0 (14.05.2024 r.)
Dostępna jest wersja 7.0.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
Dodano interfejsy API do obsługi subskrypcji ratalnych.
- Dodano
ProductDetails.InstallmentPlanDetails
w przypadku ratalnych abonamentów podstawowych, które użytkownicy mogą kupić. Ten interfejs API ułatwia aplikacji identyfikowanie planu rat i konfiguracji jego zobowiązania, dzięki czemu możesz przekazać użytkownikowi powiązane informacje. Więcej informacji znajdziesz w naszym przewodniku po ratach subskrypcji.
- Dodano
Dodaliśmy komponenty
PendingPurchasesParams
iBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
, które zastąpiły elementyBillingClient.Builder.enablePendingPurchases()
, które w tej wersji zostały wycofane.- Wycofany
enablePendingPurchases()
jest funkcjonalnie odpowiednikiem funkcjienablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.
- Wycofany
Dodano interfejsy API do obsługi oczekujących transakcji w przypadku abonamentów przedpłaconych:
- Używaj w połączeniu z opisem
PendingPurchasesParams.Builder.enablePrepaidPlans()
iBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
, aby włączyć oczekujące transakcje dotyczące abonamentów przedpłaconych. Podczas dodawania pomocy sprawdź, czy Twoja aplikacja prawidłowo zarządza cyklami życia subskrypcji. Więcej informacji znajdziesz w naszym przewodniku po zakupach oczekujących. - Dodano
Purchase.PendingPurchaseUpdate
iPurchase.getPendingPurchaseUpdate()
do pobierania oczekującego doładowania lub przejścia na wyższą lub niższą wersję subskrypcji.
- Używaj w połączeniu z opisem
Usunięto
BillingClient.Builder.enableAlternativeBilling()
,AlternativeBillingListener
iAlternativeChoiceDetails
.- Deweloperzy powinni zamiast tego użyć właściwości
BillingClient.Builder.enableUserChoiceBilling()
zUserChoiceBillingListener
iUserChoiceDetails
w wywołaniu zwrotnym detektora.
- Deweloperzy powinni zamiast tego użyć właściwości
Usunięto
BillingFlowParams.ProrationMode
,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
iBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.- Deweloperzy powinni używać zamiast niego właściwości
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
zBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
. BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
.BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Deweloperzy powinni używać zamiast niego właściwości
Element
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()
został usunięty.- Zamiast niego deweloperzy powinni używać parametru
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)
.
- Zamiast niego deweloperzy powinni używać parametru
Interfejs
BillingClient.queryPurchaseHistoryAsync()
został wycofany i zostanie usunięty w kolejnej wersji. Zamiast nich deweloperzy powinni używać tych rozwiązań:- Potwierdzone i oczekujące zakupy: użyj opcji
BillingClient.queryPurchasesAsync()
, aby pobrać aktywne zakupy. - Wykorzystane zakupy: deweloperzy powinni śledzić zrealizowane zakupy na swoich serwerach.
- Anulowane zakupy: użyj interfejsu API dla programistów voided-purchases.
- Więcej informacji znajdziesz w artykule na temat historii zakupów zapytań.
- Potwierdzone i oczekujące zakupy: użyj opcji
BillingFlowParams.ProductDetailsParams.setOfferToken()
zgłasza teraz wyjątek, gdy deweloperzy podają puste poleofferToken
.Zaktualizowano
minSdkVersion
do 21 itargetSdkVersion
na 34.
Biblioteka płatności w Google Play w wersji 6.2.1 (16.04.2024 r.)
Dostępna jest wersja 6.2.1 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
- Naprawiliśmy błąd w
BillingClient.showAlternativeBillingOnlyInformationDialog()
, który powodował, że elementAlternativeBillingOnlyInformationDialogListener
nie mógł być wywołany w niektórych przypadkach po zakończeniu okna dialogowego.
Biblioteka płatności w Google Play w wersji 6.2.0 (6.03.2024 r.)
Dostępna jest wersja 6.2.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
- Dodaliśmy interfejsy API do obsługi ofert zewnętrznych.
- Dodano wymiar
BillingClient.Builder.enableExternalOffer()
, aby umożliwić udostępnianie ofert zewnętrznych. - Dodaliśmy
BillingClient.isExternalOfferAvailableAsync()
, aby sprawdzić dostępność funkcji udostępniania ofert zewnętrznych. - Dodano parametr
BillingClient.showExternalOfferInformationDialog()
, aby wyświetlać użytkownikom okno z informacjami, zanim trafią one poza aplikację. - Dodano komponent
BillingClient.createExternalOfferReportingDetailsAsync()
, aby utworzyć ładunek wymagany do raportowania transakcji dokonanych za pomocą ofert zewnętrznych.
- Dodano wymiar
Biblioteka płatności w Google Play w wersji 6.1.0 (14.11.2023 r.)
Dostępna jest wersja 6.1.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
- Dodano interfejsy API do obsługi tylko rozliczeń alternatywnych (tj.bez opcji wyboru przez użytkownika).
- Dodano
BillingClient.Builder.enableAlternativeBillingOnly()
, aby funkcjonalnie umożliwić oferowanie tylko rozliczeń alternatywnych. - Dodano
BillingClient.isAlternativeBillingOnlyAvailableAsync()
, aby sprawdzić dostępność tylko rozliczeń alternatywnych. - Dodano element
BillingClient.showAlternativeBillingOnlyInformationDialog()
, aby wyświetlać okno z informacjami informującymi użytkowników, że używane są tylko rozliczenia alternatywne. - Dodano
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
, aby utworzyć ładunek wymagany do raportowania transakcji tylko z wykorzystaniem rozliczeń alternatywnych.
- Dodano
- Zaktualizowano interfejsy API systemu rozliczeniowego opartego na wyborze użytkownika.
- Dodano klasę
UserChoiceBillingListener
, aby zastąpić element AlternativeBillingListener, oznaczony jako wycofany. - Dodano komponent
UserChoiceDetails
, aby zastąpić komponentAlternativeChoiceDetails
, który został oznaczony jako wycofany. - Dodano komponent
BillingClient.Builder.enableUserChoiceBilling()
, aby zastąpić komponentBillingClient.Builder.enableAlternativeBilling()
, który został oznaczony jako wycofany.
- Dodano klasę
- Dodano ikonę
BillingClient.getBillingConfigAsync()
, która pozwala pobrać kraj z Google Play.
Biblioteka płatności w Google Play w wersji 6.0.1 (22.06.2023 r.)
Dostępna jest wersja 6.0.1 Biblioteki płatności w Google Play oraz rozszerzenia 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 6.0 (10.05.2023 r.)
Dostępna jest wersja 6.0.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
Dodano nową wyliczenie
ReplacementMode
, które zastąpiłoProrationMode
.Uwaga: interfejs
ProrationMode
jest nadal dostępny ze względu na zgodność wsteczną.Usunięto identyfikator zamówienia
PENDING
.Wcześniej identyfikator zamówienia był tworzony zawsze, nawet jeśli zakup oczekuje na realizację. 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 uzupełniony po przeniesieniu zakupu do stanu
PURCHASED
.Usunięto metody
queryPurchases
ilaunchPriceConfirmationFlow
.Metody
queryPurchases
ilaunchPriceConfirmationFlow
, które były wcześniej oznaczone jako wycofane, zostały usunięte z Biblioteki płatności w Play w wersji 6.0.0. Deweloperzy powinni używać właściwościqueryPurchasesAsync
zamiastqueryPurchases
. Alternatywne rozwiązania dla użytkownikówlaunchPriceConfirmationFlow
znajdziesz w artykule Zmiany cen.Dodano nowy kod odpowiedzi na błąd sieci.
Od wersji PBL w wersji 6.0.0 dodano nowy kod odpowiedzi na błąd sieci
NETWORK_ERROR
. Ten kod jest zwracany, gdy wystąpi błąd spowodowany problemem z połączeniem sieciowym. Błędy związane z połączeniem sieciowym były wcześniej zgłaszane jakoSERVICE_UNAVAILABLE
.Zaktualizowano
SERVICE_UNAVAILABLE
iSERVICE_TIMEOUT
.Od wersji PBL w wersji 6.0.0 błędy wynikające z limitu czasu przetwarzania będą zwracane jako
SERVICE_UNAVAILABLE
, a nie bieżąca wartośćSERVICE_TIMEOUT
.Działanie nie zmienia się we wcześniejszych wersjach PBL.
Usunięto
SERVICE_TIMEOUT
.Od wersji PBL w wersji 6.0.0 usługa
SERVICE_TIMEOUT
nie będzie już zwracana. Poprzednie wersje PBL nadal będą zwracać ten kod.Dodano dodatkowe logowanie.
Wersja 6 Biblioteki płatności w Play obejmuje dodatkowe logowanie, które zapewnia wgląd w wykorzystanie interfejsu API (np. o powodzeniu i niepowodzeniu) oraz o problemach z połączeniem usługi. Wykorzystamy te informacje, aby poprawić działanie Biblioteki płatności w Google Play i ułatwiać obsługę błędów.
Biblioteka płatności w Google Play w wersji 5.2.1 (22.06.2023 r.)
Dostępna jest wersja 5.2.1 Biblioteki płatności w Google Play oraz rozszerzenia 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 r.)
Dostępna jest wersja 5.2.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
- Dodaliśmy klasy dotyczące obsługi rozliczeń alternatywnych na urządzeniach mobilnych i tabletach w przypadku użytkowników w Korei Południowej:
- Dodano metodę
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
, aby określić zewnętrzny identyfikator transakcji źródłowej subskrypcji. - Dodano metodę
BillingClient.Builder.enableAlternativeBilling()
, aby umożliwić użytkownikom w Korei Południowej wybór alternatywnej opcji rozliczeń.
Biblioteka płatności w Google Play w wersji 5.1 (31.10.2022 r.)
Dostępna jest wersja 5.1.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Dodano metodę
ProductDetails.SubscriptionOfferDetails.getOfferId()
, aby pobierać identyfikator oferty. - Dodano metodę
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
do pobierania identyfikatora abonamentu podstawowego. - Zaktualizowano:
targetSdkVersion
na 31.
Biblioteka płatności w Google Play w wersji 5.0 (11.05.2022 r.)
Dostępna jest wersja 5.0.0 Biblioteki płatności w Google Play oraz rozszerzenia 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 dotyczących 1 subskrypcji. Więcej informacji znajdziesz w przewodniku po migracji.
- Dodano zmienną
BillingClient.queryProductDetailsAsync()
, która zastępujeBillingClient.querySkuDetailsAsync()
. - Dodaliśmy metodę
setIsOfferPersonalized()
w wymaganiach dotyczących ujawniania informacji o cenach spersonalizowanych w UE. Więcej informacji o korzystaniu z tej metody znajdziesz w artykule Wskazywanie ceny spersonalizowanej. - Usunięto element
queryPurchases()
, który został wcześniej wycofany i zastąpiony przez funkcję QueryPurchasesAsync wprowadzone 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. Aby dowiedzieć się więcej o opcjach alternatywnych, przeczytaj artykuł Wprowadzanie na rynek procesu potwierdzania zmiany ceny. - Usunięto parametr
setVrPurchaseFlow()
, który był wcześniej używany podczas tworzenia instancji procesu zakupu. W poprzednich wersjach ta metoda przekierowywała użytkownika do dokonania zakupu na urządzeniu z Androidem. Gdy usuniesz tę metodę, użytkownicy będą mogli dokonać zakupu w ramach standardowego procesu.
Wersja 4.1 Biblioteki płatności w Google Play (23.02.2022 r.)
Dostępna jest wersja 4.1.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- Dodano
BillingClient.showInAppMessages()
, aby ułatwić obsługę odrzuconych płatności za subskrypcję. Aby dowiedzieć się więcej o obsłudze odrzuconych płatności za subskrypcje przy użyciu funkcji wiadomości w aplikacji, przeczytaj artykuł Obsługa odrzuconych płatności.
Biblioteka płatności w Google Play w wersji 4.0 (18.05.2021 r.)
Dostępna jest wersja 4.0.0 Biblioteki płatności w Google Play oraz rozszerzenia Kotlin.
Podsumowanie zmian
Dodano komponent
BillingClient.queryPurchasesAsync()
, aby zastąpić elementBillingClient.queryPurchases()
, który zostanie usunięty w przyszłej wersji.Dodaliśmy 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.Zaktualizowany dokument Javadoc i implementacja umożliwiająca wskazanie wątku, w którym można wywołać metodę, oraz opublikowane wyniki wątku.
Dodaliśmy
BillingFlowParams.Builder.setSubscriptionUpdateParams()
jako nowy sposób inicjowania aktualizacji subskrypcji. Zastępuje to miejsceBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
,BillingFlowParams.Builder#setOldSku
, które zostały usunięte.Dodano
Purchase.getQuantity()
iPurchaseHistoryRecord.getQuantity()
.Dodano
Purchase#getSkus()
iPurchaseHistoryRecord#getSkus()
. Zastąpiły one elementyPurchase#getSku
iPurchaseHistoryRecord#getSku
, które zostały usunięte.Usunięto
BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
iBillingFlowParams#getSkuType
.
Biblioteka płatności w Google Play w wersji 3.0.3 (12.03.2021 r.)
Dostępne są wersja 3.0.3 Biblioteki płatności w Google Play, rozszerzenie Kotlin i wtyczka Unity.
Poprawki błędów w Javie i Kotlin
- Naprawianie wycieku pamięci po wywołaniu metody
endConnection()
. - Rozwiązanie problemu, który występował, gdy Biblioteka płatności w Google Play była używana przez aplikacje korzystające z trybu uruchamiania pojedynczego zadania. Wywołanie zwrotne
onPurchasesUpdated()
jest wywoływane, gdy aplikacja zostanie wznowiona w Menu z aplikacjami na Androidzie, a okno płatności było widoczne przed zawieszeniem.
Poprawki błędów w Unity
- Zaktualizuj Javę do wersji 3.0.3, by naprawić wyciek pamięci i rozwiązać problem uniemożliwiający zakupy po wznowieniu aplikacji w Menu z aplikacjami na Androidzie, a okno płatności było widoczne przed zawieszeniem.
Biblioteka płatności w Google Play w wersji 3.0.2 (24.11.2020 r.)
Dostępna jest wersja 3.0.2 Biblioteki płatności w Google Play oraz rozszerzenie Kotlin.
Poprawki błędów
- Naprawiono błąd w rozszerzeniu Kotlin powodujący błąd współpracy i błąd „Już wznowiono”.
- Usunięto nierozwiązane odwołania, które występowały, gdy rozszerzenie Kotlin było używane z biblioteką kotlinx.coroutines w wersji 1.4 lub nowszej.
Biblioteka płatności w Google Play w wersji 3.0.1 (30.09.2020 r.)
Dostępna jest wersja 3.0.1 Biblioteki płatności w Google Play oraz rozszerzenie 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, usługa
PurchasesUpdatedListener
nie mogła zostać wywołana z wynikiem zakupu.
Biblioteka płatności w Google Play w wersji 3.0 (8.06.2020 r.)
Dostępne są wersja 3.0.0 Biblioteki płatności w Google Play, rozszerzenie Kotlin i wtyczka Unity.
Podsumowanie zmian
- Usunęliśmy obsługę kodu SKU reklamy z nagrodą.
- Usunięto parametry
ChildDirected
iUnderAgeOfConsent
. - Usunięto wycofane metody ładunku dla programistów.
- Usunięto wycofane metody
BillingFlowParams.setAccountId()
iBillingFlowParams.setDeveloperId()
. - Usunięto wycofane metody
BillingFlowParams.setOldSkus(String oldSku)
iBillingFlowParams.addOldSku(String oldSku)
. - Dodano adnotacje dopuszczalności wartości null.
Poprawki błędów
SkuDetails.getIntroductoryPriceCycles()
zwraca teraz wartośćint
zamiastString
.- Poprawiliśmy błąd, który powodował, że proces płatności był traktowany jako zawierający dodatkowe parametry, nawet jeśli nie ustawiono żadnych dodatkowych parametrów.
Biblioteka płatności w Google Play w wersji 2.2.1 (20.05.2020 r.)
Biblioteka Płatności w Google Play w wersji 2.2.1 jest już dostępna.
Poprawki błędów
- Zaktualizowaliśmy domyślną wersję biblioteki płatności w Play, od której zależy rozszerzenie Kotlin.
Biblioteka płatności w Google Play w wersji 2.2.0 i obsługa Unity (23.03.2020)
Płatności w Google Play w wersji 2.2.0 zapewniają funkcje, które pomagają deweloperom upewnić się, że zakupy są przypisywane do odpowiedniego użytkownika. Te zmiany zastępują potrzebę tworzenia niestandardowych rozwiązań na podstawie ładunku programisty. W ramach tej aktualizacji funkcja ładunku dla programistów została wycofana i w kolejnej wersji zostanie usunięta. Więcej informacji, w tym zalecane alternatywne rozwiązania, znajdziesz w artykule o ładunku programisty.
Biblioteka płatności w Google Play 2 dla Unity
Oprócz aktualnej wersji Biblioteki płatności w Google Play 2, Java i Kotlin, opublikowaliśmy także wersję tej biblioteki do użytku w Unity. Deweloperzy gier, którzy korzystają z interfejsu Unity In-App purchase API, mogą już teraz przejść na nową wersję, aby korzystać ze wszystkich funkcji Biblioteki płatności w Google Play 2 i ułatwić kolejne uaktualnienia tej biblioteki w kolejnych wersjach.
Więcej informacji znajdziesz w artykule o korzystaniu z Płatności w Google Play w Unity.
Podsumowanie zmian
- Biblioteka płatności w Google Play w języku Java
- W
AcknowledgePurchaseParams
wycofane metodysetDeveloperPayload()
igetDeveloperPayload()
. - W
ConsumeParams
wycofane metodysetDeveloperPayload()
igetDeveloperPayload()
. - W usłudze
BillingFlowParams
zmieniono nazwę zsetAccountId()
nasetObfuscatedAccountId()
, a w tym polu udokumentowaliśmy ograniczenie długości do 64 znaków oraz ograniczenie zakazujące reklamowania informacji umożliwiających identyfikację osób. BibliotekasetAccountId()
została oznaczona jako wycofana i zostanie usunięta w przyszłej wersji biblioteki. - W
BillingFlowParams
dodano elementsetObfuscatedProfileId()
, który działa podobnie dosetObfuscatedAccountId()
. Więcej informacji znajdziesz w artykule o aktualizacjach i alternatywnych ładunkach dla programistów. - W obiekcie
Purchase
dodano metodęgetAccountIdentifiers()
, która zwraca zaciemnione identyfikatory konta ustawione w poluBillingFlowParams
. - W narzędziu
BillingClient
metodaloadRewardedSku()
została oznaczona jako wycofana w ramach wycofania kodów SKU z nagrodą. Więcej informacji o wycofaniu znajdziesz w Centrum pomocy Konsoli Play.
- W
Biblioteka płatności w Google Play w wersji 2.1.0 i rozszerzenie Kotlin w wersji 2.1.0 (10.12.2019 r.)
Biblioteka Płatności w Google Play w wersji 2.1.0 oraz nowe rozszerzenie Kotlin są już dostępne. Rozszerzenie Play Billing Library Kotlin zapewnia idiomatyczne alternatywy dla interfejsów API w przypadku korzystania z kotlin, takie jak większe bezpieczeństwo null i korekty. Przykładowy kod znajdziesz w artykule Korzystanie z Biblioteki płatności w Google Play.
Ta wersja zawiera następujące zmiany.
Podsumowanie zmian
- W usłudze
BillingFlowParams
wycofaliśmy atrybutsetOldSku(String oldSku)
i zastąpiliśmy go ciągiemsetOldSku(String oldSku, String purchaseToken)
, aby ułatwić rozróżnianie, czy wiele kont na urządzeniu ma ten sam kod SKU.
Biblioteka płatności w Google Play w wersji 2.0.3 (5.08.2019)
Biblioteka Płatności w Google Play w wersji 2.0.3 jest już dostępna.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że funkcja
querySkuDetailsAsync()
czasami ulegała awarii z użyciem koduDEVELOPER_ERROR
, zamiast zwracać udany wynik.
Biblioteka płatności w Google Play w wersji 2.0.2 (8.07.2019)
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 funkcji biblioteki.
Biblioteka płatności w Google Play w wersji 2.0.1 (6.06.2019 r.)
Biblioteka Płatności w Google Play w wersji 2.0.1 jest już dostępna. Ta wersja zawiera podane niżej zmiany.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że w niektórych przypadkach komunikaty debugowania były zwracane jako
null
. - Naprawiono potencjalny problem z wyciekiem pamięci.
Biblioteka płatności w Google Play w wersji 2.0 (7.05.2019)
Biblioteka Płatności w Google Play w wersji 2.0 jest już dostępna. Ta wersja zawiera podane niżej zmiany.
Zakupy należy potwierdzić w ciągu 3 dni
Google Play umożliwia kupowanie produktów wewnątrz aplikacji (w aplikacji) lub poza nią (poza nią). Aby zapewnić spójne wrażenia przy zakupie niezależnie od miejsca, w którym użytkownik kupił produkt, musisz jak najszybciej potwierdzać wszystkie zakupy otrzymane w Bibliotece płatności w Google Play jak najszybciej 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 anuluje ten zakup. W przypadku transakcji oczekujących (nowa wersja w wersji 2.0) trzydniowy okres ważności rozpoczyna się, gdy zakup zostaje przeniesiony do stanu PURCHASED
, i nie ma zastosowania, gdy zakup jest w stanie PENDING
.
W przypadku subskrypcji musisz potwierdzić każdy zakup z nowym tokenem zakupu. Oznacza to, że musisz potwierdzić wszystkie początkowe zakupy, zmiany abonamentu i ponowną rejestrację, ale nie musisz potwierdzać kolejnych odnowień. Aby określić, czy zakup wymaga potwierdzenia, sprawdź pole potwierdzenia przy zakupie.
Obiekt Purchase
zawiera teraz metodę isAcknowledged()
, która wskazuje, czy zakup został potwierdzony. Oprócz tego interfejs Google Play Developer API obejmuje wartości logiczne potwierdzenia w przypadku komponentów Purchases.products
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 parametru
consumeAsync()
, który znajdziesz w interfejsie API klienta. - W przypadku produktów, które nie są zużywane, użyj atrybutu
acknowledgePurchase()
podanego w interfejsie API klienta. - W interfejsie Server API jest też dostępna nowa metoda
acknowledge()
.
Usunięto element BillingFlowParams.setSku()
Wcześniej wycofana metoda BillingFlowParams#setSku()
została usunięta w tej wersji. Przed renderowaniem produktów w procesie zakupu musisz teraz wywołać metodę BillingClient.querySkuDetailsAsync()
, która przekazuje wynikowy obiekt SkuDetails
do BillingFlowParams.Builder.setSkuDetails()
.
Przykładowy kod znajdziesz w artykule Korzystanie z Biblioteki płatności w Google Play.
Obsługiwany jest ładunek programisty
Biblioteka Płatności w Google Play w wersji 2.0 dodaje obsługę ładunku dewelopera – dowolnych ciągów tekstowych, które można dołączyć do zakupów. Możesz dołączyć do zakupu parametr ładunku dewelopera, ale tylko po potwierdzeniu lub wykorzystaniu zakupu. Różni się to od ładunku programisty w AIDL, w którym ładunek można określić podczas uruchamiania procesu zakupu. Zakupy można teraz inicjować poza aplikacją, dzięki czemu zawsze będziesz mieć możliwość dodania ładunku do zakupów.
Aby umożliwić dostęp do ładunku w nowej bibliotece, obiekty Purchase
zawierają teraz metodę getDeveloperPayload()
.
Spójne oferty
Gdy oferujesz obniżony kod SKU, Google Play zwraca teraz jego pierwotną cenę, aby pokazać użytkownikom, że otrzymują rabat.
SkuDetails
udostępnia 2 nowe metody pobierania pierwotnej ceny kodu SKU:
getOriginalPriceAmountMicros()
– zwraca niesformatowaną pierwotną cenę kodu SKU bez rabatu.getOriginalPrice()
– zwraca pierwotną cenę z dodatkowym formatowaniem waluty.
Transakcje oczekujące
Jeśli korzystasz z Biblioteki płatności w Google Play w wersji 2.0, przed przyznaniem uprawnień musisz obsługiwać zakupy, gdy wymagane jest dodatkowe działanie. Użytkownik może np. kupić gotówkę w sklepie stacjonarnym, aby kupić Twój produkt w aplikacji. Oznacza to, że transakcja jest realizowana poza aplikacją. W takim przypadku uprawnienia przyznaj dopiero po ukończeniu transakcji przez użytkownika.
Aby włączyć oczekujące zakupy, wywołaj enablePendingPurchases()
w ramach inicjowania aplikacji.
Użyj parametru Purchase.getPurchaseState()
, aby określić, czy stan zakupu to PURCHASED
czy PENDING
. Pamiętaj, że upoważnienie należy przyznawać tylko wtedy, gdy stan to PURCHASED
. Aby sprawdzić dostępność aktualizacji stanu Purchase
, wykonaj te czynności:
- Po uruchomieniu aplikacji wywołaj
BillingClient.queryPurchases()
, aby pobrać listę niewykorzystanych produktów powiązanych z użytkownikiem. - Wywołaj
Purchase.getPurchaseState()
w każdym zwróconym obiekciePurchase
. - Zaimplementuj metodę
onPurchasesUpdated()
, aby reagować na zmiany w obiektachPurchase
.
Oprócz tego interfejs Google Play Developer API zawiera 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 rodzaj powiadomienia jest wysyłany tylko w przypadku zakupów związanych z opóźnionymi formami płatności, takimi jak gotówka.
Podczas potwierdzania oczekujących zakupów pamiętaj, aby potwierdzać tylko wtedy, gdy stan zakupu to PURCHASED
, a nie PENDING
.
Zmiany interfejsu API
Biblioteka Płatności w Google Play w wersji 2.0 zawiera kilka zmian w interfejsie API, aby dodać nowe funkcje i ułatwić korzystanie z istniejących.
consumeAsync
consumeAsync()
przyjmuje teraz obiekt ConsumeParams
zamiast purchaseToken
. ConsumeParams
zawiera purchaseToken
oraz opcjonalny ładunek programisty.
Poprzednia wersja aplikacji consumeAsync()
została w niej usunięta.
queryHistoriaAsynchroniczna
Aby zminimalizować ryzyko pomyłek, queryPurchaseHistoryAsync()
zwraca teraz obiekt PurchaseHistoryRecord
zamiast obiektu Purchase
. Obiekt PurchaseHistoryRecord
jest taki sam jak obiekt Purchase
z tą różnicą, że odzwierciedla tylko wartości zwrócone przez queryPurchaseHistoryAsync()
i nie zawiera pól autoRenewing
, orderId
ani packageName
. Zauważ, że w zwróconych danych nic się nie zmieniło – funkcja queryPurchaseHistoryAsync()
zwraca te same dane co wcześniej.
Zwrócone wartości 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 debugowania, który umożliwia diagnozowanie 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 teraz wartośćlong
zamiastString
.
Biblioteka płatności w Google Play w wersji 1.2.2 (7.03.2019)
Dostępna jest wersja 1.2.2 Biblioteki płatności w Google Play. Ta wersja zawiera podane niżej zmiany.
Poprawki błędów
- Naprawiliś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 używanie wątku głównego, możesz teraz utworzyć instancję Biblioteki płatności w Google Play z wątku w tle.
- Realizacja została w pełni przeniesiona do wątku w tle, aby zmniejszyć ryzyko występowania błędów ANR.
Biblioteka płatności w Play w wersji 1.2.1 (4.03.2019)
Biblioteka Płatności w Google Play w wersji 1.2.1 jest już dostępna. Ta wersja zawiera podane niżej 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 nagrodą.
Inne zmiany
- Aby ułatwić testowanie, dodaliśmy publiczne konstruktory
PurchasesResult
iSkuDetailsResult
. SkuDetails
obiektu może używać nowej metodygetOriginalJson()
.- Wszystkie wywołania usługi AIDL są teraz obsługiwane przez wątki w tle.
Poprawki błędów
- Puste detektory wywołań zwrotnych nie są już przekazywane do publicznych interfejsów API.
Biblioteka płatności w Google Play w wersji 1.2 (18.10.2018 r.)
Dostępna jest wersja 1.2 Biblioteki płatności w Google Play. Ta wersja zawiera podane niżej zmiany.
Podsumowanie zmian
- Biblioteka płatności w Google Play jest teraz objęta Umową licencyjną dotyczącą pakietu Android Software Development Kit.
- Dodaliśmy interfejs
launchPriceChangeConfirmationFlow
API, który zachęca użytkowników do sprawdzenia oczekującej zmiany ceny subskrypcji. - Dodaliśmy obsługę nowego trybu proporcjonalnego okresu subskrypcji (
DEFERRED
) podczas przechodzenia na wyższą lub niższą wersję subskrypcji użytkownika. - W klasie
BillingFlowParams
zastąpiliśmysetSku()
wartościąsetSkuDetails()
. - Drobne poprawki błędów i optymalizacje kodu.
Potwierdzenie zmiany ceny
Teraz w Konsoli Google Play możesz zmienić cenę subskrypcji oraz poprosić użytkowników o sprawdzenie i zaakceptowanie nowej ceny po otwarciu aplikacji.
Aby użyć tego interfejsu API, utwórz obiekt PriceChangeFlowParams
, używając skuDetails
subskrypcji produktu, a następnie wywołaj launchPriceChangeConfirmationFlow()
. Zaimplementuj 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. } });
W procesie potwierdzania zmiany ceny wyświetla się okno z nowymi informacjami o cenach i prośbą o jej zaakceptowanie. Ten proces zwraca kod odpowiedzi typu BillingClient.BillingResponse
.
Nowy tryb proporcjonalnego udostępniania
Podczas przechodzenia na wyższą lub niższą wersję subskrypcji użytkownika możesz użyć nowego trybu proporcjonalnego podziału: DEFERRED
. Ten tryb aktualizuje subskrypcję użytkownika przy jej następnym odnowieniu. Aby dowiedzieć się, jak ustawić tryb proporcjonalnego przesyłania, przeczytaj artykuł 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 rozliczeń w aplikacji zalecamy skorzystanie z obiektu JSON bezpośrednio przy użyciu setSkuDetails()
, jak pokazano w tym fragmencie kodu:
W klasie konstruktora BillingFlowParams
metoda setSku()
została wycofana. Zamiast tego użyj metody setSkuDetails()
, jak w tym fragmencie kodu. Obiekt przekazywany 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 r.)
Dostępna jest wersja 1.1 Biblioteki płatności w Google Play. Ta wersja zawiera podane niżej zmiany.
Podsumowanie zmian
- Dodaliśmy obsługę ustawienia proporcjonalnego trybu w
BillingFlowParams
podczas przechodzenia na wyższą lub niższą wersję subskrypcji. - Flaga wartości logicznej
replaceSkusProration
wBillingFlowParams
nie jest już obsługiwana. Użyj w zamian zasadyreplaceSkusProrationMode
. launchBillingFlow()
wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi.
Zmiany w działaniu
W wersji 1.1 Biblioteki płatności w Google Play wprowadziliśmy opisane poniżej zmiany w działaniu.
Deweloperzy mogą ustawić replaceSkusProrationMode
w klasie BillingFlowParams
Więcej informacji o proporcji proporcjonalnej subskrypcji podczas przechodzenia na wyższą lub niższą wersję subskrypcji użytkownika znajdziesz w ProrationMode
.
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 następujące tryby proporcjonalnego podziału:
IMMEDIATE_WITH_TIME_PRORATION |
Wymiana zaczyna obowiązywać od razu, a nowy okres ważności zostanie obliczony proporcjonalnie. Opłata za nią zostanie naliczona proporcjonalnie do niej. Jest to obecne ustawienie domyślne. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Wymiana odbywa się natychmiast, a cykl rozliczeniowy pozostaje 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 |
Wymiana obowiązuje od razu, a nowa cena zostanie pobrana przy następnym cyklu. Cykl rozliczeniowy pozostaje bez zmian. |
Język replaceSkusProration
nie jest już obsługiwany w klasie BillingFlowParams
Deweloperzy, którzy dotychczas mogli ustawiać flagę wartości logicznej, aby naliczać proporcjonalną kwotę za żądanie uaktualnienia subskrypcji. Obsługujemy funkcję ProrationMode
, która zawiera bardziej szczegółowe instrukcje proporcjonalnego podziału, dlatego ta flaga wartości logicznej nie jest już obsługiwana.
launchBillingFlow()
wywołuje teraz wywołanie zwrotne w przypadku nieudanych odpowiedzi.
Biblioteka płatności zawsze aktywuje wywołanie zwrotne PurhcasesUpdatedListener
i asynchronicznie zwróci wartość BillingResponse
. Zachowywana jest także synchroniczna wartość zwrotu BillingResponse
.
Poprawki błędów
- Prawidłowo zamyka się w metodach asynchronicznych, gdy usługa jest odłączona.
- Obiekty parametrów
Builder
nie powodują już mutacji utworzonych obiektów. - Problem 68087141:
launchBillingFlow()
teraz aktywuje wywołanie zwrotne w przypadku nieudanych odpowiedzi.
Biblioteka płatności w Google Play w wersji 1.0 (19.09.2017, ogłoszenie)
Biblioteka Płatności w Google Play w wersji 1.0 jest już dostępna. Ta wersja zawiera podane niżej zmiany.
Ważne zmiany
- Uprawnienia dotyczące płatności umieszczonych w pliku manifestu biblioteki. Nie musisz już dodawać uprawnienia
com.android.vending.BILLING
w pliku manifestu Androida. - Do klasy
BillingClient.Builder
dodano nowy kreator. - Wprowadzono wzorzec konstruktora dla klasy
SkuDetailsParams
, który powinien być używany w metodach wysyłania zapytań o kody SKU. - Zaktualizowaliśmy kilka metod interfejsu API w celu zachowania spójności (te same nazwy i kolejność argumentów zwracanych).
Zmiany w działaniu
W wersji 1.0 Biblioteki płatności w Google Play wprowadziliśmy opisane poniżej zmiany w działaniu.
Klasa BillingClient.Builder
Komponent 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 przy użyciu klasy BillingFlowParams
Aby zainicjować proces płatności za zakup lub subskrypcję, metoda launchBillingFlow()
otrzymuje wystąpienie BillingFlowParams
zainicjowane z parametrami specyficznymi dla tego żą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ń dotyczących dostępnych produktów
Argumenty metod queryPurchaseHistoryAsync()
i querySkuDetailsAsync()
zostały zawarte we wzorcu konstruktora:
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 Twojej wygody wynik jest teraz zwracany za pomocą kodu wyniku i listy obiektów SkuDetails
zamiast poprzedniej klasy otoki dla wygody i zachowania spójnych w całym 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 dla funkcji onConsumeResponse
z interfejsu ConsumeResponseListener
zmieniła się, 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)
Nieopakowany obiekt purchaseResult
Wyodrębniliśmy interfejs PurchaseResult
, aby zapewnić spójność wszystkich interfejsów 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 atrybutami ProxyBillingActivity i PurchasesUpdatedListener podczas rotacji urządzenia
Wersja przedpremierowa dla programistów 1 (12.06.2017, ogłoszenie)
Wprowadzono wersję przedpremierową dla programistów, której celem jest uproszczenie procesu programowania płatności i skupienie się na wdrożeniu logiki odpowiedniej dla aplikacji na Androida, takiej jak architektura aplikacji i struktura nawigacji.
W bibliotece znajdziesz kilka wygodnych zajęć i funkcji, z których możesz korzystać podczas integracji aplikacji na Androida z interfejsem Google Play Billing API. Biblioteka udostępnia też warstwę abstrakcji na bazie usługi Android Interface Definition Language (AIDL), co ułatwia deweloperom definiowanie interfejsu między aplikacją a interfejsem Google Play Billing API.