Informacje o wersji Biblioteki płatności w Google Play

Ten temat zawiera informacje o wersjach Biblioteki płatności w Google Play.

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

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

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

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ło ProrationMode.

    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 i launchPriceConfirmationFlow.

    Metody queryPurchases i launchPriceConfirmationFlow, 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ści queryPurchasesAsync zamiast queryPurchases. Alternatywne rozwiązania dla użytkowników launchPriceConfirmationFlow 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 jako SERVICE_UNAVAILABLE.

  • Zaktualizowano SERVICE_UNAVAILABLE i SERVICE_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

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

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ępuje BillingClient.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

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

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 i UnderAgeOfConsent.
  • Usunięto wycofane metody ładunku dla programistów.
  • Usunięto wycofane metody BillingFlowParams.setAccountId() i BillingFlowParams.setDeveloperId().
  • Usunięto wycofane metody BillingFlowParams.setOldSkus(String oldSku) i BillingFlowParams.addOldSku(String oldSku).
  • Dodano adnotacje dopuszczalności wartości null.

Poprawki błędów

  • SkuDetails.getIntroductoryPriceCycles() zwraca teraz wartość int zamiast String.
  • 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 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 atrybut setOldSku(String oldSku) i zastąpiliśmy go ciągiem setOldSku(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 kodu DEVELOPER_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:

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:

  1. Po uruchomieniu aplikacji wywołaj BillingClient.queryPurchases(), aby pobrać listę niewykorzystanych produktów powiązanych z użytkownikiem.
  2. Wywołaj Purchase.getPurchaseState() w każdym zwróconym obiekcie Purchase.
  3. Zaimplementuj metodę onPurchasesUpdated(), aby reagować na zmiany w obiektach Purchase.

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

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

Inne zmiany

  • Aby ułatwić testowanie, dodaliśmy publiczne konstruktory PurchasesResult i SkuDetailsResult.
  • SkuDetails obiektu może używać nowej metody getOriginalJson().
  • 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śmy setSku() 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 w BillingFlowParams nie jest już obsługiwana. Użyj w zamian zasady replaceSkusProrationMode.
  • 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

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.