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.
Uwagi
Korzystając z funkcji 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.
W subskrypcji z dodatkami możesz mieć maksymalnie 50 produktów.
Ta funkcja jest niedostępna w 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 Płatności w Google Play, takie jak dodanie zależności biblioteki Płatności w Google Play do aplikacji, zainicjowanie BillingClient i połączenie z Google Play. Ta sekcja skupia się na aspektach 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.Produkt reprezentowany przez obiekt
ProductDetailsParamsokreśla zarównoProductDetailswskazujący produkt subskrypcyjny, jak iofferTokenwybierający konkretną subskrypcjębase planluboffer.Podaj szczegóły produktu 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ę.
- Kryteria kwalifikacji oferty będą oceniane 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ę. Więcej informacji znajdziesz w artykule Przechodzenie na wyższą lub niższą wersję subskrypcji.
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ć wartościSubscriptionProductReplacementParams. - Jeśli element podstawowy nie zostanie zmieniony, nadal możesz wywołać
SubscriptionProductReplacementParams.setSubscriptionReplacementMode, aby zastosować określone zachowanie zastępowania. Odpowiednie reguły w tym przypadku znajdziesz w artykule Ponowna subskrypcja lub zmiana abonamentu 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.
Z przykładu poniżej dowiesz się, 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 muszę ustawić tryb wymiany? | Zachowanie |
|---|---|---|---|
| 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 usunięcia z opóźnieniem. |
| 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 SubscriptionUpdateParams
| Istniejące produkty | Zmodyfikowane produkty | Czy musisz ustawić informacje o zamienniku? | Zachowanie |
|---|---|---|---|
| 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 usunięcia z opóźnieniem. |
| A (produkt podstawowy), B | C (produkt podstawowy) | Tak |
|
| A (produkt podstawowy), B | C (produkt podstawowy), B | Tak | Zamiana 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
W przypadku zakupów subskrypcji z dodatkami, które zawierają wiele uprawnień do produktów, w RTDN nie jest podawane pole subscriptionId. Zamiast tego możesz użyć interfejsów Play Developer API, aby uzyskać informacje o zakupie i zobaczyć powiązane uprawnienia do produktów.
Zmiany cen dla obecnych subskrybentów
Zmiana cen subskrypcji dla obecnych subskrybentów subskrypcji z zakupem dodatków jest podobna do zmiany cen pojedynczej subskrypcji, jak opisano w sekcji Zmienianie cen subskrypcji. Istnieją jednak pewne ograniczenia i różnice funkcjonalne, 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 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 ma trwającą migrację ceny z 7 zł na 10 zł, a wzrost ceny ma nastąpić 7 lipca.
- Nowa migracja ceny z 5 USD na 6 USD rozpoczyna się w przypadku produktu B 2 czerwca. Ponieważ wzrost ceny wymagający zgody użytkownika rozpoczyna się 37 dni po migracji, najwcześniejszy wzrost ceny w przypadku 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 wzrosną lub spadną 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 subskrypcji z dodatkami i zwracanie za nie środków
Oto kilka wytycznych dotyczących wycofywania i zwracania środków za subskrypcje:
W Konsoli Play możesz zwrócić środki za konkretne zamówienie bez odbierania dostępu do subskrypcji.
Wywołaj
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:Cofnij dostęp do wszystkich elementów i zwróć 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 polem ItemBasedRefund ustawionym 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 wycofaniu produktu określonego w parametrze
ItemBasedRefundw ramach zakupu subskrypcji nadal będą aktywne inne produkty, wycofany zostanie tylko ten produkt, a środki za niego zostaną w pełni zwrócone bez przerywania stanu subskrypcji. - Jeśli po wycofaniu produktu określonego w
ItemBasedRefundw ramach zakupu subskrypcji nie pozostaną żadne aktywne produkty, produkt zostanie wycofany, w pełni zwrócony, a subskrypcja zostanie anulowana.
Uwagi
- W przypadku korzystania z
ItemBasedRefundmożna cofnąć tylko 1 element naraz. Żądanie można wywołać wiele razy, jeśli trzeba cofnąć różne elementy. - Gdy zakup subskrypcji jest w stanie odrzucenia płatności lub gdy element określony w
ItemBasedRefundnie jest własnością użytkownika lub 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 co najmniej 1 dzień i maksymalnie o rok na każde wywołanie 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.
Wygasanie produktów podczas odrzucenia płatności
W przypadku zakupu subskrypcji z dodatkami niektóre odnowienia mogą wymagać tylko przedłużenia części uprawnień do elementów bez wpływu na elementy z przyszłą datą wygaśnięcia.
Niezależnie od tego, które elementy 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, więc po zakupie subskrypcji z dodatkami, gdy płatność za odnowienie zostanie odrzucona, zostanie wybrany produkt z minimalnym 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 zostaną ustawienia zawieszenia konta dla produktu z wybranym minimalnym okresem prolongaty. Jeśli jest więcej niż 1 produkt z minimalnym okresem prolongaty, ale różne okresy zawieszenia konta, zastosowany zostanie 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 pobrania opłaty za te produkty.
Zawieszenie konta
Gdy subskrypcja jest wstrzymana, 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łą część okresu rozliczeniowego.
Przykład:
Użytkownik ma subskrypcję Mój abonament podstawowy, 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 okresu prolongaty, a oba mają 30-dniowy okres zawieszenia konta.
22 sierpnia użytkownik zostaje obciążony kwotą 2,90 zł (10 zł*9 dni/31 dni) za okres do 31 sierpnia, ale forma płatności użytkownika wygasa wcześniej i 22 sierpnia subskrypcja zostaje odrzucona.
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 na koncie z powodu odzyskania płatności lub anulowania.
W poprzednim przykładzie subskrypcja zostaje wstrzymana 22 sierpnia.
Jeśli konto zostanie odzyskane 25 sierpnia, przed datą odnowienia 1 września, użytkownik odzyska dostęp do mojego planu podstawowego i dodatkowego planu tego samego dnia. Następna data płatności zostanie 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ł korzystać z pakietu podstawowego.
W tym przykładzie musisz uzyskać zaktualizowany kod 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żywaj raportu o zarobkach, aby porównywać 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.