Cykl życia subskrypcji

Zakup subskrypcji może nastąpić w kilku stanach w ramach i cykl życia w zależności od wielu czynników, w tym sposobu automatycznego odnawiania, płatności sytuacje związane z odrzuceniem aplikacji i działaniami dotyczącymi zarządzania deweloperami.

Obsługa cyklu życia subskrypcji odnawianych automatycznie

Gdy zmieni się stan subskrypcji użytkownika, serwer backendu otrzyma żądanie SubscriptionNotification wiadomość

Rysunek 1. Stany cyklu życia i zdarzenia przejścia dla instancji automatycznie odnawianych subskrypcji.

Aby zaktualizować stan w backendzie, wywołaj metodę purchases.subscriptionsv2.get Interfejs API z tokenem zakupu dołączonym do powiadomienia. Ten punkt końcowy zapewnia ostatni stan subskrypcji, który otrzymał token zakupu i jest uważany za które jest źródłem danych do zarządzania subskrypcjami.

Token zakupu jest ważny od momentu rejestracji subskrypcji przez 60 dni utraty ważności. Po tej dacie token zakupu przestanie być ważny wywołaj interfejs Google Play Developer API.

Nowe automatycznie odnawiane subskrypcje

Gdy użytkownik kupi subskrypcję, w wiadomości wysłanej w aplikacji SubscriptionNotification pojawi się wiadomość typ SUBSCRIPTION_PURCHASED jest wysyłany do klienta RTDN. Niezależnie od tego, czy otrzymasz lub zarejestrujesz nowy zakup w aplikacji PurchasesUpdatedListener lub ręcznie pobieraj zakupy na onResume() aplikacji, musisz przetworzyć nowy zakup w bezpiecznym z backendem. W tym celu należy wykonać następujące czynności:

  1. Zapytanie purchases.subscriptionsv2.get w punkcie końcowym, aby uzyskać subskrypcję zasób zawierający ostatni stan subskrypcji.
  2. Upewnij się, że wartość parametru subscriptionState to SUBSCRIPTION_STATE_ACTIVE.
  3. Zweryfikuj zakup.
  4. Przyznaj użytkownikowi dostęp do treści. Konto użytkownika powiązane z zakup można rozpoznać za pomocą ExternalAccountIdentifiers obiekt z zasobu subskrypcji, jeśli identyfikatory zostały ustawione przy zakupie za pomocą setObfuscatedAccountId oraz setObfuscatedProfileId.
.

Biblioteka płatności w Play zawiera też metodę potwierdzenia subskrypcji, acknowledgePurchase() oraz metody sprawdzania stanu potwierdzenia, isAcknowledged() Zalecamy jednak zajmowanie się przetwarzaniem zakupów na backendzie i lepsze zabezpieczenia.

Zasób subskrypcji dla nowych zakupów wygląda podobnie do tego przykład:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

Odnawianie subskrypcji

W przypadku subskrypcji innych niż ratalne, automatycznie odnawiane, SUBSCRIPTION_RENEWED gdy subskrypcja zostanie odnowiona. Na raty subskrypcji, SUBSCRIPTION_RENEWED przy każdym opłata za subskrypcję jest naliczana w dniu rozliczenia. Upewnij się, że użytkownik nie rusza się uprawnione do subskrypcji, a potem zaktualizuje stan subskrypcji o nowy expiryTime w ramach subskrypcji zasób zwrócony z Google Play Interfejs API programisty. Zasób subskrypcji wygląda podobnie do tego przykładu:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ]
}

Odnawianie subskrypcji nie musisz potwierdzać.

Okres prolongaty

Jeśli pojawią się problemy z płatnościami za odnowienie subskrypcji, Google powiadomi o tym użytkownika i okresowo próbuje odnowić subskrypcję przez jakiś czas, po wygaśnięciu subskrypcji. Ten okres regeneracji może obejmować okres prolongaty po którym następuje okres zawieszenia konta. W okresie prolongaty użytkownik powinien nadal mają dostęp do uprawnień w ramach subskrypcji.

queryPurchasesAsync() nadal zwraca zakupy w okresie prolongaty. Jeśli Twoja aplikacja polega wyłącznie na sprawdzeniu, czy użytkownik jest uprawniony do: queryPurchasesAsync to aplikacja powinna automatycznie obsługiwać okresy prolongaty, ponieważ te subskrypcje są widoczne jako aktywne w Bibliotece płatności w Play.

