Subskrypcja z dodatkami

Subskrypcja z dodatkami umożliwia łączenie wielu produktów subskrypcyjnych, które można kupować, rozliczać i zarządzać nimi razem. Istniejące subskrypcje katalogu produktów można łatwo oferować jako dodatki bez konieczności specyfikacji wstępnej lub dodatkowej konfiguracji. Możesz uruchomić proces zakupu z wieloma istniejącymi produktami w abonamencie i sprzedawać je jako dodatki.

co należy wziąć pod uwagę

Podczas korzystania z subskrypcji z dodatkami weź pod uwagę te informacje:

  • Subskrypcja z dodatkami jest obsługiwana tylko w przypadku automatycznie odnawianych abonamentów podstawowych.

  • Wszystkie elementy w zakupie muszą mieć ten sam okres rozliczeń. Nie możesz na przykład mieć subskrypcji rozliczanej rocznie z dodatkami rozliczanymi co miesiąc.

  • W ramach subskrypcji z dodatkami możesz kupić 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

Z tej sekcji dowiesz się, jak zintegrować subskrypcję z funkcją dodatków z biblioteką płatności Google Play (PBL). Zakładamy, że znasz już wstępne kroki integracji z PBL, takie jak dodanie zależności PBL do aplikacji, inicjowanie BillingClientłączenie z Google Play. W tej sekcji omawiamy aspekty integracji PBL, które są specyficzne dla subskrypcji z dodatkami.

Uruchamianie procesu zakupu

Aby rozpocząć proces zakupu subskrypcji z dodatkami:

  1. Pobierz wszystkie elementy subskrypcji, używając metody BillingClient.queryProductDetailsAsync.

  2. Ustaw obiekt ProductDetailsParams dla każdego elementu.

    Element reprezentowany przez obiekt ProductDetailsParams, który określa zarówno ProductDetails wskazujący element subskrypcji, jak i offerToken, który wybiera konkretną subskrypcję base plan lub offer.

  3. W metodzie BillingFlowParams.Builder.setProductDetailsParamsList podaj szczegóły produktu. Klasa BillingFlowParams określa szczegóły procesu zakupu.

    Ten przykład pokazuje, jak uruchomić proces płatności w przypadku zakupu abonamentu z wieloma elementami:

    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 ramach zakupu;

  • Aby zapewnić zgodność dat odnowienia dodatku z datami odnowienia produktu podstawowego, Google Play może wprowadzić proporcjonalne opłaty po zakończeniu okresu próbnego lub fazy cen promocyjnych.
  • Zgodność oferty będzie sprawdzana oddzielnie w przypadku każdego produktu.

Przetwarzanie zakupów

Przetwarzanie subskrypcji z dodatkami przebiega tak samo jak przetwarzanie zakupów pojedynczych produktów, jak opisano w artykule Integracja Biblioteki płatności w Google Play z aplikacją. Jedyną różnicą jest to, że użytkownik może otrzymać kilka uprawnień w ramach jednego zakupu. Zakup subskrypcji z dodatkami zwraca wiele elementów, które można pobrać za pomocą interfejsu Purchase.getProducts() w bibliotece Płatności w Google Play, a potem listy lineItems w interfejsie purchases.subscriptionsv2.get interfejsu Google Play Developer API.

Modyfikowanie subskrypcji za pomocą dodatków

Wszelkie zmiany w subskrypcji z dodatkami powodują przejście na wyższą lub niższą wersję. Więcej informacji znajdziesz w artykule Uaktualnianie subskrypcji.

Aby zmienić lub przywrócić istniejący zakup subskrypcji z dodatkami w aplikacji, musisz wywołać interfejs API launchBillingFlow z dodatkowymi parametrami i zadbać o to, aby:

  • Zawsze wywołuj funkcję setOldPurchaseToken z tokenem zakupu bieżącej subskrypcji.
  • Aby przejść na wyższą lub niższą wersję elementu podstawowego albo zmienić jego abonament, zadzwoń pod numer setSubscriptionReplacementMode, aby określić, jak ma być obsługiwana zmiana abonamentu między elementami podstawowymi starego a nowym zakupem abonamentu z dodatkami. W przeciwnym razie nie trzeba go ustawiać.
  • Jeśli element podstawowy nie uległ zmianie, nadal możesz wywołać funkcję setSubscriptionReplacementMode, aby zastosować określone zachowanie podziału. Więcej informacji o odpowiednich zasadach znajdziesz w artykule Przedłużanie subskrypcji lub zmiana planu w ramach tej samej subskrypcji.
  • Nowe dodatki zostaną zastosowane natychmiast z proporcjonalnym kosztem, aby dopasować datę kolejnego odnowienia do elementu podstawowego w subskrypcji.
  • Usuwane dodatki wygasną z końcem bieżących okresów rozliczeniowych.
  • Podczas uruchamiania procesu płatności musisz określić wszystkie aktywne elementy abonamentu wraz z dodatkami, z wyjątkiem tych, które mają zostać usunięte, oraz nowych dodatków.

