Wskazówki dotyczące integracji w aplikacji w przypadku rozliczeń alternatywnych z możliwością wyboru przez użytkownika

Z tego przewodnika dowiesz się, jak zintegrować interfejsy API, aby zaoferować rozliczenia alternatywne wybór użytkownika w Twojej aplikacji.

Konfigurowanie Biblioteki płatności w Play

Dodaj zależność Biblioteki płatności w Play do aplikacji na Androida. Aby użyć funkcji interfejsów API rozliczeń alternatywnych musisz używać wersji 5.2 lub nowszej. W razie potrzeby przeprowadź migrację z wcześniejszej wersji, postępuj zgodnie z instrukcjami w sekcji Migracja .

Połącz z Google Play

Pierwsze kroki procesu integracji są takie same jak opisane w przewodnik po integracji rozliczeń w Google Play z kilkoma zmianami, zainicjowanie klienta BillingClient:

  • Musisz wywołać nową metodę, aby wskazać, że chcesz zaoferować użytkownikowi opcja płatności do wyboru: enableUserChoiceBilling.
  • Aby obsługiwać zgłoszenia, musisz zarejestrować domenę UserChoiceBillingListener. w którym użytkownik wybiera alternatywny system rozliczeniowy.

Poniższy przykład pokazuje inicjowanie BillingClient z tymi modyfikacje:

Kotlin

val purchasesUpdatedListener =
   PurchasesUpdatedListener { billingResult, purchases ->
       // Handle new Google Play purchase.
   }

val userChoiceBillingListener =
   UserChoiceBillingListener { userChoiceDetails ->
       // Handle alternative billing choice.
   }

var billingClient = BillingClient.newBuilder(context)
   .setListener(purchasesUpdatedListener)
   .enablePendingPurchases()
   .enableUserChoiceBilling(userChoiceBillingListener)
   .build()

Java

private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
    @Override
    public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
        // Handle new Google Play purchase.
    }
};

private UserChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
    @Override
    public void userSelectedAlternativeBilling(
        UserChoiceDetails userChoiceDetails) {
        // Handle new Google Play purchase.
    }
};

private BillingClient billingClient = BillingClient.newBuilder(context)
    .setListener(purchasesUpdatedListener)
    .enablePendingPurchases()
    .enableUserChoiceBilling(userChoiceBillingListener)
    .build();

Po zainicjowaniu BillingClient musisz nawiązać połączenie z Google Play zgodnie z opisem w przewodniku po integracji.

Wyświetl dostępne produkty

Możesz wyświetlać dostępne produkty użytkownikowi w taki sam sposób jak w Integracja z systemem rozliczeniowym Google Play. Gdy użytkownik wyświetlił produkty dostępnych do zakupu i wybrania klienta do zakupu, uruchomienie systemu rozliczeniowego opartego na wyborze użytkownika jak opisano w następnej sekcji.

Uruchom proces systemu rozliczeniowego opartego na wyborze użytkownika

Aby uruchomić system rozliczeniowy oparty na wyborze użytkownika, zadzwoń pod numer launchBillingFlow(). Działa to samo co uruchamianie procesu zakupu w systemie rozliczeniowym Google Play. integracja: podajesz instancję ProductDetails oraz offerToken odpowiadające produktowi i ofercie, którą użytkownik chce pozyskać. Jeśli użytkownik wybierze system rozliczeniowy Google Play, informacje te posłużą do tego, i kontynuować proces zakupu.

Gdy deweloper wywołuje funkcję launchBillingFlow(), system rozliczeniowy Google Play wykonuje tę kontrolę:

  • System sprawdza, czy kraj użytkownika w Google Play to kraj obsługujący alternatywne systemy rozliczeniowe z opcją wyboru przez użytkownika kraj). Jeśli kraj użytkownika w Google Play jest obsługiwany, Google Play sprawdza, czy włączono rozliczenia alternatywne na podstawie konfiguracji BillingClient.
    • Jeśli włączono rozliczenia alternatywne z opcją wyboru przez użytkownika, zakup pokazuje UX.
    • Jeśli rozliczenia alternatywne z opcją wyboru przez użytkownika nie są włączone, zakup proces przedstawia standardowy UX systemu rozliczeniowego Google Play, bez użytkownika. wyboru.
  • Jeśli kraj użytkownika w Google Play nie jest obsługiwany, wartość proces zakupu przedstawia standardowy sposób korzystania z systemu rozliczeniowego Google Play, bez użytkownika wyboru.