Synchronizowanie stanu subskrypcji z backendem pozwala uzyskać większą wiedzę odrzucania płatności i daje więcej informacji kontekstowych, gdy próbujesz ograniczyć rezygnacje. Posłuchaj: SubscriptionNotification wiadomości typu SUBSCRIPTION_IN_GRACE_PERIOD, aby otrzymać powiadomienie, gdy użytkownik wpisze okresu prolongaty. Gdy użytkownik znajduje się w okresie prolongaty, subskrypcja Zasób zawiera autoRenewEnabled = true. Google Play dynamicznie rozszerza Wartość expiryTime do końca okresu prolongaty ze względu na uprawnienia powinna obowiązywać do momentu anulowania przez użytkownika lub upłynięcia okresu prolongaty maksymalnej długości. Wartość pola subscriptionState w tym okresie wynosi SUBSCRIPTION_STATE_IN_GRACE_PERIOD Zasób subskrypcji wygląda podobnie do następujący przykład:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_future,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

Google Play informuje użytkowników znajdujących się w okresie prolongaty o odrzuceniu płatności. i prosi o rozwiązanie problemów z formą płatności w Sklepie Play. Gdy rozpoczyna okres prolongaty, warto zachęcić go do poprawienia formę płatności. Prosty sposób jest to użycie funkcji Wysyłanie wiadomości w aplikacji API. Jeśli wywołujesz ten interfejs API po otwarciu aplikacji użytkownik widzi tymczasowo komunikat Play pasek powiadomień informujący użytkownika o odrzuceniu płatności. Ta wiadomość zawiera też precyzyjny link, za pomocą którego użytkownik może poprawić formę płatności w Google Graj.

Gdy tylko użytkownik zmieni formę płatności, subskrypcja zostanie odnowiona za od pierwotnej daty odnowienia, przy czym możesz to zrobić w sposób opisany w Odnowienia.

Jeśli użytkownik nie rozwiąże problemu z formą płatności w okresie prolongaty, subskrypcja zostanie zawieszona i utracisz uprawnienia.

Dostęp w okresie prolongaty i regeneracja

Rysunek 2 przedstawia oś czasu subskrypcji rozpoczynającej się w okresie prolongaty. wraca, gdy użytkownik rozwiąże problem z formą płatności. Po okresie prolongaty użytkownik powinien utracić dostęp do korzyści płynących z subskrypcji i przejść do zawieszenia konta.

Rysunek 2. Harmonogram subskrypcji rozpoczynającej okres prolongaty w okresie dojrzewania i powraca, zanim się zakończy.

Należy pamiętać o następujących kwestiach:

  • W okresie prolongaty użytkownik powinien zachować dostęp do korzyści wynikających z subskrypcji.
  • Gdy w okresie prolongaty subskrypcja zostanie wznowiona, data odnowienia nie są resetowane.
  • Jeśli wydłużysz okres prolongaty (np. z 7 do 14 dni), użytkownicy, którzy jest w okresie prolongaty, aby uzyskać dłuższy dostęp do korzyści wynikających z subskrypcji.
  • Jeśli skrócisz okres prolongaty, użytkownicy, którzy korzystają już ze starej wersji usługi po upływie nowego okresu prolongaty, będą mieli dostęp do korzyści z subskrypcji. odwołane natychmiast. Jeśli na przykład skrócisz okres prolongaty ze Użytkownicy w okresie 8–14 dni poprzedniego okresu prolongaty w ciągu 14–7 dni korzyści z subskrypcji zostaną natychmiast anulowane.
  • Subskrypcja pozostanie aktywna i nie otrzymasz okresu prolongaty. okres RTDN do zakończenia cichego okresu prolongaty

Cichy okres prolongaty

Możesz ustawić okres prolongaty wynoszący 0 dni, ale Google Play poczeka co najmniej 1 dzień, zapewnić wystarczającą ilość czasu na ponowne próby dokonania płatności. Ten okres cichej karencji zapewnia zabezpieczenia w przypadku przetwarzania płatności. W ciągu tego 24-godzinnego okresu subskrypcji ACTIVE stan.

Aby być na bieżąco ze zmianami stanu subskrypcji, będzie nasłuchiwać powiadomień dla deweloperów w czasie rzeczywistym (RTDN) i reagować na nie. Wywołaj funkcję purchases.subscriptionsv2.get() w czasie RTDN, a nie po czasie ważności, aby uzyskać dokładniejsze dane. stanu subskrypcji.