Ten przykład pokazuje, jak wywołać interfejs API launchBillingFlow podczas zmiany dotychczasowego zakupu subskrypcji z dodatkami:

Java

BillingClient billingClient = ;

int replacementMode =;

// ProductDetails obtained from queryProductDetailsAsync().
ProductDetailsParams productDetails1 = ...;
ProductDetailsParams productDetails2 = ...;
ProductDetailsParams productDetails3 = ...;

ArrayList newProductDetailsList = 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 przedstawiono różne scenariusze modyfikacji subskrypcji z dodatkami i odpowiadające im zachowania.

Istniejące elementy Zmienione elementy Czy musisz ustawić tryb wymiany? Działanie
A (element podstawowy), B A (element podstawowy) Nie Element B jest zaplanowany do opóźnionego usunięcia.
A A (element podstawowy), B Nie Element B jest dodawany natychmiast z proporcjonalnym kosztem.
A (element podstawowy), B A (element podstawowy), C Nie
  • B jest zaplanowany do opóźnionego usunięcia.
  • C zostanie dodana natychmiast z proporcjonalnym obciążeniem.
A (element podstawowy), B B (element podstawowy) Nie Zaplanowano opóźnione usunięcie.
A (element podstawowy), B C (element podstawowy) Tak
A (element podstawowy), B C (element podstawowy), B Tak Zastąpienie A -> C zależy od setSubscriptionReplacementMode.
A (element podstawowy), B C (element podstawowy), D Tak
  • Zastąpienie A -> C zależy od setSubscriptionReplacementMode.
  • B jest zaplanowany do opóźnionego usunięcia.
  • D zostanie dodany natychmiast z proporcjonalną opłatą.

Powiadomienia w czasie rzeczywistym dla deweloperów

Pole subscriptionId nie jest uwzględniane 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 powiązanych uprawnieniach.

Zmiany cen dla obecnych subskrybentów

Zmiana cen subskrypcji dla obecnych subskrybentów subskrypcji z dodatkami przebiega podobnie jak zmiana cen subskrypcji z pojedynczymi produktami opisana w artykule Zmienianie cen subskrypcji. Istnieją jednak pewne ograniczenia i różnice funkcjonalne, o których mowa w tej sekcji.

Zakończenie starszej kohorty cenowej

Zakończenie starszej kohorty ma również wpływ na subskrypcje z dodatkowymi zakupami. Obowiązują te zasady:

  • Wszystkie nierozpatrzone wzrosty cen z możliwością akceptacji powinny mieć ten sam czas odnowienia z nową ceną. Jeśli element w ramach subskrypcji z dodatkami ma wzrost ceny wymagający zgody użytkownika, który nie został jeszcze potwierdzony przez użytkownika, wszelkie nowe wzrosty cen wymagające zgody użytkownika w przypadku innych elementów w ramach zakupu zostaną zignorowane, chyba że nowa cena będzie miała ten sam czas odnowienia co dotychczasowy wzrost ceny w stanie WYMAGAJĄCY ZGODY. Gdy użytkownik potwierdzi wzrost ceny, wszystkie nowsze zmiany cen zostaną zarejestrowane. Użytkownicy mogą zaakceptować wszystkie niezweryfikowane wzrosty cen wymagające zgody użytkownika tylko jednorazowo.

    Przykład:

    • Rozważ subskrypcję z dodatkami (pozycje A i B), która odnawia się 7 każdego miesiąca.
    • W przypadku produktu A trwa zmiana ceny z 7 na 10 USD. Przewidywany termin jej wprowadzenia to 7 lipca.
    • Nowa migracja cen z 5 USD na 6 USD rozpoczyna się 2 czerwca w przypadku produktu B. Ponieważ wzrost ceny z możliwością akceptacji zaczyna obowiązywać 37 dni po migracji, najwcześniejsza podwyżka ceny produktu B nastąpi 7 sierpnia.

    W tym scenariuszu dopóki użytkownik nie zaakceptuje zmiany ceny elementu A (dopóki nie będzie on w stanie CONFIRMED), zmiana ceny elementu B nie zostanie zarejestrowana w przypadku tego zakupu subskrypcji, a SubscriptionPurchaseV2 nie zwróci szczegółów zmiany ceny elementu B. Gdy użytkownik potwierdzi zmianę ceny produktu A, rozpocznie się zmiana ceny produktu B. Użytkownik otrzymuje 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 z Google Play zawiera listę wszystkich elementó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ć tylko cały zakup subskrypcji z dodatkami, korzystając z interfejsu API Google Play Developer.