Kraj ustawiony w Google Play jest obsługiwany

Kraj użytkownika w Google Play nie jest obsługiwany

Wywołano metodę allowUserChoiceBilling podczas konfiguracji BillingClient

Użytkownik widzi UX wyboru użytkownika

Użytkownik widzi standardowy system rozliczeniowy Google Play.

Metoda allowUserChoiceBilling nie została wywołana podczas konfiguracji BillingClient

Użytkownik widzi standardowy system rozliczeniowy Google Play.

Użytkownik widzi standardowy system rozliczeniowy Google Play.

Obsługa wyboru użytkownika

Sposób obsługi pozostałej części procesu zakupu różni się w zależności od tego, użytkownik wybrał system rozliczeniowy Google Play lub alternatywny system.

Gdy użytkownik wybierze alternatywny system rozliczeniowy

Jeśli użytkownik wybierze alternatywny system rozliczeniowy, Google Play wywołuje metodę UserChoiceBillingListener, aby powiadomić aplikację o konieczności uruchomienia w alternatywnym systemie rozliczeniowym. W szczególności Wywoływana jest metoda userSelectedAlternativeBilling().

Zewnętrzny token transakcji udostępniony w obiekcie UserChoiceDetails reprezentuje podpis użytkownika wyboru alternatywnego systemu rozliczeniowego przepływu danych. Użyj tego tokena, aby zgłosić dowolną transakcję wynikającą z tego wyboru jako omówiono w przewodniku po integracji backendu.

Element UserChoiceBillingListener powinien wykonywać te czynności:

  • Uzyskaj produkty zakupione przez użytkownika, aby można było je kupić widoczne w procesie zakupu w alternatywnym systemie rozliczeniowym.
  • Zbierz ciąg znaków otrzymany jako zewnętrzny token transakcji i wyślij go do z backendu, aby go utrwalić. Będzie ona później używana do zgłaszania zewnętrznego transakcji do Google Play, jeśli użytkownik dokona tego konkretnego zakupu.
  • Uruchom alternatywny proces zakupu utworzony przez dewelopera.

Jeśli użytkownik dokona zakupu przy użyciu alternatywnego systemu rozliczeniowego, Ty musi zgłosić transakcję do Google Play, kontaktując się z deweloperem w Google Play z backendu w ciągu 24 godzin, zapewniając externalTransactionToken i dodatkowe szczegóły transakcji. Zobacz przewodnik po integracji backendu.

Poniższy przykład pokazuje, jak wdrożyć UserChoiceBillingListener:

Kotlin

private val userChoiceBillingListener =
    UserChoiceBillingListener { userChoiceDetails ->
        // Get the products being purchased by the user.
        val products = userChoiceDetails.products

        // Send external transaction token to developer backend server
        // this devBackend object is for demonstration purposes,
        // developers can implement this step however best fits their
        // app to backend communication.
        devBackend.sendExternalTransactionStarted(
            userChoiceDetails.externalTransactionToken,
            user
        )

        // Launch alternative billing
        // ...
        // The developer backend handles reporting the transaction
        // to Google Play's backend once the alternative billing
        // purchase is completed.
    }

Java

private userChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
    @Override
    public void userSelectedAlternativeBilling(
           UserChoiceDetails userChoiceDetails) {
       // Get the products being purchased by the user.
       List<Product> products =
              userChoiceDetails.getProducts();

       // Send external transaction token to developer backend server
       // this devBackend object is for demonstration purposes,
       // developers can implement this step however best fits their
       // app to backend communication.
       devBackend.sendExternalTransactionStarted(
              userChoiceDetails.getExternalTransactionToken(),
              user
       );

       // Launch alternative billing
       // ...
       // The developer backend handles reporting the transaction
       // to Google Play's backend once the alternative billing
       // purchase is completed.
    }
};

Gdy użytkownik wybierze system rozliczeniowy Google Play