W zależności od stanu subskrypcji po 24-godzinnym okresie cichej karencji powinno wyświetlić się jedno z tych powiadomień:

  • SUBSCRIPTION_ON_HOLD (jeśli jest włączona)
  • SUBSCRIPTION_CANCELED (jeśli anulowano)
  • SUBSCRIPTION_EXPIRED (jeśli wygasł)
  • SUBSCRIPTION_RENEWED (po odnowieniu)

Możesz również wywołać metodę subscriptionV2.get() w dowolnym momencie po parametrze 24-godzinny okres cichy, w którym można uzyskać najnowszy stan subskrypcji.

Zawieszenie konta

Jeśli wystąpią problemy z płatnością za odnowienie subskrypcji, po okresie prolongaty. , rozpoczyna się okres zawieszenia konta. Gdy subskrypcja powoduje zawieszenie konta, musisz zablokować dostęp do subskrypcji zezwolenie.

W trakcie zawieszenia konta należy nadal przeprowadzać czynności anulowań, przywrócenie subskrypcji lub ponowny jej zakup. bo użytkownik może dokonać tych zmian w czasie trwania subskrypcji jest wstrzymany.

Numery RTDN informują o tym, że użytkownik rozpoczyna okres zawieszenia konta, jak najszybciej wyjaśnić powód zawieszenia dostępu do subskrypcji. Prosty sposób to użycie funkcji Wysyłanie wiadomości w aplikacji API. Wywołuję ten interfejs API, gdy użytkownik uruchomi aplikację, wyświetli mu się komunikat na tymczasowym pasku powiadomień. informujący o odrzuceniu płatności. Ta wiadomość zawiera też: precyzyjny link, za pomocą którego użytkownik może poprawić formę płatności w Google Play.

Jeśli użytkownicy mają dostęp do treści objętych subskrypcją poza aplikacją, mogą odkryć, że utraciły dostęp na innych platformach. Możesz możesz wysłać do użytkownika powiadomienie push lub e-maila z informacją, że subskrypcja jest już nieaktywna z powodu odrzucenia płatności.

Subskrypcja nie jest zwracana przez queryPurchasesAsync() podczas zawieszenia konta. Jeśli aplikacja korzysta z tej metody, dotychczasowych zakupów, domyślnie włącz zawieszenie konta.

Za pomocą aplikacji dla programistów w czasie rzeczywistym , otrzymasz SubscriptionNotification wiadomość o typie SUBSCRIPTION_ON_HOLD, gdy subskrypcja zostanie zawieszona na koncie. Zadzwoń do nas purchases.subscriptionsv2.get z bezpiecznego serwera backendu, aby pobrać nową subskrypcję i informacjami o nich. Podczas konta pozostaw pole expiryTime subskrypcji. zasób jest ustawiona na przeszłą sygnaturę czasową, a pole subscriptionState ma wartość SUBSCRIPTION_STATE_ON_HOLD:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

Aby przywrócić dostęp, użytkownik musi rozwiązać problem z formą płatności. Google Play informuje użytkowników w o odrzuceniu płatności na koncie i zachęcaj ich do naprawienia błędu. formę płatności.

Gdy użytkownik poprawi formę płatności, subskrypcja powróci do aktywnej i trzeba będzie przywrócić dostęp do subskrybowanych treści. W tym przypadku token zakupu jest taki sam jak przed zawieszeniem konta, ponieważ wracamy do tego samego zakupu i otrzymujesz RTDN z typem SUBSCRIPTION_RECOVERED

W przypadku subskrypcji ratalnych płatności mogą zostać odrzucone i odzyskane przez każdej pojedynczej próby płatności.

Po przywróceniu Biblioteka płatności w Play zwróci subskrypcję do metodę queryPurchasesAsync(). Jeśli użyjesz tej metody, aby określić, czy użytkownik jest uprawniony do subskrypcji, to aplikacja powinna automatycznie po przywróceniu subskrypcji po zawieszeniu konta.

Posłuchaj: SubscriptionNotification wiadomość typu SUBSCRIPTION_RECOVERED, aby otrzymywać powiadomienia o został przywrócony, a użytkownik powinien odzyskać dostęp. Jeśli poprosisz o subskrypcję po otrzymaniu tego powiadomienia w polu expiryTime zostanie ustawiona sygnatura czasowa w przyszłości, a pole subscriptionState będzie ustawione na Jeszcze raz SUBSCRIPTION_STATE_ACTIVE:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      ...
    }
  ],
}