Gdy zakup subskrypcji zostanie anulowany, ale nie zostanie cofnięty, żaden z produktów nie będzie automatycznie odnawiany, ale użytkownik będzie mieć dostęp do tych produktów do końca odpowiednich okresów rozliczeniowych.

Unieważnia subskrypcji z dodatkami i zwrot środków za nie

Oto kilka wskazówek dotyczących anulowania subskrypcji i zwrotów środków:

  • Użyj Konsoli Play, aby zwrócić określoną kwotę za konkretne zamówienie bez odwoływania dostępu do subskrypcji.

  • Zadzwoń pod numer orders.refund, aby w pełni zwrócić środki za określone płatności za subskrypcję, które użytkownik wniósł bez odmowy dostępu do subskrypcji.

  • Aby natychmiast odłączyć wszystkie elementy subskrypcji, zadzwoń pod numer purchases.subscriptionsv2.revoke. Dzięki temu interfejsowi API możesz:

    • Odwołać dostęp do wszystkich elementów i zaproponować proporcjonalny zwrot środków.

    • Gdy anulujesz subskrypcję z dodatkami, korzystając ze zwrotu środków proporcjonalnie do czasu trwania subskrypcji, zwrot środków zostanie wydany za ostatnie zamówienie każdego produktu z proporcjonalną kwotą na podstawie czasu pozostałego do następnego odnowienia.

    • Cofnij dostęp do wszystkich elementów i zrealizuj FullRefund.

    • Odeprzyj dostęp do pojedynczego elementu z pełnym zwrotem środków za ten element.

Unieważnia pojedynczego elementu w ramach subskrypcji z dodatkami

Aby odwołać poszczególne elementy subskrypcji w subskrypcji z dodatkami, bez odwoływania całego zakupu, wywołaj funkcję purchases.subscriptionsv2.revoke z polem ItemBasedRefund w kontekście RevocationContext. W polu ItemBasedRefund możesz ustawić productId produktu, który chcesz wycofać i zwrócić.

Pole ItemBasedRefund można ustawić w przypadku zakupów obejmujących co najmniej 1 element abonamentu z automatycznym odnawianiem.

  • Jeśli po cofnięciu produktu określonego w sekcji ItemBasedRefund w ramach zakupu subskrypcji nadal pozostają aktywne inne produkty, zostanie cofnięty tylko ten produkt, a użytkownik otrzyma pełny zwrot środków bez zakłócania stanu subskrypcji.
  • Jeśli po cofnięciu elementu określonego w sekcji ItemBasedRefund nie ma już aktywnych elementów w zakupie subskrypcji, element zostanie cofnięty, środki w pełni zwrócone, a abonament anulowany.

co należy wziąć pod uwagę

  • Gdy używasz ItemBasedRefund, możesz cofnąć tylko 1 element naraz. Jeśli trzeba cofnąć różne elementy, żądanie może być wywoływane wielokrotnie.
  • Jeśli zakup subskrypcji znajduje się w stanie odrzucenia płatności lub produkt określony w elementach ItemBasedRefund nie jest własnością użytkownika lub wygasł, odrzucenie produktu jest zablokowane.
  • Odrzucenie produktu nie jest obsługiwane w przypadku subskrypcji przedpłaconej.

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, jakie elementy są objęte odnowieniem, jeśli płatność za odnowienie zostanie odrzucona, cała subskrypcja wejdzie w okres karencji, a konto zostanie wstrzymane zgodnie z opisem w tej dokumentacji.

Wybór okresu przywracania

Ponieważ okres prolongaty nadal przyznaje użytkownikowi uprawnienia, po zakupie subskrypcji z dodatkami, gdy płatność za odnowienie zostanie odrzucona, wybrany zostanie element z minimalnym okresem prolongaty spośród wszystkich aktywnych elementów, a jego okres prolongaty i okres wstrzymania konta jako okres odzyskiwania zostaną zastosowane do tego odnowienia.