Jeśli użytkownik wybierze system rozliczeniowy Google Play, w Google Play.

  • Więcej informacji znajdziesz w sekcji Przetwarzanie zakupów w przewodniku po integracji z biblioteką. o tym, jak postępować w przypadku nowych zakupów w aplikacji za pomocą do systemu rozliczeniowego.
  • Zobacz Nowe subskrypcje w przewodniku po zarządzaniu subskrypcjami dla dodatkowych wskazówek dotyczących kupowania subskrypcji.

Obsługa zmian w subskrypcji

Deweloperzy używający rozliczeń alternatywnych z opcją wyboru przez użytkownika muszą przetwarzane przez system rozliczeniowy Google Play lub zgłoszone za pomocą externalTransactionId w zależności od wyboru użytkownika. Zmiany w dotychczasowych subskrypcje przetworzone w ramach procesu wyboru użytkownika mogą korzystać z tego samego systemu rozliczeniowego do momentu wygaśnięcia.

W tej sekcji opisujemy, jak postępować w przypadku niektórych typowych zmian subskrypcji.

Procesy przechodzenia na wyższą i niższą wersję usługi

Zmiany w abonamentach, w tym proces przejścia na wyższą lub niższą wersję, powinny jest obsługiwane różnie w zależności od tego, czy subskrypcja została kupiona za pomocą systemu rozliczeniowego Google Play lub systemu alternatywnego.

dodatki zależne od dotychczasowej subskrypcji korzystają z tej samej formy płatności; i wyrównanie opłat cyklicznych są traktowane jak uaktualnienia. W przypadku innych dodatków użytkownicy powinni mieć możliwość wyboru systemu rozliczeniowego, którego chcą używać Rozpocznij nowy proces zakupów za pomocą launchBillingFlow(), zgodnie z opisem w sekcji Uruchamianie systemu rozliczeniowego opartego na wyborze użytkownika.

Subskrypcje kupione przy użyciu alternatywnego systemu rozliczeniowego

W przypadku subskrypcji kupionych u dewelopera alternatywny system rozliczeniowy po dokonaniu wyboru przez użytkownika, użytkownicy proszący o aktualizację przejście na niższą wersję powinno przejść przez alternatywny system rozliczeniowy dewelopera bez konieczności ponownego przechodzenia przez proces wyboru użytkownika.

W tym celu wywołaj launchBillingFlow(), gdy użytkownik poprosi o zmianę przejść na niższą wersję. Zamiast określać obiekt SubscriptionUpdateParams w parametrze użyj parametru setOriginalExternalTransactionId, udostępniając parametr zewnętrzny identyfikator pierwotnej transakcji. Nie wyświetla się użytkownik ekran wyboru, ponieważ wybór użytkownika dotyczący pierwotnego zakupu jest zachowywany w celu przejścia na wyższą lub niższą wersję usługi. W tym przypadku połączenie z numerem launchBillingFlow() generuje nowy zewnętrzny token transakcji, pobrane z wywołania zwrotnego.

Kotlin

// The external transaction ID from the current
// alternative billing subscription.
val externalTransactionId = //... ;

val billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(
        listOf(
            BillingFlowParams.ProductDetailsParams.newBuilder()
                // Fetched via queryProductDetailsAsync.
                .setProductDetails(productDetailsNewPlan)
                // offerIdToken can be found in
                // ProductDetails=>SubscriptionOfferDetails.
                .setOfferToken(offerTokenNewPlan)
                .build()
        )
    )
    .setSubscriptionUpdateParams(
        BillingFlowParams.SubscriptionUpdateParams.newBuilder()
            .setOriginalExternalTransactionId(externalTransactionId)
            .build()

val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.

Java

// The external transaction ID from the current
// alternative billing subscription.
String externalTransactionId = //... ;

BillingFlowParams billingFlowParams =
        BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(
                ImmutableList.of(
                    ProductDetailsParams.newBuilder()
                        // Fetched via queryProductDetailsAsync.
                        .setProductDetails(productDetailsNewPlan)
                        // offerIdToken can be found in
                        // ProductDetails=>SubscriptionOfferDetails
                        .setOfferToken(offerTokenNewPlan)
                    .build()
                )
            )
            .setSubscriptionUpdateParams(
                SubscriptionUpdateParams.newBuilder()
                    .setOriginalExternalTransactionId(externalTransactionId)
                    .build()
            )
            .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);

// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.

Po przejściu na wyższą lub niższą wersję systemu rozliczeniowego musisz zgłosić nową transakcję przy użyciu zewnętrznego tokena transakcji. uzyskane w ramach poprzedniego wywołania związanego z zakupem nowej subskrypcji.

Subskrypcje kupione przy użyciu systemu rozliczeniowego Google Play

Podobnie jest w przypadku użytkowników, którzy kupili bieżącą subskrypcję w witrynie Google Play systemu rozliczeniowego po wyborze użytkownika powinien być wyświetlany proces przejścia na wyższą lub niższą wersję usługi. w systemie rozliczeniowym Google Play. Poniżej znajdziesz instrukcje, jak to zrobić musisz rozpocząć proces zakupu przejścia na wyższą lub niższą wersję w Google. System rozliczeniowy Google Play:

  1. Wskaż offerToken wybranej oferty w ramach nowego abonamentu:

val offerTokenNewPlan = productDetailsNewPlan
             .getSubscriptionOfferDetails(selectedOfferIndex)
             .getOfferToken()

String offerTokenNewPlan = productDetailsNewPlan
                     .getSubscriptionOfferDetails(selectedOfferIndex)
                     .getOfferToken();
  1. Wyślij prawidłowe informacje do systemu rozliczeniowego Google Play, aby przetworzyć nowy zakup, w tym token zakupu istniejącej subskrypcji:

val billingFlowParams =
    BillingFlowParams.newBuilder().setProductDetailsParamsList(
        listOf(
            BillingFlowParams.ProductDetailsParams.newBuilder()
                .setProductDetails(productDetailsNewPlan)
                .setOfferToken(offerTokenNewPlan)
                .build()
        )
    )
    .setSubscriptionUpdateParams(
        BillingFlowParams.SubscriptionUpdateParams.newBuilder()
            .setOldPurchaseToken(oldToken)
            .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE)
            .build()
        )
        .build()

BillingClient.launchBillingFlow(activity, billingFlowParams)

BillingFlowParams billingFlowParams =
        BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(
                ImmutableList.of(
                    ProductDetailsParams.newBuilder()
                        // Fetched via queryProductDetailsAsync
                        .setProductDetails(productDetailsNewPlan)
                        // offerIdToken can be found in
                        // ProductDetails=>SubscriptionOfferDetails.
                        .setOfferToken(offerTokenNewPlan)
                        .build()
                )
            )
            .setSubscriptionUpdateParams(
                SubscriptionUpdateParams.newBuilder()
                    // purchaseToken can be found in
                    // Purchase#getPurchaseToken
                    .setOldPurchaseToken("old_purchase_token")
                    .setReplaceProrationMode(ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE)
                    .build()
            )
            .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);

Ten zakup jest rozliczany w systemie rozliczeniowym Google Play, a aplikacja otrzymuje wywołanie PurchasesUpdatedListener.onPurchaseUpdated z wynikiem funkcji zakup. Jeśli zakup się udał, metoda onPurchaseUpdated() również otrzymuje nowe informacje o zakupie, a system zaplecza otrzymuje SUBSCRIPTION_PURCHASED Powiadomienie dla deweloperów w czasie rzeczywistym. Podczas przeciągania dla nowego zakupu, atrybut linkedPurchaseToken łączy się ze starym przez wykupienie subskrypcji, aby można było ją wycofać zalecamy.

Anulowanie i przywracanie subskrypcji

Użytkownicy powinni mieć możliwość anulowania subskrypcji w każdej chwili. Gdy użytkownik anuluje subskrypcję, wypowiedzenie uprawnienia może zostać odroczone do kończy się okres płatności. Na przykład jeśli użytkownik anuluje miesięczną subskrypcję w połowie miesiąca mogą nadal korzystać z usługi przez dostęp zostanie usunięty za około 2 tygodnie. W tym okresie bo subskrypcja jest nadal aktywna, więc użytkownik może korzystać z tej usługi.