Jeśli użytkownik nie rozwiąże problemu z formą płatności przed zakończeniem zawieszenia konta okres, zamiast tego otrzymasz numer RTDN typu SUBSCRIPTION_CANCELED. Dla: instrukcje postępowania w przypadku anulowania znajdziesz w sekcji Anulowanie. Gdy w przypadku zapytania o subskrypcję, która została anulowana w ten sposób, zwrócony Pole expiryTime ma ustawioną sygnaturę czasową z przeszłości:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

Natychmiast po otrzymaniu powiadomienia o anulowaniu konta użytkownik otrzyma też RTDN z typem SUBSCRIPTION_EXPIRED, ponieważ użytkownik z płatnych uprawnień, a subskrypcja wygasła z powodu anulowania. Możesz obchodzić się z taką datą w zwykły sposób.

Użytkownik może odzyskać dostęp, ponownie kupując ten sam abonament lub dowolny inny abonament oferowany przez Ciebie w aplikacji w okresie zawieszenia konta przy zakupie. W takim przypadku wystawiany jest nowy token zakupu, a zwracana jest nowa wartość w ramach zdarzenia SUBSCRIPTION_PURCHASED, które reprezentuję nową instancję.

Dostęp do zawieszenia konta i jego odzyskiwanie

Rysunek 3 przedstawia oś czasu subskrypcji, w przypadku której następuje zawieszenie konta. wraca, gdy użytkownik rozwiąże problem z formą płatności.

Rysunek 3. Oś czasu subskrypcji, która pojawia się konto zostaje zawieszone i odzyskiwane przed końcem okresu próbnego.

Podobnie jak w poprzednim przykładzie, wykres 4 przedstawia oś czasu subskrypcji. które najpierw przechodzi w okres prolongaty przed zawieszeniem konta, a następnie odzyskuje pozycję po zawieszeniu.

Rysunek 4. Harmonogram subskrypcji rozpoczynającej okres prolongaty okres, po którym konto jest zawieszone, i wraca do stanu, blokada się kończy.

Należy pamiętać o następujących kwestiach:

  • Zanim subskrypcja zostanie zawieszona, Google Play wygeneruje dodatkowe próbuje obciążyć formę płatności przez maksymalnie 48 godzin. Użytkownik zachowuje korzyści z subskrypcji w tym okresie. Gdy upłynie okres ponawiania prób, subskrypcja zostaje zawieszona, więc użytkownik powinien utracić dostęp do korzyści wynikających z subskrypcji.
  • Subskrypcja przechodzi w stan zawieszenia konta bezpośrednio z chwilą, wznowiona zostanie po wstrzymaniu i w związku z niezrealizowaną formą płatności.
  • Po przywróceniu subskrypcji po zawieszeniu konta data odnowienia jest resetowana.

Zakończenie okresu wypożyczenia

Po wygaśnięciu subskrypcji użytkownik powinien utracić do niej dostęp. O Wysłano wiadomość typu SUBSCRIPTION_EXPIRED w: SubscriptionNotification tę sprawę. Gdy otrzymasz to powiadomienie, skontaktuj się z deweloperem w Google Play. API do pobierania najnowszej subskrypcji . Gdy potwierdzisz, że subscriptionState to SUBSCRIPTION_STATE_EXPIRED, usuń upoważnienie i zarejestruj stan zakupu jako nieprawidłowy na z backendem. Zasób subskrypcji wygląda podobnie do tego przykładu:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time_in_past,
      ...
    }
  ],
}

Anulowania

Użytkownik może dobrowolnie anulować subskrypcję w centrum subskrypcji w Google Play. lub automatycznie anulować subskrypcję, jeśli nie powróci do poprzedniego stanu. mieć zawieszone konto. Deweloperzy mogą też aktywować anulowanie przez purchases.subscriptions.cancel Po anulowaniu subskrypcji użytkownik zachowuje dostęp do treści do na koniec bieżącego cyklu rozliczeniowego. Po zakończeniu cyklu rozliczeniowego dostęp powinien zostać unieważnione.

Anulowanie automatycznie odnawianej subskrypcji, która nie jest rata, powoduje uruchomienie SUBSCRIPTION_CANCELED powiadomienie. Kiedy to powiadomienie, subskrypcja Zasób zwrócony z interfejsu Google Play Developer API zawiera pole subscriptionState. ma wartość SUBSCRIPTION_STATE_CANCELED, a pole expiryTime zawiera Data, od której użytkownik powinien utracić dostęp do subskrypcji. Jeśli data przypada w w przeszłości, użytkownik powinien natychmiast utracić uprawnienia. Może się tak zdarzyć, na przykład jeśli użytkownik anuluje subskrypcję podczas korzystania z konta wstrzymanie z powodu odrzucenia płatności.

