Subskrypcja z dodatkami umożliwia łączenie ze sobą wielu produktów subskrypcyjnych, które można kupować, rozliczać i zarządzać nimi razem. Istniejące subskrypcje katalogu produktów można bezproblemowo oferować jako dodatki bez konieczności wcześniejszego określania szczegółów ani dodatkowej konfiguracji. Możesz uruchomić proces zakupu z wieloma istniejącymi produktami subskrypcyjnymi i sprzedawać je jako dodatki.
co należy wziąć pod uwagę
Korzystając z subskrypcji z dodatkami, pamiętaj o tych kwestiach:
Subskrypcja z dodatkami jest obsługiwana tylko w przypadku automatycznie odnawianych abonamentów podstawowych.
Wszystkie produkty w zakupie muszą mieć ten sam okres rozliczeniowy płatności cyklicznej. Nie możesz na przykład mieć subskrypcji z rocznym okresem rozliczeniowym i dodatków z miesięcznym okresem rozliczeniowym.
Subskrypcja z dodatkami może zawierać maksymalnie 50 produktów.
Ta funkcja jest niedostępna w Indiach (IN) i Korei Południowej (KR).
Integracja z Biblioteką płatności w Play
W tej sekcji opisujemy, jak zintegrować funkcję subskrypcji z dodatkami z Biblioteką płatności w Play (PBL). Zakładamy, że znasz już początkowe kroki integracji biblioteki PBL, takie jak dodanie zależności PBL do aplikacji, zainicjowanie BillingClient i połączenie z Google Play. Ta sekcja dotyczy aspektów integracji PBL, które są specyficzne dla subskrypcji z dodatkami.
Uruchamianie procesu zakupu
Aby uruchomić proces zakupu subskrypcji z dodatkami, wykonaj te czynności:
Pobierz wszystkie elementy subskrypcji za pomocą metody
BillingClient.queryProductDetailsAsync.Ustaw obiekt
ProductDetailsParamsdla każdego elementu.Element reprezentowany przez obiekt
ProductDetailsParamsokreśla zarównoProductDetailswskazujący element subskrypcji, jak iofferTokenwybierający konkretną subskrypcjębase planluboffer.Podaj szczegóły elementu w metodzie
BillingFlowParams.Builder.setProductDetailsParamsList. KlasaBillingFlowParamsokreśla szczegóły procesu zakupu.Poniższy przykład pokazuje, jak uruchomić proces płatności za subskrypcję z wieloma produktami:
Java
BillingClient billingClient = …; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ArrayList
productDetailsList = new ArrayList<>(); productDetailsList.add(productDetails1); productDetailsList.add(productDetails2); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Zasady obowiązujące w przypadku produktów w zakupie
- Aby daty odnowienia dodatków były zgodne z datami odnowienia produktu podstawowego, Google Play może po zakończeniu okresu próbnego lub okresu z ceną dla nowych użytkowników naliczyć proporcjonalną opłatę.
- Kwalifikowalność oferty będzie oceniana oddzielnie dla każdego produktu.
Przetwarzanie zakupów
Przetwarzanie subskrypcji z dodatkami jest takie samo jak przetwarzanie pojedynczego zakupu subskrypcji, co opisano w artykule Integrowanie Biblioteki płatności w Google Play z aplikacją. Jedyna różnica polega na tym, że użytkownik może otrzymać wiele uprawnień w ramach jednego zakupu. Zakup subskrypcji z dodatkami zwraca wiele elementów, które można pobrać za pomocą Purchase.getProducts() w bibliotece Płatności w Google Play, a następnie listy lineItems w purchases.subscriptionsv2.get interfejsu Google Play Developer API.
Zmienianie subskrypcji z dodatkami
Wszelkie zmiany w subskrypcji z dodatkami powodują przejście na wyższą lub niższą wersję usługi. Więcej informacji znajdziesz w artykule Przechodzenie na wyższy lub niższy abonament.
Aby zmienić lub przywrócić istniejący zakup subskrypcji z dodatkami w aplikacji, musisz wywołać interfejs API launchBillingFlow z dodatkowymi parametrami i upewnić się, że:
- Zawsze wywołuj funkcję
setOldPurchaseTokenz tokenem zakupu bieżącej subskrypcji. - Aby przejść na wyższą lub niższą wersję produktu albo zmienić go na inny, zadzwoń pod numer
SubscriptionProductReplacementParams.setReplacementMode, aby określić, jak ma być obsługiwana zmiana subskrypcji między starym a nowym produktem. W przeciwnym razie nie musisz ustawiaćSubscriptionProductReplacementParams. - Jeśli element podstawowy nie zostanie zmieniony, nadal możesz wywołać funkcję
SubscriptionProductReplacementParams.setSubscriptionReplacementMode, aby zastosować określone zachowanie zastępowania. Obowiązujące w tym przypadku zasady znajdziesz w artykule Ponowne subskrybowanie lub przełączanie pakietów w ramach tej samej subskrypcji. - Nowe dodatki zaczną obowiązywać od razu, a opłata zostanie naliczona proporcjonalnie, aby dopasować datę kolejnego odnowienia do produktu podstawowego w subskrypcji.
- Usunięte dodatki wygasną z końcem bieżącego okresu rozliczeniowego.
- Podczas uruchamiania procesu płatności musisz określić wszystkie aktywne elementy subskrypcji z dodatkami z wyjątkiem tych, które mają zostać usunięte, oraz wszystkie nowe dodatki.
Poniższy przykład pokazuje, jak wywołać interfejs launchBillingFlow API podczas zmiany istniejącego zakupu subskrypcji z dodatkami:
Java
BillingClient billingClient = …; int replacementMode =…; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ProductDetailsParams productDetails3 = ...; ArrayListnewProductDetailsList = new ArrayList<>(); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) // No need to set if change does not affect the base item. .setSubscriptionReplacementMode(replacementMode) .build()) .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Scenariusze modyfikacji subskrypcji
W tabeli poniżej znajdziesz różne scenariusze modyfikacji subskrypcji z dodatkami i odpowiednie zachowania.
Podczas używania parametru SubscriptionProductReplacementParams
| Istniejące produkty | Zmodyfikowane produkty | Czy w parametrze SubscriptionProductReplacementParams musisz ustawić tryb wymiany? | Działanie |
|---|---|---|---|
| A (produkt podstawowy), B | A (produkt podstawowy) | Tak (użyj KEEP_EXISTING) |
|
| A | A (produkt podstawowy), B | Tak (w przypadku A użyj KEEP_EXISTING) |
|
| A (produkt podstawowy), B | A (produkt podstawowy), C | Tak (w przypadku A użyj KEEP_EXISTING) |
|
| A (produkt podstawowy), B | B (produkt podstawowy) | Nie | A jest zaplanowane do odroczonego usunięcia. |
| A (produkt podstawowy), B | C (produkt podstawowy) | Tak |
|
| A (produkt podstawowy), B | C (produkt podstawowy), B | Tak |
|
| A (produkt podstawowy), B | C (produkt podstawowy), D | Tak |
|
| A (produkt podstawowy), B | A (produkt podstawowy), C | Tak |
|
| A (produkt podstawowy), B, C | D (produkt podstawowy), B, C | Tak |
|
Podczas korzystania z parametru SubscriptionUpdateParams
| Istniejące produkty | Zmodyfikowane produkty | Czy musisz ustawić informacje o zamienniku? | Działanie |
|---|---|---|---|
| A (produkt podstawowy), B | A (produkt podstawowy) | Nie |
|
| A | A (produkt podstawowy), B | Nie |
|
| A (produkt podstawowy), B | A (produkt podstawowy), C | Nie |
|
| A (produkt podstawowy), B | B (produkt podstawowy) | Nie | A jest zaplanowane do odroczonego usunięcia. |
| A (produkt podstawowy), B | C (produkt podstawowy) | Tak |
|
| A (produkt podstawowy), B | C (produkt podstawowy), B | Tak | Zastąpienie A -> C zależy od
setSubscriptionReplacementMode (wycofane w PBL 8.1). |
| A (produkt podstawowy), B | C (produkt podstawowy), D | Tak |
|
Powiadomienia w czasie rzeczywistym dla deweloperów
Pole subscriptionId nie jest podawane w RTDN w przypadku zakupów subskrypcji z dodatkami, które zawierają uprawnienia do wielu produktów.
Zamiast tego możesz użyć interfejsów Play Developer API, aby uzyskać informacje o zakupie i zobaczyć powiązane uprawnienia do produktu.
Zmiany cen dla obecnych subskrybentów
Zmiana cen subskrypcji dla obecnych subskrybentów subskrypcji z dodatkami przebiega podobnie jak zmiana cen pojedynczej subskrypcji opisana w artykule Zmienianie cen subskrypcji. Istnieją jednak pewne ograniczenia i różnice w funkcjonalności, które opisujemy w tej sekcji.
Rezygnowanie ze starszej kohorty cenowej
Zakończenie starszej kohorty ma też wpływ na subskrypcje z zakupionymi dodatkami. Obowiązują te reguły:
Wszystkie oczekujące wzrosty cen z możliwością akceptacji powinny mieć ten sam czas odnowienia z nową ceną. Jeśli element w subskrypcji z dodatkami ma wzrost ceny wymagający zgody użytkownika, który nie został jeszcze potwierdzony przez użytkownika, wszelkie nowe wzrosty ceny wymagające zgody użytkownika w przypadku innych elementów zakupu będą ignorowane, chyba że spowodują ten sam czas odnowienia zastosowania nowej ceny co istniejący wzrost ceny w stanie OUTSTANDING. Gdy użytkownik potwierdzi wzrost ceny, zostaną zarejestrowane wszelkie nowsze zmiany ceny. Użytkownicy mogą zaakceptować wszystkie niepotwierdzone wzrosty ceny wymagające zgody użytkownika tylko jednocześnie.
Przykład:
- Załóżmy, że masz subskrypcję z dodatkami (produkty A i B), która odnawia się 7 dnia każdego miesiąca.
- Produkt A jest w trakcie zmiany ceny z 7 PLN na 10 PLN, a wzrost ceny ma nastąpić 7 lipca.
- 2 czerwca rozpoczyna się nowa migracja ceny z 5 USD na 6 USD w przypadku produktu B. Wzrost ceny wymagający zgody użytkownika zaczyna obowiązywać 37 dni po migracji, więc najwcześniejszy wzrost ceny produktu B nastąpi 7 sierpnia.
W tym scenariuszu dopóki użytkownik nie zaakceptuje zmiany ceny produktu A (dopóki nie będzie on w stanie POTWIERDZONY), zmiana ceny produktu B nie zostanie zarejestrowana w przypadku zakupu subskrypcji, a metoda SubscriptionPurchaseV2 nie zwróci szczegółów zmiany ceny produktu B. Po potwierdzeniu przez użytkownika zmiany ceny produktu A rozpoczyna się zmiana ceny produktu B. Użytkownik otrzyma wzrost ceny wymagający zgody użytkownika w przypadku produktu B dopiero po zaakceptowaniu wzrostu ceny wymagającego zgody użytkownika w przypadku produktu A.
E-mail od Google Play zawiera listę wszystkich produktów, których ceny wzrosły lub zmalały tego samego dnia.
Anulowanie subskrypcji z dodatkami
Użytkownicy mogą anulować cały zakup subskrypcji z dodatkami w centrum subskrypcji Google Play, a Ty możesz anulować cały zakup subskrypcji z dodatkami tylko za pomocą interfejsu Google Play Developer API.
Gdy subskrypcja zostanie anulowana bez cofnięcia, żadne elementy zakupu nie będą odnawiać się automatycznie, ale użytkownik zachowa dostęp do przysługujących mu elementów, w tym do bezpłatnych okresów próbnych, do końca odpowiednich okresów rozliczeniowych.
Unieważnianie i zwracanie środków za subskrypcje z dodatkami
Oto niektóre wytyczne dotyczące wycofywania subskrypcji i przyznawania zwrotów środków:
W Konsoli Play możesz zwrócić środki za konkretne zamówienie bez odbierania dostępu do subskrypcji.
Wywołaj funkcję
orders.refund, aby w pełni zwrócić użytkownikowi środki za konkretne płatności za subskrypcję bez odbierania mu dostępu do niej.Zadzwoń pod numer
purchases.subscriptionsv2.revoke, aby natychmiast odebrać dostęp do wszystkich elementów subskrypcji. Za pomocą tego interfejsu API możesz:cofnąć dostęp do wszystkich elementów i zwrócić proporcjonalną kwotę;
W przypadku wycofania subskrypcji z dodatkami z proporcjonalnym zwrotem środków zwrot środków zostanie przyznany za ostatnie zamówienie każdego produktu w proporcjonalnej kwocie na podstawie czasu pozostałego do następnego odnowienia.
Cofnij dostęp do wszystkich elementów i zapewnij pełny zwrot środków.
Cofnij dostęp do poszczególnych elementów i otrzymaj pełny zwrot środków za dany element.
Unieważnianie poszczególnych elementów w subskrypcji z dodatkami
Aby cofnąć poszczególne elementy subskrypcji z dodatkami bez cofania całego zakupu, wywołaj purchases.subscriptionsv2.revoke z ustawionym polem ItemBasedRefund w RevocationContext. productId produktu, który ma zostać wycofany i za który mają zostać zwrócone środki, można ustawić w polu ItemBasedRefund.
Pole ItemBasedRefund można ustawić w przypadku zakupów obejmujących co najmniej 1 element subskrypcji z automatycznym odnawianiem.
- Jeśli po cofnięciu elementu określonego w
ItemBasedRefundw ramach zakupu subskrypcji nadal będą aktywne inne elementy, cofnięty zostanie tylko ten element, a środki za niego zostaną w pełni zwrócone bez przerywania stanu subskrypcji. - Jeśli po wycofaniu produktu określonego w
ItemBasedRefundw subskrypcji nie ma już aktywnych produktów, produkt zostanie wycofany, a środki za niego zostaną w pełni zwrócone. Subskrypcja zostanie anulowana.
co należy wziąć pod uwagę
- W przypadku korzystania z
ItemBasedRefundmożna cofnąć tylko 1 element naraz. Żądanie może być wywoływane wielokrotnie, jeśli trzeba cofnąć różne elementy. - Jeśli subskrypcja jest w stanie odrzucenia płatności lub element określony w
ItemBasedRefundnie jest własnością użytkownika albo wygasł, odrzucenie elementu jest blokowane. - Odrzucanie produktów nie jest obsługiwane w przypadku subskrypcji przedpłaconych.
Odroczenie płatności
Datę kolejnego rozliczenia subskrypcji z dodatkami możesz przesunąć za pomocą metody Purchases.subscriptionsv2:defer.
Gdy odroczysz subskrypcję z dodatkami, wszystkie elementy subskrypcji zostaną odroczone o ten sam czas. W tym okresie użytkownicy zachowują pełny dostęp do wszystkich elementów, ale nie są obciążani opłatami. Data odnowienia wszystkich elementów zostanie zmieniona na nową.
Może to być przydatne w przypadku promocji lub gestów dobrej woli wobec klientów. Rozliczenie może być odroczone o jeden dzień lub nawet o rok w przypadku każdego wywołania interfejsu API. Możesz wielokrotnie wywoływać interfejs API, aby przedłużyć odroczenie przed nadejściem nowej daty rozliczenia.
Gdy to działanie zostanie wykonane, zostanie wygenerowane SUBSCRIPTION_DEFERREDpowiadomienie w czasie rzeczywistym dla deweloperów.
Wygaśnięcie produktu podczas odrzucenia płatności
W przypadku zakupu subskrypcji z dodatkami niektóre odnowienia mogą wymagać przedłużenia tylko części uprawnień do elementów, bez wpływu na elementy z przyszłą datą wygaśnięcia.
Niezależnie od tego, które produkty są objęte odnowieniem, jeśli płatność za odnowienie zostanie odrzucona, cały zakup subskrypcji przejdzie w okres prolongaty, a konto zostanie zablokowane zgodnie z opisem w dokumentacji.
Wybór okresu regeneracji
Okres prolongaty nadal przyznaje użytkownikowi uprawnienia. Jeśli po zakupie subskrypcji z dodatkami płatność za odnowienie zostanie odrzucona, zostanie wybrany produkt z najkrótszym okresem prolongaty spośród wszystkich aktywnych produktów, a jego okres prolongaty i okres zawieszenia konta zostaną zastosowane jako okres przywrócenia w przypadku tego odnowienia.
Aktywne produkty to produkty, które były aktywne w momencie zakupu subskrypcji z dodatkami tuż przed próbą odnowienia. Nie obejmują one żadnych nowo dodanych produktów (które nie będą uprawnione do czasu odzyskania) ani żadnych produktów, które nie są już aktywne z powodu usunięcia lub wyłączenia.
Zastosowane zostanie ustawienie zawieszenia konta dla produktu z wybranym minimalnym okresem prolongaty. Jeśli jest więcej niż 1 produkt z minimalnym okresem prolongaty, ale różnymi okresami zawieszenia konta, zostanie zastosowany najdłuższy okres zawieszenia konta.
Okres prolongaty
Gdy płatność za odnowienie subskrypcji zostanie odrzucona, subskrypcja przejdzie w stan okresu prolongaty. W okresie prolongaty użytkownik nadal będzie mieć dostęp do wszystkich aktywnych elementów z poprzedniego okresu odnowienia. Jeśli po okresie prolongaty problem z formą płatności nie zostanie rozwiązany, cała subskrypcja zostanie zawieszona. Jeśli w okresie prolongaty inne produkty osiągną datę odnowienia, po wznowieniu subskrypcji po odrzuceniu płatności zostanie podjęta nowa próba obciążenia konta za te produkty.
Zawieszenie konta
Gdy zakup subskrypcji jest wstrzymany, dostęp do wszystkich elementów subskrypcji jest zawieszony do czasu odzyskania płatności.
Jeśli subskrypcja w okresie zawieszenia konta zostanie przywrócona, zakup subskrypcji będzie nadal obowiązywać. Jeśli subskrypcja nie zostanie przywrócona, produkty, w przypadku których płatność została odrzucona, wygasną, a dostęp do pozostałych produktów zostanie przywrócony na pozostały okres rozliczeniowy.
Przykład:
Użytkownik ma subskrypcję My Base Plan, która odnawia się 1 dnia każdego miesiąca. 15 sierpnia dodaje abonament dodatkowy za 10 USD miesięcznie z 7-dniowym bezpłatnym okresem próbnym. Żaden z tych produktów nie ma ustawionego okresu prolongaty, a oba mają 30-dniowy okres zawieszenia konta.
22 sierpnia użytkownik zostaje obciążony kwotą 2, 90 zł (10 zł*9/31) za okres do 31 sierpnia, ale forma płatności użytkownika wygasa wcześniej, a subskrypcja zostaje odrzucona 22 sierpnia.
Gdy subskrypcja zostanie zawieszona z powodu odrzucenia płatności, użytkownik nie będzie mieć dostępu do żadnych elementów subskrypcji z dodatkami. Pozostały czas subskrypcji, które nie są odnawiane, zostanie zwrócony użytkownikom, gdy subskrypcja przestanie być zawieszona z powodu odzyskania płatności lub anulowania.
W poprzednim przykładzie subskrypcja wchodzi w stan zawieszenia konta 22 sierpnia.
Jeśli konto zostanie odzyskane 25 sierpnia, czyli przed datą odnowienia 1 września, użytkownik odzyska dostęp do abonamentu Base Plan i dodatku tego samego dnia. Następna data rozliczenia została zmieniona na 4 września.
Jeśli konto nie zostanie odzyskane w ciągu 30 dni, 21 września subskrypcja zostanie anulowana, a użytkownik straci dostęp do dodatkowego pakietu. Do 30 września będzie mógł ponownie korzystać z pakietu podstawowego.
W tym przykładzie musisz uzyskać zaktualizowany atrybut expiryTime DLA WSZYSTKICH produktów w subskrypcji z dodatkami, ponieważ niektóre produkty mogą odzyskać uprawnienia po okresie prolongaty i zawieszenia konta.
Sprawozdawczość finansowa i uzgadnianie
Użyj raportu o zarobkach, aby porównać aktywne subskrypcje z transakcjami w Google Play. Każdy element zamówienia transakcji ma identyfikator zamówienia. W przypadku zakupów obejmujących kilka produktów raporty Zarobki i szacunkowa sprzedaż będą zawierać osobne wiersze dla każdej transakcji, np. obciążenia, opłaty, podatku i zwrotu środków, w przypadku każdego produktu.
W przypadku paneli w Konsoli Play:
Statystyki przychodów prezentowane w sekcji Raporty finansowe w konsoli są podzielone według produktów.
Zarządzanie zamówieniami odzwierciedla zakup subskrypcji z dodatkami i zawiera szczegółowe listy zakupionych produktów. W sekcji zarządzania zamówieniami możesz cofnąć, anulować lub w pełni zwrócić środki za zakup użytkownika.