Nierzadko użytkownicy decydują się na cofnięcie anulowania w tym czasie. okresu aktywności. W tym przewodniku nazywamy to przywróceniem. Poniżej w sekcjach opisano, jak postępować w przypadku scenariuszy przywracania alternatywnej integrację interfejsu API rozliczeń.

Subskrypcje kupione przy użyciu alternatywnego systemu rozliczeniowego

Jeśli masz zewnętrzny identyfikator transakcji anulowanej subskrypcji, nie jest to konieczne jest wywołanie funkcji launchBillingFlow() w celu przywrócenia subskrypcji, więc to nie należy używać do tego typu aktywacji. Jeśli użytkownik przywróci subskrypcji w trakcie aktywnego okresu anulowanej subskrypcji, nie transakcja ma miejsce w momencie, możesz kontynuować raportowanie odnowień, gdy wygaśnie bieżący cykl i nastąpi następne odnowienie. Obejmuje to przypadki, gdy użytkownik otrzymuje środki lub specjalną cenę za odnowienie w ramach przywracania Może to być na przykład promocja, która ma zachęcić użytkownika do kontynuowania subskrypcji.

Subskrypcje kupione przy użyciu systemu rozliczeniowego Google Play

Ogólnie rzecz biorąc, użytkownicy mogą przywrócić subskrypcje w systemie rozliczeniowym Google Play. Dla: anulowane subskrypcje, które zostały pierwotnie kupione w ramach płatności w Google Play. system, użytkownik może cofnąć anulowanie subskrypcji, aktywny dzięki funkcji Odnów subskrypcję w Google Play. W takim przypadku otrzymasz powiadomienie dla deweloperów w czasie rzeczywistym SUBSCRIPTION_RESTARTED na swoim i nie został wydany nowy token zakupu – używany jest token oryginalny. aby kontynuować subskrypcję. Aby dowiedzieć się, jak zarządzać przywracaniem w Google System rozliczeniowy Google Play: zobacz Przywracanie w zarządzaniu subskrypcjami. Google.

Możesz też przywrócić system rozliczeniowy Google Play z poziomu aplikacji dzwoniąc pod numer launchBillingFlow(). Zobacz sekcję Przed wygaśnięciem subskrypcji – w aplikacji. W przypadku użytkowników, którzy zakupu zgodnie z wyborem użytkownika (który został anulowany, ale jest nadal aktywny), system automatycznie wykryje wybór i wyświetli do ich przywrócenia. Są proszeni o potwierdzenie, ponownie wykupili subskrypcję w Google Play, ale nie musieli rezygnować przez proces wyboru użytkownika. Użytkownikowi zostanie wystawiony nowy token zakupu. w tej sprawie. Twój backend otrzymuje SUBSCRIPTION_PURCHASED w czasie rzeczywistym Powiadomienie dla dewelopera oraz wartość linkedPurchaseToken dla nowego zakupu stan jest ustawiony na taką samą jak w przypadku przejścia na wyższą lub niższą wersję usługi dla anulowanej subskrypcji.

Ponowne subskrypcje

po całkowitym wygaśnięciu subskrypcji, niezależnie od tego, czy jest to spowodowane jej anulowaniem, odrzucenie płatności bez odzyskania konta (wygasła blokada konta), użytkownik musi ponownie wykupić subskrypcję, jeśli chcą oni ponownie aktywować uprawnienie.

Ponowne subskrybowanie można również włączyć w aplikacji, przetwarzając je podobnie jak w przypadku standardowej rejestracji. Użytkownicy powinni mieć możliwość wyboru systemu rozliczeniowego których użyć. W tym przypadku funkcja launchBillingFlow() może zostać wywołana, jak opisano w Uruchom proces systemu rozliczeniowego opartego na wyborze użytkownika.

Testowanie alternatywnego systemu rozliczeniowego

Do testowania integracji rozliczeń alternatywnych należy korzystać z testerów licencji. Ty nie otrzymasz faktury za transakcje zainicjowane przez testera licencji kont. Więcej informacji znajdziesz w artykule Testowanie rozliczeń w aplikacji za pomocą licencjonowania aplikacji. informacje na temat konfigurowania testerów licencji.

Dalsze kroki

Po zakończeniu integracji w aplikacji możesz zintegrować .