Zasób subskrypcji anulowanego zakupu wygląda podobnie do tego: przykład:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ],
}

W przypadku subskrypcji ratalnych SUBSCRIPTION_CANCELLATION_SCHEDULED powiadomienie jest wysyłane po anulowaniu przez użytkownika i gdy na koncie pozostają płatności za okres zobowiązania. Anulowanie oczekuje na realizację. Data wejścia w życie na koniec bieżącego okresu zobowiązania. Gdy otrzymasz to powiadomienie, zasób subskrypcji zwrócony z interfejsu Google Play Developer API zawiera wartość Pole subscriptionState ustawiono na: SUBSCRIPTION_STATE_ACTIVE, ponieważ subskrypcja ratalna jest nadal aktywna do końca okresu zobowiązania. Istnieje jednak pusty obiekt pending cancel. Wysyłane jest powiadomienie SUBSCRIPTION_CANCELED, a po nim SUBSCRIPTION_EXPIRED na koniec okresu zobowiązania.

Zasób subskrypcji kupna subskrypcji ratalnej, który jest oczekujące anulowanie wygląda podobnie do tego przykładu:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_plan01",
      "expiryTime": expiration_time,
      "autoRenewingPlan": {
        "autoRenewEnabled": true,
        "recurringPrice": {
          "currencyCode": "USD",
          "units": "1",
          "nanos": 990000000
        },
        "installmentDetails": {
          "initialCommittedPaymentsCount": 6,
          "remainingCommittedPaymentsCount": 5,
          "pendingCancellation": {}
      ...
        }
      }
    }
  ],
}

Możesz zajrzeć do pola canceledStateContext w zasobie subskrypcji, aby dowiedz się, dlaczego subskrypcja została anulowana (np. czy anulowano przez użytkownika, system lub przez Ciebie). Jeśli subskrypcja była anulowane przez użytkownika, w polu userInitiatedCancellation możesz (dowiedz się, dlaczego użytkownik anulował subskrypcję. Może to ułatwić komunikację strategii ustalania stawek.

Jeśli subskrypcja została anulowana, ale jeszcze nie wygasła, jest nadal zwrócone z queryPurchasesAsync(). W aplikacji możesz wyświetlić komunikat informujący użytkownika, że subskrypcja została anulowana z informacją o dacie jej wygaśnięcia.

Odwołania

Subskrypcję można anulować z różnych powodów, np. z Twojego backendu anulując subskrypcję, używając purchases.subscriptionsv2.revoke lub zwrot środków za zakup. W takiej sytuacji unieważnij atrybut natychmiast. Komunikat SubscriptionNotification określonego typu W takim przypadku wysyłana jest wartość SUBSCRIPTION_REVOKED. Po otrzymaniu powiadomienia, subskrypcja Zasób zwrócony z interfejsu Google Play Developer API zawiera pole subscriptionState. ustawiono na SUBSCRIPTION_STATE_EXPIRED.

Zasób subskrypcji dla anulowanego zakupu wygląda podobnie do tego: przykład:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ]
}

Odroczone subskrypcje

Jest wiele powodów, dla których warto zdecydować się na zezwolenie. Można np. udostępnić użytkownikom bezpłatny dostęp w ramach specjalnej promocja, np. przez tydzień bezpłatnie na zakup filmu lub i otwierać przed klientem wyraz dobrej woli. Za pomocą purchases.subscriptions.defer z interfejsu Play Developer API, aby przesunąć datę następnej płatności za automatycznie odnawianą subskrypcję. Gdy to zrobisz, SubscriptionNotification wysłana wiadomość typu SUBSCRIPTION_DEFERRED. W okresie odroczenia użytkownik subskrybuje Twoje treści z pełnym dostępem, ale nie jest za to obciążany. data odnowienia subskrypcji zostanie zmieniona na nową.

W przypadku abonamentów przedpłaconych możesz odroczyć wygaśnięcie za pomocą interfejsu API odroczenia płatności obecnie się znajdujesz.

Zasób subskrypcji odroczonej subskrypcji wygląda podobnie do następujący przykład:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_future,
      ...
    }
  ],
}

Wstrzymane subskrypcje

Możesz zmniejszyć liczbę dobrowolnych rezygnacji, włączając użytkownikom możliwość wstrzymania subskrypcji. Gdy włączysz funkcję wstrzymywania, użytkownicy będą mogli wstrzymać subskrypcję przez okres od tygodnia do 3 miesięcy, w zależności od w okresie cyklicznym.