Aktywne elementy obejmują elementy, które były aktywne w przypadku zakupu subskrypcji z dodatkami tuż przed próbą odnowienia. Nie obejmują one żadnych nowo dodanych elementów (które nie będą uprawnione do odzyskania) ani elementów, które nie są już aktywne z powodu usunięcia lub odrzucenia.

Stosuje się ustawienie zawieszenia konta elementu z wybranym minimalnym okresem prolongaty. Jeśli jest więcej niż 1 element z minimalnym okresem karencji, ale z różnymi okresami blokady konta, stosuje się najdłuższy okres blokady.

Okres prolongaty

Gdy płatność za odnowienie subskrypcji zostanie odrzucona, zakup subskrypcji wejdzie w stan prolongaty. W okresie przejściowym użytkownik nadal będzie mieć dostęp do wszystkich aktywnych elementów z poprzedniego okresu odnowienia. Po zakończeniu okresu prolongaty, jeśli forma płatności nie zostanie naprawiona, cała subskrypcja zostanie zawieszona. Jeśli inne usługi dotrą do daty odnowienia w okresie prolongaty, po przywróceniu subskrypcji po odrzuceniu płatności rozpoczniemy próbę pobrania za nie opłaty.

Zawieszenie konta

Podczas wstrzymania zakupu subskrypcji dostęp do wszystkich elementów subskrypcji jest zawieszony do czasu, gdy uda się zrealizować płatność.

Jeśli subskrypcja na koncie zawieszonym zostanie przywrócona, zakup subskrypcji pozostanie bez zmian. Jeśli subskrypcja nie zostanie przywrócona, treści, za które płatność została odrzucona, wygasną, a dostęp do pozostałych treści zostanie przywrócony do końca ich okresów rozliczeniowych.

Przykład:

  • Użytkownik ma subskrypcję Mój abonament podstawowy, która odnawia się 1 każdego miesiąca. 15 sierpnia dodaje abonament dodatkowy za 10 USD miesięcznie z 7-dniowym bezpłatnym okresem próbnym. Żadne z tych elementów nie ma ustawionego okresu prolongaty, a oba mają 30-dniowy okres zawieszenia konta.

  • 22 sierpnia użytkownik zostaje obciążony opłatą w wysokości 2,90 zł (10*9/31) proporcjonalnie do liczby dni do 31 sierpnia, ale forma płatności wygasa wcześniej i 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 w ramach subskrypcji z dodatkami. Pozostały czas na nieodnawiane elementy zostanie przywrócony użytkownikom, gdy subskrypcja przestanie być zawieszona, ponieważ płatność została odzyskana lub anulowana.

W poprzednim przykładzie subskrypcja zostaje wstrzymana 22 sierpnia.

  • Jeśli konto zostanie przywrócone 25 sierpnia, przed datą odnowienia 1 września, użytkownik odzyska dostęp do abonamentu Base Plan i dodatkowego abonamentu tego samego dnia. Data następnej płatności została zmieniona na 4 września.

  • Jeśli konto nie zostanie odzyskane po 30 dniach, subskrypcja zostanie anulowana 21 września, a użytkownik utraci dostęp do dodatkowego planu. Dostęp do podstawowego planu będzie przywrócony 30 września.

W tym przykładzie musisz uzyskać zaktualizowane expiryTime dla WSZYSTKICH elementów w subskrypcji z dodatkami, ponieważ niektóre z nich mogą przywrócić uprawnienia po okresie prolongaty i zawieszenia konta.

Sprawozdawczość finansowa i uzgodnienia

Aby uzgodnić aktywne subskrypcje z transakcjami w Google Play, skorzystaj z raportu Zarobki. Każdy element zamówienia ma identyfikator zamówienia. W przypadku zakupów obejmujących kilka produktów raporty Zarobki i szacunkowe przychody będą zawierać osobne wiersze dla każdej transakcji, np. dotyczące opłaty, podatku i zwrotu środków za poszczególne produkty.

W przypadku paneli w Konsoli Play:

  • Statystyki przychodów przedstawione w sekcji Raportowanie finansowe w Konsoli są podzielone według elementów.

  • Zarządzanie zamówieniami uwzględnia zakup subskrypcji z dodatkami i pokazuje szczegółowe listy zakupionych produktów. W sekcji zarządzania zamówieniami możesz anulować zakupy użytkownika lub przyznać mu pełny zwrot środków.