1. Wprowadzenie
W tym samouczku skupisz się na utworzeniu produktu kupowanego raz, zintegrowaniu aplikacji z Biblioteką płatności w Play (PBL) i analizowaniu przyczyn rezygnacji z zakupu.
Uwaga: aby ukończyć ten kurs, musisz mieć dostęp do funkcji Wiele opcji zakupu i ofert dla produktów kupowanych raz. Ta funkcja jest dostępna w ramach programu wcześniejszego dostępu. Usługi i funkcje w ramach programu wczesnego dostępu są dostępne w stanie „takim, jaki jest” i mogą mieć ograniczone wsparcie. Aby korzystać z funkcji dostępnych w ramach programu wcześniejszego dostępu, prześlij prośbę za pomocą formularza zgłoszenia zainteresowania programem wcześniejszego dostępu do produktów kupowanych raz. Jeśli jednak chcesz tylko dowiedzieć się, jak analizować rezygnacje z zakupu za pomocą kodów odpowiedzi Płatności w Play, przejdź bezpośrednio do sekcji Analizowanie rezygnacji z zakupu w tym laboratorium.
Odbiorcy
Te warsztaty są przeznaczone dla programistów aplikacji na Androida, którzy korzystają z Biblioteki płatności w Play (PBL) lub chcą jej używać do generowania przychodów z produktów kupowanych raz.
Czego się nauczysz...
- Jak tworzyć produkty kupowane raz w Konsoli Google Play.
- Jak zintegrować aplikację z PBL.
- Jak przetwarzać zakupy produktów konsumpcyjnych i niekonsumpcyjnych kupowanych raz w Bibliotece płatności w Play.
- Jak analizować rezygnacje z zakupu.
Co będzie Ci potrzebne...
- Dostęp do Konsoli Google Play za pomocą konta dewelopera. Jeśli nie masz konta dewelopera, musisz utworzyć konto.
- Przykładowa aplikacja do tego laboratorium, którą możesz pobrać z GitHuba.
- Android Studio
2. Tworzenie przykładowej aplikacji
Przykładowa aplikacja to w pełni funkcjonalna aplikacja na Androida z kompletnym kodem źródłowym, która prezentuje te aspekty:
- Integracja aplikacji z PBL
- Pobieranie produktów kupowanych raz
- Uruchamianie procesów zakupu produktów kupowanych raz
- Scenariusze zakupu, które prowadzą do tych odpowiedzi dotyczących płatności:
BILLING_UNAVAILABLEUSER_CANCELLEDOKITEM_ALREADY_OWNED
Poniższy film demonstracyjny pokazuje, jak będzie wyglądać i działać przykładowa aplikacja po wdrożeniu i uruchomieniu.
Wymagania wstępne
Zanim utworzysz i wdrożysz przykładową aplikację, wykonaj te czynności:
- Utwórz konto dewelopera w Konsoli Google Play. Jeśli masz już konto dewelopera, pomiń ten krok.
- Utwórz nową aplikację w Konsoli Play. Podczas tworzenia aplikacji możesz podać dowolną nazwę przykładowej aplikacji.
- Zainstaluj Android Studio.
Kompilacja
Celem tego kroku kompilacji jest wygenerowanie podpisanego pliku pakietu Android App Bundle aplikacji przykładowej.
Aby wygenerować pakiet aplikacji na Androida, wykonaj te czynności:
- Pobierz przykładową aplikację z GitHub.
- Skompiluj przykładową aplikację. Zanim to zrobisz, zmień nazwę pakietu przykładowej aplikacji, a potem ją skompiluj. Jeśli w Konsoli Play masz pakiety innych aplikacji, upewnij się, że nazwa pakietu podana w przypadku aplikacji przykładowej jest unikalna.
Uwaga: utworzenie aplikacji przykładowej powoduje wygenerowanie tylko pliku APK, którego możesz używać do testowania lokalnego. Uruchomienie aplikacji nie powoduje jednak pobrania produktów i cen, ponieważ nie zostały one skonfigurowane w Konsoli Play. Zrobisz to w dalszej części tego laboratorium. - Wygeneruj podpisany pakiet aplikacji na Androida.
Następnym krokiem jest przesłanie pakietu aplikacji na Androida do Konsoli Google Play.
3. Tworzenie produktu kupowanego raz w Konsoli Play
Aby utworzyć produkty kupowane raz w Konsoli Google Play, musisz mieć aplikację w Konsoli Play. Utwórz aplikację w Konsoli Play, a następnie prześlij wcześniej utworzony podpisany pakiet aplikacji.
Tworzenie aplikacji
Aby utworzyć aplikację:
- Zaloguj się w Konsoli Google Play, korzystając z konta dewelopera.
- Kliknij Utwórz aplikację. Otworzy się strona Utwórz aplikację.
- Wpisz nazwę aplikacji, wybierz domyślny język i podaj inne szczegóły dotyczące aplikacji.
- Kliknij Utwórz aplikację. Spowoduje to utworzenie aplikacji w Konsoli Google Play.
Teraz możesz przesłać podpisany pakiet aplikacji przykładowej aplikacji.
Prześlij podpisany pakiet aplikacji
- Prześlij podpisany pakiet aplikacji na ścieżkę testów wewnętrznych w Konsoli Google Play. Dopiero po przesłaniu możesz skonfigurować funkcje związane z zarabianiem w Konsoli Play.
- Kliknij Testuj i publikuj > Testowanie > Wersja wewnętrzna > Utwórz nową wersję.
- Wpisz nazwę wersji i prześlij podpisany plik pakietu aplikacji.
- Kliknij Dalej, a następnie Zapisz i opublikuj.
Teraz możesz tworzyć produkty kupowane raz.
Tworzenie produktu kupowanego raz
Aby utworzyć produkt kupowany raz:
- W Konsoli Google Play w menu nawigacyjnym po lewej stronie kliknij Zarabianie w Google Play > Produkty > Produkty kupowane raz.
- Kliknij Utwórz produkt kupowany raz.
- Podaj te szczegóły produktu:
- Identyfikator produktu: wpisz unikalny identyfikator produktu. Wpisz
one_time_product_01. - (Opcjonalnie) Tagi: dodaj odpowiednie tagi.
- Nazwa: wpisz nazwę produktu. Na przykład:
Product name. - Opis: wpisz opis produktu. Na przykład:
Product description. - (Opcjonalnie) Dodaj obraz ikony: prześlij ikonę, która reprezentuje Twój produkt.
- Identyfikator produktu: wpisz unikalny identyfikator produktu. Wpisz
- Kliknij Dalej.
- Dodaj opcję zakupu i skonfiguruj jej dostępność regionalną. Produkt kupowany raz musi mieć co najmniej 1 opcję zakupu, która określa sposób przyznania uprawnienia, jego cenę i dostępność regionalną. W tym samouczku dodamy standardową opcję Kup dla produktu.W sekcji Opcja zakupu podaj te informacje:
- Identyfikator opcji zakupu: wpisz identyfikator opcji zakupu. Na przykład:
buy. - Typ zakupu: wybierz Kup.
- (Opcjonalnie) Tagi: dodaj tagi dotyczące tej opcji zakupu.
- (Opcjonalnie) Kliknij Opcje zaawansowane, aby skonfigurować opcje zaawansowane. Na potrzeby tego ćwiczenia możesz pominąć konfigurację opcji zaawansowanych.
- Identyfikator opcji zakupu: wpisz identyfikator opcji zakupu. Na przykład:
- W sekcji Dostępność i ceny kliknij Ustaw ceny > Edytuj zbiorczo ceny.
- Wybierz opcję Kraj / region. Spowoduje to zaznaczenie wszystkich regionów.
- Kliknij Dalej. Otworzy się okno, w którym możesz wpisać cenę. Wpisz 10 PLN, a potem kliknij Zastosuj.
- Kliknij Zapisz, a następnie Aktywuj. Spowoduje to utworzenie i aktywowanie opcji zakupu.
Na potrzeby tego ćwiczenia w Codelabs utwórz 3 dodatkowe produkty kupowane raz o tych identyfikatorach:
- consumable_product_01
- consumable_product_02
- consumable_product_03
Przykładowa aplikacja jest skonfigurowana tak, aby używać tych identyfikatorów produktów. Możesz podać różne identyfikatory produktów. W takim przypadku musisz zmodyfikować przykładową aplikację, aby używała podanego identyfikatora produktu.
Otwórz przykładową aplikację w Konsoli Google Play i kliknij Zarabianie w Google Play > Produkty > Produkty jednorazowe. Następnie kliknij Utwórz produkt kupowany raz i powtórz kroki od 3 do 9.
Film o tworzeniu produktu kupowanego raz
Poniższy przykładowy film pokazuje opisane wcześniej kroki tworzenia produktu kupowanego raz.
4. Integracja z PBL
Teraz zobaczysz, jak zintegrować aplikację z Biblioteką płatności w Play (PBL). W tej sekcji opisujemy ogólne etapy integracji i podajemy fragment kodu dla każdego z nich. Możesz użyć tych fragmentów jako wskazówek do wdrożenia rzeczywistej integracji.
Aby zintegrować aplikację z PBL, wykonaj te czynności:
- Dodaj zależność Biblioteki płatności w Play do przykładowej aplikacji.
dependencies { val billing_version = "8.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") } - Zainicjuj BillingClient. BillingClient to pakiet SDK klienta, który znajduje się w aplikacji i komunikuje się z Biblioteką płatności w Play. Poniższy fragment kodu pokazuje, jak zainicjować klienta rozliczeń.
protected BillingClient createBillingClient() { return BillingClient.newBuilder(activity) .setListener(purchasesUpdatedListener) .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) .enableAutoServiceReconnection() .build(); } - Połącz się z Google Play.Poniższy fragment kodu pokazuje, jak połączyć się z Google Play.
public void startBillingConnection(ImmutableList<Product> productList) { Log.i(TAG, "Product list sent: " + productList); Log.i(TAG, "Starting connection"); billingClient.startConnection( new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { // Query product details to get the product details list. queryProductDetails(productList); } else { // BillingClient.enableAutoServiceReconnection() will retry the connection on // transient errors automatically. // We don't need to retry on terminal errors (e.g., BILLING_UNAVAILABLE, // DEVELOPER_ERROR). Log.e(TAG, "Billing connection failed: " + billingResult.getDebugMessage()); Log.e(TAG, "Billing response code: " + billingResult.getResponseCode()); } } @Override public void onBillingServiceDisconnected() { Log.e(TAG, "Billing Service connection lost."); } }); } - Pobierz szczegóły produktu kupowanego raz.Po zintegrowaniu aplikacji z PBL musisz pobrać szczegóły produktu kupowanego raz do aplikacji. Poniższy fragment kodu pokazuje, jak pobrać szczegóły produktu kupowanego raz w aplikacji.
Pobieranieprivate void queryProductDetails(ImmutableList<Product> productList) { Log.i(TAG, "Querying products for: " + productList); QueryProductDetailsParams queryProductDetailsParams = QueryProductDetailsParams.newBuilder().setProductList(productList).build(); billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { @Override public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) { // check billingResult Log.i(TAG, "Billing result after querying: " + billingResult.getResponseCode()); // process returned productDetailsList Log.i( TAG, "Print unfetched products: " + productDetailsResponse.getUnfetchedProductList()); setupProductDetailsMap(productDetailsResponse.getProductDetailsList()); billingServiceClientListener.onProductDetailsFetched(productDetailsMap); } }); }ProductDetailsdaje odpowiedź podobną do tej:{ "productId": "consumable_product_01", "type": "inapp", "title": "Shadow Coat (Yolo's Realm | Play Samples)", "name": "Shadow Coat", "description": "A sleek, obsidian coat for stealth and ambushes", "skuDetailsToken": "<---skuDetailsToken--->", "oneTimePurchaseOfferDetails": {}, "oneTimePurchaseOfferDetailsList": [ { "priceAmountMicros": 1990000, "priceCurrencyCode": "USD", "formattedPrice": "$1.99", "offerIdToken": "<--offerIdToken-->", "purchaseOptionId": "buy", "offerTags": [] } ] }, { "productId": "consumable_product_02", "type": "inapp", "title": "Emperor Den (Yolo's Realm | Play Samples)", "name": "Emperor Den", "description": "A fair lair glowing with molten rock and embers", "skuDetailsToken": "<---skuDetailsToken--->", "oneTimePurchaseOfferDetails": {}, "oneTimePurchaseOfferDetailsList": [ { "priceAmountMicros": 2990000, "priceCurrencyCode": "USD", "formattedPrice": "$2.99", "offerIdToken": "<--offerIdToken-->", "purchaseOptionId": "buy", "offerTags": [] } ] } - Uruchom proces płatności.
public void launchBillingFlow(String productId) { ProductDetails productDetails = productDetailsMap.get(productId); if (productDetails == null) { Log.e( TAG, "Cannot launch billing flow: ProductDetails not found for productId: " + productId); billingServiceClientListener.onBillingResponse( BillingResponseCode.ITEM_UNAVAILABLE, BillingResult.newBuilder().setResponseCode(BillingResponseCode.ITEM_UNAVAILABLE).build()); return; } ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder().setProductDetails(productDetails).build()); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); billingClient.launchBillingFlow(activity, billingFlowParams); } - wykrywać i przetwarzać zakupy, W ramach tego kroku musisz:
- Weryfikowanie zakupu
- Przyznawanie uprawnień użytkownikowi
- Powiadomienie użytkownika
- Powiadamianie Google o procesie zakupu
private void handlePurchase(Purchase purchase) { // Step 1: Send the purchase to your secure backend to verify the purchase following // https://developer.android.com/google/play/billing/security#verify // Step 2: Update your entitlement storage with the purchase. If purchase is // in PENDING state then ensure the entitlement is marked as pending and the // user does not receive benefits yet. It is recommended that this step is // done on your secure backend and can combine in the API call to your // backend in step 1. // Step 3: Notify the user using appropriate messaging. if (purchase.getPurchaseState() == PurchaseState.PURCHASED) { for (String product : purchase.getProducts()) { Log.d(TAG, product + " purchased successfully! "); } } // Step 4: Notify Google the purchase was processed. // For one-time products, acknowledge the purchase. // This sample app (client-only) uses billingClient.acknowledgePurchase(). // For consumable one-time products, consume the purchase // This sample app (client-only) uses billingClient.consumeAsync() // If you have a secure backend, you must acknowledge purchases on your server using the // server-side API. // See https://developer.android.com/google/play/billing/security#acknowledge if (purchase.getPurchaseState() == PurchaseState.PURCHASED && !purchase.isAcknowledged()) { if (shouldConsume(purchase)) { ConsumeParams consumeParams = ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build(); billingClient.consumeAsync(consumeParams, consumeResponseListener); } else { AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() .setPurchaseToken(purchase.getPurchaseToken()) .build(); billingClient.acknowledgePurchase( acknowledgePurchaseParams, acknowledgePurchaseResponseListener); } } }
5. Analizowanie rezygnacji z zakupu
W tym laboratorium skupiliśmy się na odpowiedziach Biblioteki płatności w Play w ograniczonych scenariuszach, takich jak USER_CANCELLED, BILLING_UNAVAILABLE, OK i ITEM_ALREADY_OWNED. System Płatności w Play może jednak zwracać 13 różnych kodów odpowiedzi, które mogą być wywoływane przez różne czynniki.
W tej sekcji znajdziesz szczegółowe informacje o przyczynach błędów USER_CANCELLED i BILLING_UNAVAILABLE oraz proponowane działania, które możesz podjąć, aby je naprawić.
Kod błędu odpowiedzi USER_CANCELED
Ten kod odpowiedzi oznacza, że użytkownik opuścił interfejs procesu zakupu przed jego zakończeniem.
Prawdopodobne przyczyny | Jakie działania możesz podjąć? |
|
|
Kod błędu odpowiedzi BILLING_UNAVAILABLE
Ten kod odpowiedzi oznacza, że nie można było dokończyć zakupu z powodu problemu z dostawcą usług płatniczych użytkownika lub wybraną przez niego formą płatności. Na przykład karta kredytowa użytkownika wygasła lub użytkownik znajduje się w kraju, w którym usługa nie jest obsługiwana. Ten kod nie wskazuje błędu w samym systemie Płatności w Play.
Prawdopodobne przyczyny | Jakie działania możesz podjąć? |
|
|
Strategie ponawiania prób w przypadku kodów błędów odpowiedzi
Skuteczne strategie ponawiania prób w przypadku błędów, które można naprawić, w Bibliotece płatności w Play (PBL) różnią się w zależności od kontekstu, np. interakcji użytkownika w sesji (takich jak podczas zakupu) w porównaniu z operacjami w tle (takimi jak sprawdzanie zakupów po wznowieniu działania aplikacji). Wdrożenie tych strategii jest ważne, ponieważ niektóre BillingResponseCode wartości oznaczają tymczasowe problemy, które można rozwiązać, ponawiając próbę, a inne są trwałe i nie wymagają ponawiania prób.
W przypadku błędów napotkanych podczas sesji użytkownika zalecana jest prosta strategia ponawiania z ustaloną maksymalną liczbą prób, aby zminimalizować zakłócenia w korzystaniu z usługi. Z kolei w przypadku operacji w tle, takich jak potwierdzanie nowych zakupów, które nie wymagają natychmiastowego wykonania, zalecane jest wzrastający czas do ponowienia.
Szczegółowe informacje o poszczególnych kodach odpowiedzi i odpowiednich zalecanych strategiach ponawiania znajdziesz w artykule Obsługa kodów odpowiedzi BillingResult.
6. Dalsze kroki
- Dowiedz się, jak zmaksymalizować integrację płatności w Google Play.
- Gdy użytkownicy zaczną kupować te produkty, pamiętaj, aby postępować zgodnie ze sprawdzonymi metodami weryfikacji i przetwarzania zakupów na bezpiecznym backendzie.
Dokumentacja
7. Gratulacje!
Gratulacje! Udało Ci się utworzyć nowy produkt kupowany raz w Konsoli Google Play, przetestować kody odpowiedzi dotyczące płatności i przeanalizować przyczyny rezygnacji z zakupu.
Ankieta
Twoja opinia na temat tego laboratorium jest dla nas bardzo cenna. Poświęć kilka minut na wypełnienie naszej ankiety.