Cykliczność subskrypcji Co tydzień Co miesiąc 3 miesiące 6 miesięcy rocznych
Dostępne długości wstrzymania* 1 tydzień
2 tygodnie
3 tygodnie
4 tygodnie
1 miesiąc
2 miesiące
3 miesiące
1 miesiąc
2 miesiące
3 miesiące
1 miesiąc
2 miesiące
3 miesiące
Nie dotyczy
* Może ulec zmianie w dowolnym momencie.

Wstrzymanie subskrypcji jest możliwe dopiero po zakończeniu bieżącego okresu rozliczeniowego. Gdy subskrypcja jest wstrzymana, użytkownik nie ma dostępu do subskrypcji i nie muszą zapłacić za odnowienie. Na koniec pauzy okres subskrypcji zostanie wznowiony, a Google spróbuje ją odnowić. Jeśli to się uda, wznowiona subskrypcja stanie się znowu aktywna. Jeśli nie udało się wznowić wznowienia z powodu problemu z płatnością, użytkownik przechodzi w stan zawieszenia konta jako widoczne na rysunkach 5 i 6:

Rysunek 5. Użytkownik wstrzymuje odtwarzanie, a następnie wznawia subskrypcji.
.
Rysunek 6. Użytkownik wstrzymuje subskrypcję, a następnie rozpoczyna zawieszenia konta.

Użytkownik może też ręcznie wznowić subskrypcję w dowolnym momencie jak na ilustracji 6. Gdy użytkownik wznowi płatności ręcznie, data zmieni się na datę wznowienia ręcznego.

Po wstrzymaniu subskrypcji użytkownika Biblioteka płatności w Play nie jest dostępna subskrypcję za pomocą queryPurchasesAsync() . Jeśli subskrypcja zostanie wznowiona, metoda queryPurchasesAsync() zwróci go ponownie.

Nasłuchuj adresów RTDN, aby otrzymywać powiadomienia o wstrzymaniu subskrypcji przez użytkownika. Te powiadomienia pozwalają też poinformować użytkowników aplikacji, że wstrzymali subskrypcję i nie mają do niej dostępu. Podaj również użytkownik może w każdej chwili ręcznie wznowić subskrypcję za pomocą precyzyjny link do Google Play

Wiadomość SubscriptionNotification typ SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED jest wysyłany po zainicjowaniu przez użytkownika wstrzymanie subskrypcji. Tym razem użytkownik powinien zachować dostęp do do daty następnego odnowienia, a także subskrypcja Zasób zawiera autoRenewEnabled = true. Wartość pola subscriptionState wynosi SUBSCRIPTION_STATE_ACTIVE.

Wiadomość SubscriptionNotification typu SUBSCRIPTION_PAUSED jest wysyłana, gdy zaczyna obowiązywać wstrzymanie. W takim przypadku użytkownik powinien utracić dostęp do swojego subskrypcja, a zasób subskrypcji zawiera autoRenewEnabled = true, a pole subscriptionState jest ustawione na SUBSCRIPTION_STATE_PAUSED. Dostępne opcje aby zobaczyć, kiedy subskrypcja ma zostać ponownie odnowiona. W tym celu sprawdź PausedStateContext obiektu.

Wiadomość SubscriptionNotification typu SUBSCRIPTION_RENEWED zostanie wysłana, jeśli subskrypcja zostanie wznowiona automatycznie po zakończeniu okresu wstrzymania. lub jeśli użytkownik zdecydował się ręcznie wznowić subskrypcję. Należy to zrobić zgodnie z opisem w sekcji Odnowienia.

Wiadomość SubscriptionNotification typu SUBSCRIPTION_ON_HOLD zostanie wysłana, jeśli podczas próby wznowienia subskrypcji po wstrzymaniu wystąpił błąd płatności. Należy to zrobić w sposób opisany w sekcji Zawieszenie konta.

Subskrybuj ponownie

W przypadku automatycznie odnawianych abonamentów podstawowych w Sklepie Google Play może wyświetlać się komunikat Przycisk Odnów subskrypcję. Ten przycisk umożliwia użytkownikom odzyskanie dostępu do subskrypcji. Może się ona nie pojawiać z różnych powodów, np. gdy subskrypcja wygasła dawno temu.

Rysunek 7. Konto > Subskrypcje Aplikacja Sklep Google Play z anulowaną subskrypcją i oznaczeniem Przycisk Odnów subskrypcję.

