W tym temacie dowiesz się, jak obsługiwać zdarzenia cyklu życia subskrypcji, takie jak odnowienie i wygaśnięcie. Opisuje on też dodatkowe funkcje subskrypcji, takie jak oferowanie promocji i umożliwianie użytkownikom zarządzania własnymi subskrypcjami.
Jeśli nie masz skonfigurowanych usług subskrypcji w przypadku swojej aplikacji, przeczytaj artykuł Tworzenie i konfigurowanie produktów.
Przegląd subskrypcji
Subskrypcja reprezentuje korzyści, z których użytkownicy mogą korzystać w danym okresie. Subskrypcja może na przykład umożliwiać użytkownikowi dostęp do usługi strumieniowania muzyki.
W tej samej aplikacji możesz mieć kilka subskrypcji, które reprezentują różne zestawy korzyści lub różne poziomy jednego zestawu (np. „srebrny” i „złoty”).
Korzystając z abonamentów podstawowych i ofert, możesz utworzyć wiele konfiguracji dla tego samego abonamentu. Możesz na przykład utworzyć ofertę dla nowych użytkowników, którzy nigdy nie subskrybowali Twojej aplikacji, albo ofertę przejścia na wyższą wersję dla użytkowników, którzy już ją subskrybują.
Szczegółowe informacje o subskrypcjach, abonamentach podstawowych i ofertach znajdziesz w dokumentacji w Centrum pomocy Konsoli Play.
Integracja z abonamentami przedpłaconymi
Abonamenty przedpłacone nie odnawiają się automatycznie po wygaśnięciu. Aby bez przerwy przedłużać ważność subskrypcji, użytkownik musi doładować abonament przedpłacony tej samej subskrypcji.
W przypadku doładowań uruchom proces płatności tak samo jak w przypadku pierwotnego zakupu. Nie musisz wskazywać, że zakup jest doładowaniem.
Doładowania abonamentów przedpłaconych zawsze korzystają z trybu wymiany CHARGE_FULL_PRICE
i nie musisz go konfigurować bezpośrednio.
Użytkownik zostanie natychmiast obciążony opłatą za pełny okres rozliczeniowy, a jego upoważnienie zostanie przedłużone o okres podany w doliczeniu.
Po doładowaniu nowe pola obiektu wyniku Purchase
są aktualizowane tak, aby odzwierciedlały ostatni zakup doładowania:
- Identyfikator zamówienia
- Czas zakupu
- Podpis
- Token zakupu
- Potwierdzona
Te pola Purchase
zawsze zawierają te same dane, które znajdowały się w pierwotnym zakupie:
- Nazwa pakietu
- Stan zakupu
- Produkty
- Automatyczne odnawianie
Potwierdzenie zakupu przedpłaconego
Podobnie jak w przypadku subskrypcji odnawianych automatycznie, po zakupie musisz potwierdzić swoją tożsamość za abonament przedpłacony. Musisz potwierdzić zarówno początkowy zakup, jak i doładowania. Więcej informacji znajdziesz w artykule Przetwarzanie zakupów.
Ze względu na krótki czas obowiązywania subskrypcji przedpłaconej ważne jest jak najszybsze potwierdzenie zakupu.
Abonamenty przedpłacone z okresem co najmniej tygodnia należy potwierdzić w ciągu 3 dni.
Abonamenty przedpłacone o czasie trwania krótszym niż tydzień muszą zostać potwierdzone w okresie połowy okresu obowiązywania abonamentu. Na przykład deweloperzy mają 1, 5 dnia na zaakceptowanie 3-dniowego abonamentu przedpłaconego.
Integracja subskrypcji rat
Subskrypcja ratalna to typ subskrypcji, w ramach której użytkownicy płacą za subskrypcję w wielu ratach przez określony czas, zamiast z góry.
Dodatkowe uwagi dotyczące subskrypcji ratalnych:
- Dostępność w poszczególnych krajach: funkcja subskrypcji ratalnych jest dostępna tylko w Brazylii, Francji, Hiszpanii i Hiszpanii (najnowszą dostępność znajdziesz w Konsoli).
- Ustawianie ceny: gdy ustawiasz w konsoli cenę subskrypcji ratalnej, cena odzwierciedla miesięczną kwotę płatności. W połączeniu z ustawionym okresem zobowiązania generuje to łączną kwotę subskrypcji widoczną na ekranie zakupu.
- Okres zobowiązania: łączny czas początkowego zobowiązania za subskrypcję, w którym wymagane są płatności miesięczne. Jeśli na przykład abonament podstawowy ma 15-miesięczny okres zobowiązania, użytkownik dokona w tym okresie 15 płatności miesięcznie.
- Odnawianie: w kontekście subskrypcji ratalnych „odnowienie” oznacza zakończenie okresu zobowiązania albo okres początkowego zobowiązania lub kolejny okres zobowiązania. Po początkowej rejestracji pierwsze odnowienie nastąpi po zakończeniu całego początkowego okresu zobowiązania. Kolejne odnowienia mają miejsce po zakończeniu każdego kolejnego okresu zobowiązania. Typy odnowienia w przypadku subskrypcji ratalnej mogą być „automatycznie odnawiane co miesiąc” lub „automatyczne odnawianie na ten sam okres”. W przypadku opcji „automatycznie odnawiane co miesiąc” nie ma kolejnych zobowiązań, a abonament działa jak subskrypcja miesięczna, w której każda miesięczna opłata za subskrypcję stanowi odnowienie.
- Okres rozliczeniowy: w kontekście subskrypcji ratalnych oznacza cykliczny odstęp czasu, w którym dokonywane są poszczególne płatności, zgodnie z ustawieniami abonamentu podstawowego.
- Zmiana abonamentu w porównaniu ze zmianami cen: w przypadku zmian cen lub anulowania cen zobowiązanie jest mocne. Oznacza to, że jeśli użytkownik chce anulować subskrypcję, a deweloper chce zmienić cenę, zmiana wejdzie w życie z końcem okresu zobowiązania. Jeśli chodzi o zmiany abonamentu, zobowiązanie nie jest trwałe. Oznacza to, że zmiana abonamentu nie musi czekać do końca okresu zobowiązania. Zmiana wejdzie w życie od razu lub w dniu kolejnej płatności zgodnie z ustawionym trybem wymiany.
- Zmiana abonamentu na ten sam abonament: nie można zmienić abonamentu podstawowego z rat na abonament podstawowy tej samej subskrypcji w ratach.
Powiadomienia w czasie rzeczywistym dla deweloperów (RTDN):
SUBSCRIPTION_CANCELLATION_SCHEDULED
powiadomienie w czasie rzeczywistym jest wysyłane natychmiast po anulowaniu zainicjowanego przez użytkownika, jeśli w okresie zobowiązania pozostały płatności. Anulowanie oczekuje na realizację dopiero z końcem okresu zobowiązania. Następnie, jeśli użytkownik nie przywróci połączeń RTDNSUBSCRIPTION_CANCELED
iSUBSCRIPTION_EXPIRED
, po zakończeniu okresu zobowiązania.Wypłaty / realizowanie przychodów: wypłaty dla deweloperów będą realizowane, gdy użytkownicy będą dokonywać comiesięcznych płatności, zgodnie z warunkami wszystkich innych subskrypcji. Deweloperzy nie otrzymują płatności z góry, gdy użytkownik aktywuje subskrypcję ratalną.
Pobieranie zaległych płatności: jeśli użytkownik nie dokona żadnej płatności za abonament ratalny, ani Google, ani Deweloper nie będą próbowali pobrać od niego żadnych brakujących lub zaległych płatności. Wyjątkiem mogą być okresowe ponawianie płatności przez Google w okresie prolongaty lub w okresie zawieszenia konta zgodnie ze swoimi zwykłymi procedurami ponawiania próby płatności. Google nie ponosi odpowiedzialności wobec Dewelopera za żadne nieuregulowane raty.
Dostępność Biblioteki płatności w Play: pole
installmentDetails
jest dostępne tylko w przypadku PBL 7 lub nowszej wersji. W przypadku PBL 5 i nowszych abonament ratalny jest zwracany za pomocąqueryProductDetails()
, ale subskrypcja nie będzie zawierać szczegółowych informacji o ratach, takich jak liczba zobowiązań na raty zapłacone w ramach abonamentu.
Używaj precyzyjnych linków, aby umożliwić użytkownikom zarządzanie subskrypcją
Na ekranie ustawień i ustawień aplikacji powinien znajdować się link umożliwiający użytkownikom zarządzanie subskrypcjami, co pozwoli Ci włączyć do naturalnego wyglądu i stylu aplikacji.
W przypadku trwających subskrypcji możesz dołączyć precyzyjny link z aplikacji do centrum subskrypcji w Google Play. Znajdziesz go w polu subscriptionState
zasobu subskrypcji.
Z tego powodu możesz utworzyć precyzyjne linki do centrum subskrypcji w Sklepie Play na kilka sposobów.
Link do centrum subskrypcji
Użyj tego adresu URL, aby przekierować użytkowników na stronę ze wszystkimi subskrypcjami, tak jak na ilustracji 1 i 2:
https://play.google.com/store/account/subscriptions
![Na ekranie subskrypcji w Sklepie Play widać stan wszystkich subskrypcji rozliczanych przez Google Play.](https://developer.android.google.cn/static/images/google/play/billing/sub_center_general.png?authuser=6&hl=pl)
![Kliknij subskrypcję, aby wyświetlić dodatkowe informacje.](https://developer.android.google.cn/static/images/google/play/billing/sub_management_mock_general.png?authuser=6&hl=pl)
Ten precyzyjny link może pomóc użytkownikowi przywrócić anulowaną subskrypcję w centrum subskrypcji w Sklepie Play.
Link do konkretnej strony zarządzania subskrypcjami (zalecane)
Aby podać bezpośredni link do strony zarządzania aktualną subskrypcją, podaj nazwę pakietu i productId
powiązane z kupioną subskrypcją. Aby automatycznie określić productId
w przypadku istniejącej subskrypcji, wyślij zapytanie do backendu aplikacji lub wywołaj BillingClient.queryPurchasesAsync()
w celu pobrania listy subskrypcji powiązanych z konkretnym użytkownikiem. Każda subskrypcja zawiera odpowiadające jej productId
informacje o stanie subskrypcji.
Każdy obiekt SubscriptionPurchaseLineItem
powiązany z zakupem subskrypcji zawiera wartość productId
powiązaną z subskrypcją, którą użytkownik kupił w danym elemencie zamówienia.
Użyj tego adresu URL, aby przekierowywać użytkowników do określonego ekranu zarządzania subskrypcją. Zastąp „identyfikator-twojego-produktu” i „pakiet-aplikacji” odpowiednio ciągiem productId
i nazwą pakietu aplikacji:
https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
Może on zarządzać formami płatności i korzystać z funkcji, takich jak anulowanie, ponowna subskrypcja i wstrzymywanie.
Zezwalaj użytkownikom na przejście na wyższą lub niższą wersję usługi albo zmianę abonamentu
Możesz zaoferować obecnym subskrybentom różne opcje zmiany abonamentu, który lepiej odpowiada ich potrzebom:
- Jeśli sprzedajesz wiele poziomów subskrypcji, np. „podstawowy” i „premium”, możesz zezwolić użytkownikom na przełączanie się między nimi, kupując abonament podstawowy lub ofertę innego abonamentu.
- Możesz zezwolić użytkownikom na zmianę bieżącego okresu rozliczeniowego, na przykład przejście z abonamentu miesięcznego na roczny.
- Możesz też zezwolić użytkownikom na przełączanie się między abonamentem odnawianym automatycznie a abonamentem przedpłaconym.
Możesz zachęcić do tych zmian, przesyłając oferty subskrypcji, które zapewniają zniżkę kwalifikującym się użytkownikom. Możesz na przykład utworzyć ofertę, która zapewnia 50% zniżki w pierwszym roku, jeśli przechodzisz z abonamentu miesięcznego na roczny, i ogranicz ją do użytkowników, którzy mają abonament miesięczny i nie dokonali zakupu. Więcej informacji o kryteriach kwalifikacji ofert znajdziesz w Centrum pomocy.
Rysunek 3 przedstawia przykładową aplikację z 3 różnymi abonamentami:
![Ta aplikacja ma 3 poziomy subskrypcji.](https://developer.android.google.cn/static/images/google/play/billing/plan_change_inapp.png?authuser=6&hl=pl)
Aplikacja może wyświetlić ekran podobny do ilustracji 3, aby umożliwić użytkownikom zmianę subskrypcji. We wszystkich przypadkach użytkownicy muszą dokładnie wiedzieć, jaki jest ich obecny abonament i jakie możliwości mogą zmienić.
Gdy użytkownicy zdecydują się przejść na wyższą lub niższą wersję subskrypcji albo na inny, musisz wybrać tryb wymiany, który określa sposób stosowania proporcjonalnej wartości bieżącego płatnego okresu rozliczeniowego i kiedy nastąpi zmiana uprawnień.
Tryby wymiany
W tabeli poniżej znajdziesz dostępne tryby wymiany i przykładowe wykorzystanie, a także liczbę płatności uznanych za opłacone.
Tryb wymiany |
Opis |
Przykład użycia |
Zobowiązane płatności zarejestrowane jako opłacone (w przypadku wymiany subskrypcji ratalnej) |
|
Subskrypcja zostanie natychmiast zmieniona na wyższą lub niższą. Pozostały czas jest dostosowywany na podstawie różnicy w cenie i zaliczany na poczet nowej subskrypcji przez przesunięcie terminu następnego okresu rozliczeniowego. Jest to jego ustawienie domyślne. |
Przejdź na droższy poziom bez dodatkowych opłat. |
0 |
|
Subskrypcja zostanie uaktualniona natychmiast, a cykl rozliczeniowy pozostanie bez zmian. Użytkownik zostanie obciążony różnicą w cenie za pozostały okres. Uwaga: ta opcja jest dostępna tylko w przypadku przejścia na wyższą wersję subskrypcji, w przypadku której rośnie cena za jednostkę czasu. |
Przejdź na droższy poziom bez zmiany daty rozliczenia. |
1 |
|
Subskrypcja zostanie natychmiast zmieniona na wyższą lub niższą, a użytkownik zostanie natychmiast obciążony pełną ceną za nowe uprawnienie. Pozostała wartość z poprzedniej subskrypcji zostanie przeniesiona dla tego samego uprawnienia lub zostanie obliczona proporcjonalnie za czas przy przechodzeniu na inne uprawnienie. Uwaga: jeśli nowa subskrypcja jest objęta bezpłatnym okresem próbnym lub ofertą dla nowych użytkowników, w momencie przechodzenia na wyższą lub niższą wersję użytkownik jest obciążany 0 USD lub ceną oferty dla nowych użytkowników (w zależności od tego, która z nich ma zastosowanie). |
Przejdź z krótszego na dłuższy okres rozliczeniowy. |
1 (Uwaga: wartość 0, jeśli nowa subskrypcja jest objęta bezpłatną wersją próbną). |
|
Subskrypcja zostanie natychmiast zmieniona na wyższą lub niższą, a nowa cena zostanie naliczona w momencie odnowienia subskrypcji. Cykl rozliczeniowy pozostaje bez zmian. |
Przejdź na wyższy poziom subskrypcji, zachowując pozostały bezpłatny okres. |
0 |
|
Subskrypcja zostanie zmieniona na wyższą lub niższą tylko w przypadku odnowienia subskrypcji, ale nowy zakup zostanie wystawiony natychmiast z datą rozpoczęcia przypadającą w przyszłości dla nowego uprawnienia. Deweloper może więc zezwolić użytkownikom na wprowadzenie dodatkowych zmian. Mogą na przykład przywrócić pierwotny plan lub zainicjować nową zmianę abonamentu odroczonego. Uwaga: w przypadku subskrypcji ratalnych zmiana abonamentu nastąpi na początku następnej daty płatności. |
Przejdź na tańszy poziom. |
1 |
Więcej informacji o różnych zastosowaniach służących do sprzedaży dodatkowej i odzyskiwania użytkowników w ramach ofert przejścia na wyższą lub niższą wersję znajdziesz w przewodniku po ofertach i promocjach.
Ustawianie trybu wymiany w przypadku zakupu
W zależności od Twoich preferencji i logiki biznesowej możesz użyć różnych trybów zastępowania w przypadku różnych rodzajów przenoszenia subskrypcji. Z tej sekcji dowiesz się, jak ustawić tryb zastępczy w przypadku zmiany subskrypcji oraz jakie obowiązują ograniczenia.
Ponowne subskrybowanie lub zmiana abonamentu w ramach tej samej subskrypcji
W Konsoli Google Play możesz określić domyślny tryb wymiany. To ustawienie pozwala określić, kiedy obecni subskrybenci mają być obciążani kosztami, jeśli kupią inny abonament podstawowy lub inną ofertę w ramach tej samej subskrypcji albo ponownie wykupią subskrypcję po anulowaniu. Dostępne opcje to Obciążenie natychmiast (równowartość CHARGE_FULL_PRICE
) i Obciążenie w dniu następnego rozliczenia, stanowiące odpowiednik WITHOUT_PRORATION
. To jedyne odpowiednie tryby wymiany podczas przełączania abonamentów podstawowych w ramach tej samej subskrypcji.
Jeśli na przykład wdrażasz ofertę odzyskiwania tego samego abonamentu po anulowaniu subskrypcji przez użytkownika, ale przed zakończeniem subskrypcji, możesz przetworzyć nowy zakup jako zwykły zakup bez podawania żadnych wartości w polu SubscriptionUpdateParams
. System używa domyślnego trybu wymiany skonfigurowanego w subskrypcji i automatycznie obsługuje przejście ze starego zakupu na nowy.
Przełączanie subskrypcji między subskrypcjami lub zastąpienie domyślnego trybu wymiany
Jeśli użytkownik zmienia usługi subskrypcji – kupują inną subskrypcję – lub jeśli z jakiegoś powodu chcesz zastąpić domyślny tryb wymiany, określ proporcjonalną wartość procentową w czasie działania w parametrach procesu zakupu.
Aby prawidłowo podać funkcję SubscriptionUpdateParams
w ramach konfiguracji procesu zakupu w środowisku wykonawczym, pamiętaj o tych ograniczeniach:
- Jedynym dozwolonym trybem wymiany jest
CHARGE_FULL_PRICE
w przypadku przejścia na wyższą, niższą lub zainicjowaną zmianę subskrypcji z tej samej subskrypcji na przedpłaconą z abonamentu przedpłaconego, automatycznie odnawianego lub ratalnych. Jeśli określisz inny tryb wymiany, zakup się nie powiedzie, a użytkownik zobaczy komunikat o błędzie. - Gdy zmieniasz swój abonament w ramach tej samej subskrypcji na automatycznie odnawiany z abonamentu przedpłaconego lub automatycznie odnawianego, dostępne tryby proporcjonalnego podziału to
CHARGE_FULL_PRICE
iWITHOUT_PRORATION
. Jeśli określisz inny tryb proporcjonalności, zakup się nie powiedzie, a użytkownik zobaczy komunikat o błędzie. - Zmiana abonamentu w ramach tej samej subskrypcji z abonamentu podstawowego na raty na abonament podstawowy bez rat jest niedozwolona.
Przykłady zastępowania i zachowania
Aby zrozumieć, jak działa każdy z trybów proporcjonalnych, weź pod uwagę następujący scenariusz:
Samwise ma subskrypcję treści online w aplikacji Country Gardener. Posiada miesięczną subskrypcję treści na poziomie 1, która zawiera tylko tekst. Ta subskrypcja kosztuje 2 USD miesięcznie i jest odnawiana pierwszego dnia miesiąca.
15 kwietnia Samwise zdecydował się przejść na roczną wersję subskrypcji Poziomu 2, która obejmuje aktualizacje filmów i kosztuje 36 USD rocznie.
Podczas przechodzenia na wyższą wersję deweloper wybiera tryb proporcjonalnego okresu subskrypcji. Na poniższej liście opisujemy, jak poszczególne tryby proporcjonalne wpływają na subskrypcję Samwise:
WITH_TIME_PRORATION
Subskrypcja poziomu 1 Samwise kończy się natychmiast. Ponieważ zapłacił za cały miesiąc (1–30 kwietnia), ale w połowie okresu subskrypcji przeszedł na wersję płatną, do jego nowej subskrypcji zostanie zastosowana połowa miesięcznej subskrypcji (1 USD). Jednak nowa subskrypcja kosztuje 36 zł rocznie, dlatego saldo środków w wysokości 1 zł wystarczy na 10 dni (16–25 kwietnia). Dlatego 26 kwietnia zostanie on obciążony opłatą za nową subskrypcję w wysokości 36 zł, a 26 kwietnia każdego następnego roku zostanie naliczona opłata w wysokości 36 zł.
Wywołaj metodę PurchasesUpdatedListener
aplikacji w momencie zakupu, aby pobrać nowy zakup w ramach wywołania queryPurchasesAsync()
. Backend od razu otrzymuje powiadomienie SUBSCRIPTION_PURCHASED
dla deweloperów w czasie rzeczywistym.
CHARGE_PRORATED_PRICE
Możesz korzystać z tego trybu, ponieważ cena subskrypcji poziomu 2 za jednostkę czasu (36 USD/rok = 3 USD/miesiąc) jest wyższa niż cena subskrypcji Poziomu 1 za jednostkę czasu (2 USD/miesiąc). Subskrypcja poziomu 1 Samwise kończy się natychmiast. Ponieważ zapłacił za cały miesiąc, ale zużył tylko jego połowę, połowa miesięcznej subskrypcji (1 USD) zostaje doliczona do nowej subskrypcji. Nowa subskrypcja kosztuje jednak 36 zł/rok, więc pozostałe 15 dni kosztuje 1,50 zł, więc zapłaci za nową subskrypcję 0,50 zł. 1 maja zostanie obciążony opłatą za nowy poziom subskrypcji w wysokości 36 zł, a kolejne 36 zł – 1 maja każdego roku.
Wywołaj metodę PurchasesUpdatedListener
aplikacji w momencie zakupu. Umożliwi Ci to pobranie nowego zakupu w ramach wywołania queryPurchasesAsync()
. Backend od razu otrzymuje powiadomienie SUBSCRIPTION_PURCHASED
dla deweloperów w czasie rzeczywistym.
WITHOUT_PRORATION
Subskrypcja Poziomu 1 Samwisego zostanie natychmiast zmieniona na poziom 2 bez dodatkowych opłat, a 1 maja zostanie obciążony opłatą w wysokości 36 USD za nowy poziom subskrypcji i kolejnymi 36 USD – 1 maja każdego roku kolejnego.
Wywołaj metodę PurchasesUpdatedListener
aplikacji w momencie zakupu. Umożliwi Ci to pobranie nowego zakupu w ramach wywołania queryPurchasesAsync()
. Backend od razu otrzymuje powiadomienie SUBSCRIPTION_PURCHASED
dla deweloperów w czasie rzeczywistym.
DEFERRED
Subskrypcja poziomu 1 Samwise wygaśnie do 30 kwietnia. 1 maja zacznie obowiązywać subskrypcja poziomu 2, a Samwise zostanie obciążony opłatą za nowy poziom subskrypcji w wysokości 36 USD.
Wywołaj metodę PurchasesUpdatedListener
aplikacji w momencie zakupu. Umożliwi Ci to pobranie nowego zakupu w ramach wywołania queryPurchasesAsync()
. Backend od razu otrzymuje powiadomienie SUBSCRIPTION_PURCHASED
dla deweloperów w czasie rzeczywistym. Zakup musisz przetwarzać w taki sam sposób jak każdy inny zakup. W szczególności musisz potwierdzić dokonanie nowego zakupu. Zwróć uwagę, że pole startTime
nowej subskrypcji jest wypełniane w momencie wejścia w życie zastąpienia, co ma miejsce po wygaśnięciu starej subskrypcji. W takim przypadku otrzymasz wtedy SUBSCRIPTION_RENEWED
czasu RTDN dla nowego abonamentu. Więcej informacji o zachowaniu ReplacementMode.DEFERRED
znajdziesz w artykule Obsługa odroczonej wymiany.
CHARGE_FULL_PRICE
Subskrypcja poziomu 1 Samwise kończy się natychmiast. Jego subskrypcja poziomu 2 rozpoczyna się dzisiaj, a jego stawka wynosi 36 zł. Ponieważ zapłacił za cały miesiąc, ale zużył tylko jego połowę, do jego nowej subskrypcji zostanie przypisana połowa miesięcznej subskrypcji (1 USD). Nowa subskrypcja kosztuje 36 USD rocznie, więc do okresu subskrypcji (około 10 dni) zostanie dodany 1/36 dnia roku. W związku z tym następna opłata zostanie naliczona za rok i za 10 dni od dzisiaj i wyniesie 36 zł. Potem jest obciążany opłatą w wysokości 36 USD rocznie.
Zanim wybierzesz tryb proporcjonalnego udostępniania, zapoznaj się z naszymi zaleceniami dotyczącymi wymiany.
Aktywowanie zmian w subskrypcjach w aplikacji
W swojej aplikacji możesz oferować użytkownikom przejście na wyższą lub niższą wersję usługi, wykonując te same czynności co w przypadku rozpoczynania procesu zakupu. Jednak podczas przechodzenia na wyższą lub niższą wersję usługi musisz podać szczegółowe informacje o obecnej subskrypcji, przyszłej (natychmiastowej lub niższej) subskrypcji oraz o trybie wymiany, jak widać w tym przykładzie:
Kotlin
val offerToken = productDetails .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken() val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(offerToken) .build() ) ).setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken("old_purchase_token") .setSubscriptionReplacementMode( BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE ) .build() ).build() billingClient.launchBillingFlow( activity, billingParams ) // ...
Java
String offerToken = productDetails .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken(); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmuableList.of( ProductDetailsParams.newBuilder() // fetched via queryProductDetailsAsync .setProductDetails(productDetails) // offerToken can be found in // ProductDetails=>SubscriptionOfferDetails .setOfferToken(offerToken) .build())) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in Purchase#getPurchaseToken .setOldPurchaseToken("old_purchase_token") .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE) .build()) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams); // ...
Rekomendacje dotyczące wymiany
W tabeli poniżej znajdziesz różne scenariusze proporcjonalne oraz zalecane przez nas zalecenia:
Scenariusz | Zalecany tryb wymiany | Wynik |
---|---|---|
Przejście na droższy poziom | CHARGE_PRORATED_PRICE |
Użytkownik natychmiast uzyska dostęp przy zachowaniu tego samego okresu rozliczeniowego. |
Przechodzenie na tańszy poziom | DEFERRED |
Użytkownik zapłacił już za droższy poziom, więc zachowa dostęp do następnej daty płatności. |
Przejście na wersję płatną w trakcie bezpłatnego okresu próbnego | WITHOUT_PRORATION |
Użytkownik zachowuje dostęp do bezpłatnej wersji próbnej, ale do końca tego okresu przechodzi na wyższy poziom. |
Przejście na wersję płatną podczas bezpłatnego okresu próbnego – zakończenie dostępu do bezpłatnego okresu próbnego | CHARGE_PRORATED_PRICE |
Użytkownik natychmiast uzyska dostęp do nowego poziomu, ale nie korzysta już z bezpłatnego okresu próbnego. |
Obsługa zakupów zmiany subskrypcji
Zmiany abonamentu to nowe zakupy ze wszystkimi warunkami i celami. Należy je przetworzyć i zaakceptować po zakończeniu procesu rozliczeniowego. Oprócz właściwego przetworzenia nowego zakupu musisz wycofać zakup, który ma zostać zastąpiony.
Zachowanie w aplikacji jest takie samo jak w przypadku każdego nowego zakupu. Aplikacja otrzymuje
skuteczność nowego zakupu w usłudze PurchasesUpdatedListener
, a nowy zakup jest dostępny w queryPurchasesAsync
.
Interfejs Google Play Developer API zwraca wartość linkedPurchaseToken
w zasobie subskrypcji, gdy zakup zastępuje istniejący. Pamiętaj, aby unieważnić token podany w linkedPurchaseToken
, aby mieć pewność, że nie użyjesz starego tokena do uzyskania dostępu do Twoich usług. Informacje o obsłudze zakupów związanych z przechodzeniem na wyższą i niższą wersję usługi znajdziesz w artykule Przechodzenie na wyższą i niższą wersję usługi oraz ponowna rejestracja.
Gdy otrzymasz nowy token zakupu, wykonaj tę samą procedurę weryfikacji co w przypadku weryfikacji nowego tokena zakupu. Pamiętaj, aby potwierdzić te zakupy od: BillingClient.acknowledgePurchase()
z Biblioteki płatności w Google Play lub Purchases.subscriptions:acknowledge
w interfejsie Google Play Developer API.
Obsługa odroczonej wymiany
Tryb odroczonej wymiany pozwala użytkownikowi na wykorzystanie pozostałego uprawnienia przed przejściem na nowy.
Gdy używasz metody ReplacementMode.DEFERRED przy nowym zakupie, queryPurchasesAsync()
zwraca po procesie zakupu nowy token zakupu, który pozostaje powiązany ze starą usługą, aż do odroczonego zastąpienia w dniu następnego odnowienia. Po tym czasie nowy produkt zostanie zwrócony.
Wcześniej można było korzystać z wersji ProrationMode.DEFERRED
wycofanej dla użytkowników, ale usługa ProrationMode.DEFERRED
została wycofana wraz z biblioteką płatności w Play 6. Z tej tabeli dowiesz się, czym różni się to zachowanie:
Czas |
ProrationMode.DEFERRED (wycofana) |
Zamiennik.WSTRZYMANY |
Tuż po pomyślnym zakończeniu procesu zakupu (aplikacja) |
Usługa Przejście na stary abonament trwa do daty następnego odnowienia. Aby zapewnić w aplikacji odpowiednie uprawnienia, Nowy token zakupu nie jest widoczny, więc nie można go na tym etapie przetworzyć. |
Usługa
Pojawia się nowy token zakupu, dlatego należy go na tym etapie przetworzyć z uwzględnieniem daty wymiany. |
Tuż po udanym procesie zakupu (backend) |
Numer RTDN SUBSCRIPTION_PURCHASED nie jest wysyłany po zakończeniu procesu zakupu. Backend nie ma jeszcze informacji o nowym zakupie. |
SUBSCRIPTION_PURCHASED RTDN ze starym identyfikatorem produktu jest wysyłane natychmiast po procesie zakupu dla nowego tokena zakupu. Wywołanie metody purchases.subscriptionsv2.get z nowym tokenem zakupu zwraca zakup z parametrem „startTime” wskazującym czas zakupu z 2 elementami zamówienia:
W przypadku starego tokena zakupu wysłano okres SUBSCRIPTION_EXPIRATIOND. Gdy wywołasz metodę purchases.subscriptionsv2.get za pomocą starego tokena zakupu, będzie ona widoczna jako wygasła (w pozostałym okresie uprawnienia do starego abonamentu zostaną przeniesione do nowego zakupu). |
Przy zmianie – pierwsze odnowienie po procesie zakupu (aplikacja) |
Pojawił się nowy token zakupu, więc należy go przetworzyć. |
Nowy zakup powinien zostać przetworzony już po pomyślnym zakończeniu procesu zakupu, więc aplikacja nie powinna podejmować żadnych specjalnych działań poza sprawdzeniem, czy użytkownik ma odpowiednie uprawnienia. |
Przy wymiany – pierwsze odnowienie po procesie zakupu (backend) |
Nowy zakup może być teraz przetworzony i potwierdzony po wysłaniu pierwszej SUBSCRIPTION_RENEWED RTDN. Za pomocą obiektu |
Nowy zakup został przetworzony i potwierdzony, gdy wysłano SUBSCRIPTION_PURCHASED RTDN dla nowego tokena zakupu i zarejestrowano jako „startTime”. W przypadku zastępowania Mode.DEFERRED pierwsze odnowienia przebiegają tak samo jak w przypadku każdego innego odnowienia i nie musisz wykonywać specjalnej procedury dotyczącej wymiany w momencie wystąpienia tego zdarzenia. Wywołanie metody purchases.subscriptionsv2.get z nowym tokenem zakupu zwraca zakup z 2 elementami zamówienia:
|
Od teraz zamiast wycofanej metody ProrationMode.DEFERRED należy używać funkcji ReplacementMode.DEFERRED, ponieważ działa ona tak samo w przypadku zmian uprawnień, ale umożliwia zarządzanie zakupami w sposób bardziej spójny z pozostałymi nowymi zakupami.
Zarządzanie klientami
Dzięki powiadomieniom w czasie rzeczywistym dla deweloperów możesz w czasie rzeczywistym wykrywać, kiedy użytkownik rezygnuje. Jeśli użytkownik anuluje subskrypcję, ale zanim wygaśnie, możesz wysłać mu powiadomienia push lub wiadomości w aplikacji z prośbą o ponowne wykupienie subskrypcji.
Gdy użytkownik anuluje subskrypcję, możesz spróbować odzyskać go w aplikacji lub w Sklepie Play. W tabeli poniżej opisujemy różne scenariusze subskrypcji wraz z powiązanymi działaniami zwrotnymi i wymaganiami dotyczącymi aplikacji.
Przed wygaśnięciem subskrypcji | Po wygaśnięciu subskrypcji | |||
W aplikacji | W Sklepie Play | W aplikacji | W Sklepie Play | |
Funkcja przywracania | Subskrypcja w aplikacji | Przywróć | Subskrypcja w aplikacji | Subskrybuj ponownie |
Użytkownik przechodzi przez proces płatności | Tak | Nie | Tak | Tak |
Subskrypcja użytkownika pozostaje powiązana z tym samym kodem SKU | Użytkownik może zarejestrować się na taki sam kod SKU lub inny | Tak | Użytkownik może zarejestrować się na taki sam kod SKU lub inny | Tak |
Tworzy nowy token zakupu | Tak | Nie | Tak | Tak |
Włączone domyślnie | Nie | Tak, pomoc jest wymagana dla wszystkich programistów | Nie |
Aplikacje bez Biblioteki płatności w wersji 2.0 lub nowszej: nie Aplikacje z Biblioteką płatności w wersji 2.0 lub nowszej: tak. Deweloperzy mogą zrezygnować z tej funkcji w Konsoli. |
Kiedy użytkownik jest obciążany opłatą |
Jeśli używasz tej samej wersji SKU: koniec bieżącego okresu rozliczeniowego. Jeśli używasz innych kodów SKU, zależy to od trybu proporcjonalnego podziału. |
Koniec bieżącego okresu rozliczeniowego | Od razu | Od razu |
Wymagana implementacja | Udostępnij w aplikacji interfejs do ponownej rejestracji |
Wykryj zmianę stanu subskrypcji Precyzyjny link do Sklepu Play |
Udostępnianie w aplikacji interfejsu do ponownej rejestracji | Obsługa zakupów poza aplikacją |
Przed wygaśnięciem subskrypcji – w aplikacji
W przypadku subskrypcji, które zostały anulowane, ale jeszcze nie wygasły, możesz zezwolić subskrybentom na przywrócenie subskrypcji w aplikacji. Aby to zrobić, zastosuj ten sam proces zakupu produktu w aplikacji co w przypadku nowych subskrybentów. Sprawdź, czy interfejs użytkownika informuje, że użytkownik ma subskrypcję. Możesz na przykład wyświetlić aktualną datę ważności i cenę cykliczną użytkownika za pomocą przycisku Aktywuj ponownie.
Najczęściej będziesz oferować użytkownikom te same ceny i kody SKU, które już zasubskrybowali. Oto niektóre z nich:
- Rozpocznij nowy zakup subskrypcji z tym samym kodem SKU.
- Nowa subskrypcja zastępuje starą i zostanie odnowiona z tą samą datą ważności. Stara subskrypcja zostanie natychmiast oznaczona jako wygasła.
- Załóżmy na przykład, że Adam ma subskrypcję aplikacji Przykładowa muzyka, której data ważności mija 1 sierpnia. 10 lipca ponownie wykupuje subskrypcję miesięczną w tej samej cenie co miesiąc. Naliczamy pozostałe środki za nową subskrypcję, która jest od razu aktywna i nadal jest odnawiana 1 sierpnia.
Jeśli chcesz zaoferować inną cenę, np. nowy bezpłatny okres próbny lub rabat na pozyskanie zwrotu, możesz zaoferować użytkownikowi inny kod SKU:
- Rozpocznij przejście na wyższą lub niższą wersję usługi przy użyciu innego kodu SKU w trybie wymiany
WITHOUT_PRORATION
. - Nowa subskrypcja zastępuje starą i zostanie odnowiona z tą samą datą ważności. Użytkownik zostanie obciążony ceną nowego kodu SKU, w tym wszelkich cen dla nowych użytkowników, w pierwotnej dacie ważności. Jeśli stara subskrypcja została utworzona przy użyciu zaciemnionego identyfikatora konta, ten sam identyfikator powinien zostać przekazany do
BillingFlowParams
na potrzeby przejścia na wyższą lub niższą wersję usługi. - Załóżmy na przykład, że Adam ma subskrypcję aplikacji Przykładowa muzyka, której data ważności mija 1 sierpnia. 10 lipca ponownie wykupuje subskrypcję roczną w cenie początkowej. Nowa subskrypcja stanie się od razu aktywna, a 1 sierpnia użytkownik zostanie obciążony ceną dla nowych użytkowników.
- Jeśli zdecydujesz się uwzględnić bezpłatny okres próbny lub cenę początkową w swoim kodzie SKU winback, upewnij się, że użytkownik kwalifikuje się do skorzystania z oferty. Aby to zrobić, odznacz pole Zezwalaj na 1 bezpłatny okres próbny na aplikację w Konsoli Google Play, aby ograniczyć mu możliwość skorzystania z jednej bezpłatnej wersji próbnej na aplikację.
Gdy otrzymasz token zakupu, przetwórz zakup tak samo jak w przypadku nowej subskrypcji. Interfejs Google Play Developer API zwraca też w zasobie subskrypcji wartość linkedPurchaseToken
. Pamiętaj o unieważnieniu tokena podanego w linkedPurchaseToken
, aby mieć pewność, że nie będzie on używany do uzyskiwania dostępu do Twoich usług.
Przed wygaśnięciem subskrypcji – w Sklepie Play
Gdy subskrypcja została anulowana, ale nadal jest aktywna, użytkownicy mogą ją przywrócić w centrum subskrypcji Google Play, klikając Odnów subskrypcję (wcześniej Przywróć). Subskrypcja i token zakupu zostaną zachowane.
![Sekcja subskrypcji w aplikacji Sklep Google Play przedstawiająca anulowaną subskrypcję i przycisk odnawiania subskrypcji.](https://developer.android.google.cn/static/images/google/play/billing/resubscribe.jpg?authuser=6&hl=pl)
Więcej informacji o przywracaniu subskrypcji znajdziesz w artykule Przywracanie subskrypcji.
Po wygaśnięciu subskrypcji – w aplikacji
Możesz zezwolić subskrybentom, którzy wygasli, na ponowne wykupienie subskrypcji w aplikacji, stosując ten sam proces zakupu produktu w aplikacji co w przypadku nowych subskrybentów. Zwróć uwagę na te kwestie:
- Aby zaoferować użytkownikom rabat, możesz podać identyfikator produktu ze specjalną ceną subskrypcji, nazywany też kodem SKU wygranej. Ofertę możesz udostępnić w aplikacji lub powiadomić o niej użytkownika poza aplikacją, np. w e-mailu.
- Aby rozpocząć subskrypcję powrotną, uruchom proces zakupu w aplikacji na Androida, korzystając z Biblioteki płatności w Google Play. Działa to tak samo jak w przypadku nowej subskrypcji, ale możesz określić kod SKU dostępny dla użytkownika.
- Jeśli zdecydujesz się uwzględnić bezpłatny okres próbny lub cenę początkową w zgłoszeniu SKU, upewnij się, że użytkownik kwalifikuje się do korzystania z tej usługi. Aby to zrobić, odznacz pole Zezwalaj na jedną bezpłatną wersję próbną na aplikację w Konsoli Google Play. Spowoduje to ograniczenie dostępu użytkownika do jednej bezpłatnej wersji próbnej na aplikację.
- Jeśli użytkownik ponownie zasubskrybuje ten sam kod SKU, nie będzie się już kwalifikować do skorzystania z bezpłatnych okresów próbnych ani z ceny początkowej. Upewnij się, że jest to zgodne z Twoim interfejsem użytkownika.
Gdy otrzymasz token zakupu, przetwórz zakup tak samo jak w przypadku nowej subskrypcji. Nie otrzymasz linkedPurchaseToken
w zasobie subskrypcji.
Po wygaśnięciu subskrypcji – w Sklepie Play
Jeśli ta opcja jest włączona, użytkownicy mogą ponownie zasubskrybować ten sam kod SKU przez maksymalnie 1 rok po wygaśnięciu jego ważności. Aby to zrobić, kliknij Odnów subskrypcję w centrum subskrypcji w Google Play. Spowoduje to wygenerowanie nowego tokena zakupu i subskrypcji.
![Sekcja subskrypcji w aplikacji Sklep Google Play z informacjami o anulowanej i wygasłej subskrypcji oraz przyciskami odnawiania i usuwania.](https://developer.android.google.cn/static/images/google/play/billing/resubscribe-remove.jpg?authuser=6&hl=pl)
Ponowna subskrypcja jest uznawana za zakup poza aplikacją, więc pamiętaj, by przestrzegać sprawdzonych metod obsługi zakupów robionych poza aplikacją.
Promuj subskrypcję
Możesz tworzyć kody promocyjne, aby dać wybranym użytkownikom przedłużony bezpłatny okres próbny subskrypcji. Więcej informacji znajdziesz w sekcji Kody promocyjne.
W przypadku bezpłatnych okresów próbnych przed rozpoczęciem tego okresu Google Play sprawdza, czy użytkownik ma ważną formę płatności. Niektórzy użytkownicy mogą zobaczyć tę weryfikację jako blokadę lub obciążenie swojej formy płatności. Blokada lub obciążenie jest tymczasowa i później można ją cofnąć lub zwrócić.
Po zakończeniu okresu próbnego forma płatności użytkownika zostanie obciążona pełną kwotą subskrypcji.
Jeśli użytkownik anuluje subskrypcję w dowolnym momencie podczas tego okresu, subskrypcja pozostanie aktywna do końca tego okresu, a po jego zakończeniu nie zostaną naliczone żadne opłaty.
Anulowanie, zwrot lub unieważnianie
Za pomocą interfejsu Google Play Developer API możesz anulować subskrypcję, zwrot środków lub anulować subskrypcję. Ta funkcja jest też dostępna w Konsoli Google Play.
- Anuluj: użytkownicy mogą anulować subskrypcję w Google Play. Możesz też udostępnić użytkownikom opcję anulowania subskrypcji w aplikacji lub witrynie. Aplikacja powinna obsługiwać anulowanie zgodnie z opisem w sekcji Anulowanie.
- Zwrot środków: gdy zwrócisz środki, użytkownik może nadal korzystać z subskrypcji. Zwrotu środków można użyć, jeśli np. w wyniku wystąpienia błędu technicznego, który uniemożliwił użytkownikowi dostęp do produktu, ale został on już naprawiony. Pamiętaj, że jeśli chcesz zwrócić więcej niż ostatnią płatność lub dokonać częściowego zwrotu, musisz użyć Konsoli Google Play.
- Anulowanie: gdy anulujesz subskrypcję, użytkownik natychmiast utraci do niej dostęp. Można go użyć, jeśli np. z powodu błędu technicznego, który uniemożliwił użytkownikowi dostęp do usługi, a użytkownik nie chce dalej z niej korzystać. Aplikacja powinna obsługiwać te anulowanie w sposób opisany w sekcji Wycofania.
W tabeli poniżej pokazujemy różnice między anulowaniem, zwrotem środków i unieważnieniem.
Zatrzymuje odnawianie | Zwrot środków | Unieważnianie dostępu | |
Anuluj | Tak | Nie | Nie |
Zwrot środków | Nie | Tak | Nie |
Unieważnij | Tak | Tak | Tak |
Odroczenie płatności za subskrybenta
W przypadku automatycznie odnawianego subskrybenta możesz przesunąć datę następnej płatności, używając interfejsu Purchases.subscriptions:defer
z interfejsu Google Play Developer API. W tym czasie użytkownik subskrybuje Twoje treści z pełnym dostępem, ale nie jest obciążany opłatą. Data odnowienia subskrypcji zostanie zmieniona na nową.
W przypadku abonamentów przedpłaconych możesz odroczyć termin ważności za pomocą interfejsu API odroczonych płatności.
Płatności odroczone umożliwiają:
- Daj użytkownikom bezpłatny dostęp w ramach oferty specjalnej, np. dając tydzień bezpłatnie na zakup filmu.
- Zapewnij klientom bezpłatny dostęp w ramach gestu reputacji.
Płatności można odroczyć maksymalnie o 1 dzień i maksymalnie 1 rok na wywołanie interfejsu API. Aby jeszcze bardziej odroczyć naliczanie opłat, możesz ponownie wywołać interfejs API, zanim nadejdzie nowa data rozliczenia.
Przykład: Darcy ma miesięczną subskrypcję treści online w aplikacji „Rybacki” W marcu wzięła udział w ankiecie online dla wydawcy aplikacji. Wydawca daje jej 6 bezpłatnych tygodni, odroczając kolejną płatność do 15 maja, czyli do 6 tygodni od zaplanowanej daty rozliczenia, czyli 1 kwietnia. Darcy nie płaci za kwiecień ani początek maja i nadal ma dostęp do treści. 15 maja zostanie naliczona standardowa opłata za subskrypcję w wysokości 1, 25 zł za ten miesiąc. Następna data odnowienia subskrypcji to 15 czerwca.
Możesz o tym poinformować użytkownika e-mailem lub w aplikacji, aby powiadomić go o zmianie daty płatności.
Obsługa odrzuconych płatności
W przypadku problemów z płatnościami z odnowieniem subskrypcji Google będzie okresowo próbować odnowić subskrypcję przez pewien czas, zanim ją anulujesz. Okres przywracania konta może się składać z okresu prolongaty, po którym następuje okres zawieszenia konta. W tym czasie Google wysyła użytkownikowi e-maile i powiadomienia z prośbą o zaktualizowanie formy płatności.
Po odrzuceniu płatności rozpoczyna się okres prolongaty, jeśli został skonfigurowany. W okresie prolongaty upewnij się, że użytkownik nadal ma dostęp do uprawnień w ramach subskrypcji.
Po zakończeniu okresu prolongaty rozpoczyna się okres zawieszenia konta. Gdy konto jest zawieszone, musisz sprawdzić, czy użytkownik nie ma dostępu do uprawnień w ramach subskrypcji.
W Konsoli Google Play możesz określić długość okresu prolongaty i zawieszenia konta dla każdego automatycznie odnawianego abonamentu podstawowego. Określenie długości krótszej niż domyślne może zmniejszyć liczbę subskrypcji przywracanych z odrzuconych płatności.
Aby zmaksymalizować prawdopodobieństwo odzyskania subskrypcji po odrzuceniu płatności, możesz poinformować użytkownika o problemie z płatnością i poprosić go o rozwiązanie problemu.
Możesz to zrobić samodzielnie, jak opisano w sekcjach dotyczących okresu prolongaty i zawieszenia konta, albo zaimplementować w aplikacji interfejs API do obsługi wiadomości, dzięki któremu Google będzie wyświetlać wiadomość użytkownikom Twojej aplikacji.
Wysyłanie wiadomości w aplikacji
Jeśli masz włączone wysyłanie wiadomości w aplikacji za pomocą konta InAppMessageCategoryId.TRANSACTIONAL
, Google Play będzie raz dziennie wyświetlać użytkownikom wiadomości w okresie prolongaty i zawieszeniu konta oraz umożliwić im poprawienie płatności bez opuszczania aplikacji.
![Pasek powiadomień informujący użytkownika o konieczności poprawienia płatności](https://developer.android.google.cn/static/images/google/play/billing/subscriptions-in-app-messaging-snackbar.png?authuser=6&hl=pl)
Zalecamy wywoływanie tego interfejsu API za każdym razem, gdy użytkownik otwiera aplikację, aby określić, czy komunikat powinien się wyświetlić.
Jeśli użytkownik odzyskał subskrypcję, otrzymasz kod odpowiedzi SUBSCRIPTION_STATUS_UPDATED
wraz z tokenem zakupu. Następnie użyj tego tokena zakupu do wywołania interfejsu Google Play Developer API i odświeżenia stanu subskrypcji w aplikacji.
Integracja wiadomości w aplikacji
Aby wyświetlać użytkownikowi wiadomości w aplikacji, użyj komponentu BillingClient.showInAppMessages()
.
Oto przykład aktywowania procesu wysyłania wiadomości w aplikacji:
Kotlin
val inAppMessageParams = InAppMessageParams.newBuilder() .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL) .build() billingClient.showInAppMessages(activity, inAppMessageParams, object : InAppMessageResponseListener() { override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) { if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) { // The flow has finished and there is no action needed from developers. } else if (inAppMessageResult.responseCode == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) { // The subscription status changed. For example, a subscription // has been recovered from a suspend state. Developers should // expect the purchase token to be returned with this response // code and use the purchase token with the Google Play // Developer API. } } })
Java
InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder() .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL) .build(); billingClient.showInAppMessages(activity, inAppMessageParams, new InAppMessageResponseListener() { @Override public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) { if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) { // The flow has finished and there is no action needed from developers. } else if (inAppMessageResult.responseCode == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) { // The subscription status changed. For example, a subscription // has been recovered from a suspend state. Developers should // expect the purchase token to be returned with this response // code and use the purchase token with the Google Play // Developer API. } } });
Obsługa oczekujących transakcji na subskrypcje
Transakcje oczekujące mogą mieć miejsce przy pierwszym zakupie, doładowywaniu, przejściu na wyższą lub niższą wersję usługi. Zakup subskrypcji zaczyna się od stanu SUBSCRIPTION_STATE_PENDING
(przed przejściem na SUBSCRIPTION_STATE_ACTIVE
). Jeśli transakcja wygasła lub anulowana przez użytkownika, trafia do SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED
. Uprawnienia użytkownika musisz aktualizować (i należy je aktualizować dopiero po zakończeniu transakcji).
Zmiana stanu subskrypcji w przypadku początkowego zakupu z oczekującymi transakcjami jest prosta. Gdy użytkownik zainicjuje oczekującą transakcję, aplikacja otrzyma stan Purchase
ze stanem PENDING
. Po zakończeniu transakcji aplikacja otrzyma ponownie Purchase
ze stanem PURCHASED
. Do klienta RTDN zostanie wysłana wiadomość SubscriptionNotification
typu SUBSCRIPTION_PURCHASED
. Wykonaj zwykłą procedurę weryfikacji zakupu, zapewnij użytkownikowi dostęp do treści i potwierdź zakup. Jeśli transakcja wygaśnie lub zostanie anulowana, do Twojego klienta RTDN zostanie wysłana wiadomość SubscriptionNotification
o typie SUBSCRIPTION_PENDING_PURCHASE_CANCELED
. W takich przypadkach użytkownik nie powinien nigdy uzyskać dostępu do treści.
Doładowanie, przejście na wyższą lub niższą wersję usługi z uwzględnieniem oczekujących transakcji obejmuje zmiany stanu zarówno starej, jak i nowej subskrypcji. Gdy użytkownik zainicjuje oczekującą transakcję doładowania, zwiększenia lub zmniejszenia, aplikacja otrzyma Purchase
w przypadku starej subskrypcji z obiektem PendingPurchaseUpdate
. W tej chwili użytkownik nadal jest właścicielem starej subskrypcji i nie korzystał jeszcze z nowej. Wywołanie getProducts()
i getPurchaseToken()
w obiekcie PendingPurchaseUpdate
zwraca identyfikatory produktów i token zakupu nowej subskrypcji. Po zakończeniu transakcji aplikacja otrzyma Purchase
z tokenem zakupu najwyższego poziomu ustawionym dla nowej subskrypcji i stanem PURCHASED
. Do klienta RTDN zostanie wysłana wiadomość w aplikacji SubscriptionNotification
typu SUBSCRIPTION_PURCHASED
. Dopiero teraz wystarczy zastąpić stary token zakupu nowym i zaktualizować dostęp użytkownika do treści. Jeśli transakcja wygaśnie lub zostanie anulowana, do klienta RTDN zostanie wysłana wiadomość SubscriptionNotification
o typie SUBSCRIPTION_PENDING_PURCHASE_CANCELED
. W takich przypadkach użytkownik powinien nadal mieć dostęp do treści w poprzedniej subskrypcji.