Choć przycisk jest zawsze oznaczony etykietą Odnów subskrypcję, jego działanie zależy od stanu subskrypcji.

Mimo że subskrypcja została anulowana, ale jeszcze nie wygasła, użytkownik nadal pozostaje subskrybując kanał i korzystając z korzyści związanych z subskrypcją. Jeśli użytkownik kliknie Odnów subskrypcję, anulowanie będzie anulowane, a subskrypcja będzie nadal odnawiana. W dokumentacji dla programistów i interfejsach API Google Play jest to tzw. restore.

Po wygaśnięciu automatycznie odnawianej subskrypcji możesz zezwolić użytkownikom na jej zakup ten sam abonament podstawowy. To działanie jest nazywane ponowną subskrypcją w: Dokumentacja i interfejsy API Google Play dla deweloperów. Możesz skonfigurować tę opcję w przypadku każdego abonamentu podstawowego w Konsoli Play lub za pomocą interfejsu API.

Przywróć przed wygaśnięciem

Jeśli działanie Twojej aplikacji zależy wyłącznie od queryPurchasesAsync() aby określić, czy użytkownik jest uprawniony do subskrypcji, powinien automatycznie obsługiwać przywracanie, ponieważ queryPurchasesAsync() nadal zwraca anulowane zakupy przed upływem ich daty ważności. O przywrócona subskrypcja będzie nadal odnawiana, tak jakby nie została anulowana.

Jeśli aplikacja synchronizuje stan subskrypcji z backendem, musisz nasłuchiwać dla SubscriptionNotification wiadomość typu SUBSCRIPTION_RESTARTED. Po otrzymaniu tego numeru RTDN może zareagować na powiadomienie, że subskrypcja została rozpoczęta ustawić odnowienie i przestać wyświetlać w aplikacji wiadomości o przywracaniu. zasób subskrypcji wygląda podobnie do tego przykładu:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date
      ...
    }
  ],
}

Odnów subskrypcję po wygaśnięciu

Jeśli automatycznie odnawiany abonament podstawowy został skonfigurowany za pomocą Konsoli Google Play lub interfejsu API aby umożliwić odnowienie subskrypcji, użytkownicy mogą ponownie kupić wygasłą subskrypcję. Sklepu Google Play.

To są nowe zakupy. Google Play wygeneruje nowy token zakupu, a Twój backend otrzymuje RTDN z typem SUBSCRIPTION_PURCHASED. Stan zakupu w przypadku tego typu zakupu poza aplikacją nie zawiera atrybutu linkedPurchaseToken powiązane z oryginalnym zakupem w tym przypadku, ponieważ subskrypcja wygasła. To nowe zakupy, których wymaga backend przetwarzać i potwierdzać tak samo jak każdy inny zakup.

Przechodzenie na wyższą lub niższą wersję usługi i odnawianie subskrypcji

Gdy użytkownik przejdzie na wyższą lub niższą wersję usługi albo zarejestruje się po anulowania w aplikacji przed wygaśnięciem subskrypcji, stary subskrypcja została unieważniona i zostaje utworzona nowa subskrypcja z nowy token zakupu.

Ponadto subskrypcja Zasób zwrócony z interfejsu Google Play Developer API zawiera linkedPurchaseToken. wskazujący poprzedni zakup, z którego użytkownik przeszedł na wersję standardową, lub wznowili subskrypcję. Możesz użyć w tym polu tokena zakupu, aby wyszukać stare i zidentyfikuj istniejące konto użytkownika, aby móc je powiązać nowy zakup na tym samym koncie.

Zanim zaoferujesz użytkownikowi opcję przejścia na wyższą, niższą lub ponownej subskrypcji, musisz potwierdzić obecną subskrypcję. Zmiana abonamentu lub odnowienie subskrypcji jest zablokowana, jeśli obecna subskrypcja nadal oczekuje na potwierdzenie.

Jeśli użytkownik kupi przejście na wyższą lub niższą wersję usługi albo ponownie wykupi subskrypcję, to nowy zakup, za który musisz potwierdzić. Zalecany sposób użyj interfejsu Google Play Developer API. Zasób subskrypcji wygląda podobnie do tego przykładu:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "linkedPurchaseToken": old_purchase_token,
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

zmiany cen.

Zobacz przewodnik po sprawdzonych metodach dotyczących zmiany cen aby dowiedzieć się więcej o zmianach cen automatycznie odnawianych subskrypcji i powiadamianiu użytkowników w razie potrzeby.

Gdy zmiany cen zostaną wprowadzone w przypadku obecnych subskrybentów jako zgoda, będziesz otrzyma wiadomość RTDN, jeśli użytkownik podejmie działanie, aby potwierdzić lub odrzucić nową cenę.

Obsługa potwierdzenia zmiany ceny wymagającej zgody użytkownika

Gdy użytkownik zaakceptuje wzrost ceny subskrypcji, otrzymasz SubscriptionNotification wiadomość typu SUBSCRIPTION_PRICE_CHANGED_CONFIRMED. za pomocą ceny wymagającej rezygnacji, lub po odnowieniu subskrypcji otrzymasz SubscriptionNotification wiadomość typu SUBSCRIPTION_RENEWED. Coś dla tego tak jak w przypadku każdego innego odnowienia subskrypcji.

Rozstrzygnij przypadki, w których podwyżka ceny wymagającej zgody użytkownika nie jest akceptowane

Jeśli użytkownik nie zaakceptował podwyżki ceny wymagającej zgody użytkownika, zanim będzie musiał ją odnowić po wyższej cenie, zostanie automatycznie anulowana, a Ty otrzymasz SubscriptionNotification wiadomość typu SUBSCRIPTION_CANCELED. Obsługuj to zdarzenie w sposób opisany w Anulowania.

Użytkownicy mogą też anulować subskrypcje w celu podniesienia ceny z możliwością rezygnacji. korzystając z tego samego mechanizmu.

Obsługa cyklu życia abonamentów przedpłaconych

Tak jak w przypadku subskrypcji odnawianych automatycznie, musisz potwierdzić abonament przedpłacony po każdego nowego zakupu. W przypadku abonamentów przedpłaconych musisz zakupu i doładowań, ponieważ użytkownik musi przez cały proces zakupu.

Abonamenty przedpłacone mogą mieć krótki czas trwania, dlatego ważne jest, aby: potwierdzić zakup tak szybko, jak to możliwe. Abonamenty przedpłacone o czasie trwania: co najmniej tydzień, należy potwierdzić w ciągu 3 dni. Abonamenty przedpłacone ze czas trwania krótszy niż tydzień należy potwierdzić w połowie planu czas trwania kampanii. Na przykład deweloperzy mają 1, 5 dnia na potwierdzenie zakupu trzydniowy abonament przedpłacony.

Rysunek 8. Stany cyklu życia i zdarzenia przejścia dla instancji zakupów subskrypcji.

Wiadomość SubscriptionNotification o typie SUBSCRIPTION_PURCHASED jest wysyłana do klienta RTDN za każdym razem, gdy kupisz abonament przedpłacony, w tym każde doładowanie. Wywołaj funkcję purchases.subscriptionsv2.get , aby sprawdzić stan ostatniego abonamentu przedpłaconego.

Dla zakupów doładowań wystawiony jest nowy token zakupu, a Ty otrzymujesz token poprzedniego zakupu w polu linkedPurchaseToken w ramach nowego stanu zakupu subskrypcji. Token zakupu jest ważny z subskrypcji zarejestruj się przez 60 dni po wygaśnięciu. Po tej dacie token zakupu zostanie nie można już używać do wywoływania interfejsu Google Play Developer API.

Zasób subskrypcji w przypadku zakupu abonamentu przedpłaconego wygląda podobnie do następujący przykład:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
  "lineItems": [
    {
      "productId": "prepaid_plan01",
      "expiryTime": expiry_date,
      "prepaidPlan": {
        "allowExtendAfterTime": timestamp_after_which_topups_are_allowed
      }
    }
  ]
}

W polu expiryTime możesz sprawdzić, kiedy uprawnienie się kończy. Doładowanie wydłużają czas obowiązywania uprawnienia, zwiększając go. Oznacza to, że jeśli użytkownik doładuje konto przed zakończeniem pierwotnego okresu obowiązywania uprawnienia, zostanie dodany nowy czas. w porównaniu z poprzednią datą ważności.

W aplikacji możesz wyświetlić komunikat informujący użytkownika, że subskrypcje przedpłacone można przedłużyć za pomocą doładowania. Aby wiedzieć, kiedy użytkownik bez możliwości doładowania, sprawdź pole allowExtendAfterTime w subskrypcji .

Abonamenty przedpłacone nie odnawiają się automatycznie, więc nie można ich anulować. Jeśli użytkownik chce anulować abonament przedpłacony, mogą dać mu czas do wygaśnięcia.