Wskazówki dotyczące integracji w aplikacji tylko w przypadku rozliczeń alternatywnych

Z tego przewodnika dowiesz się, jak zintegrować interfejsy API, aby oferować rozliczenia alternatywne tylko (tj. bez opcji wyboru przez użytkowników) w odpowiednich aplikacjach. Więcej informacji o tych programach, w tym o wymaganiach i zakresie geograficznym, znajdziesz w artykule Płatności alternatywne.

Konfiguracja Biblioteki płatności w Play

Dodaj zależność Biblioteki płatności w Play do aplikacji na Androida. Aby korzystać z interfejsów API do rozliczeń alternatywnych, musisz używać wersji 6.1 lub nowszej.

Połącz z Google Play

Pierwszy krok procesu integracji jest taki sam jak w przewodniku po integracji z Płatnościami w Google Play, ale podczas inicjowania klienta BillingClient występuje kilka zmian:

  • Musisz wywołać nową metodę, aby wskazać, że Twoja aplikacja używa tylko alternatywnego systemu rozliczeniowego: enableAlternativeBillingOnly.

Poniższy przykład pokazuje inicjowanie elementu BillingClient za pomocą tych modyfikacji:

Kotlin


var billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build()

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build();

Po zainicjowaniu BillingClient musisz połączyć się z Google Play zgodnie z opisem w przewodniku po integracji.

Sprawdzam dostępność

Aplikacja powinna potwierdzić, że dostępne są tylko rozliczenia alternatywne, wywołując metodę isAlternativeBillingOnlyAvailableAsync.

Jeśli dostępny jest tylko rozliczenia alternatywne, ten interfejs API zwraca wartość BillingResponseCode.OK. Szczegółowe informacje o tym, jak aplikacja powinna odpowiadać na inne kody odpowiedzi, znajdziesz w artykule o obsłudze odpowiedzi.

Kotlin


billingClient.isAlternativeBillingOnlyAvailableAsync(object:
    AlternativeBillingOnlyAvailabilityListener {
        override fun onAlternativeBillingOnlyAvailabilityResponse(
            billingResult: BillingResult) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors,
                // handling alternative billing only being unavailable, etc.
                return
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

Java


billingClient.isAlternativeBillingOnlyAvailable(
    new AlternativeBillingOnlyAvailabilityListener() {
        @Override
        public void onAlternativeBillingOnlyAvailabilityResponse(
            BillingResult billingResult) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                 // Handle failures such as retrying due to network errors,
                 // handling alternative billing only being unavailable,
                 // etc.
                return;
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

Okno z informacjami dla użytkowników

Aby można było przeprowadzić integrację tylko z rozliczeniami alternatywnymi, kwalifikująca się aplikacja musi wyświetlać ekran z informacjami, który pomaga użytkownikom zrozumieć, że rozliczenia nie będą zarządzane przez Google Play. Ekran z informacjami musi się wyświetlać użytkownikom przez wywołanie interfejsu API showAlternativeBillingOnlyInformationDialog przed każdym rozpoczęciem procesu rozliczeń alternatywnych. Jeśli użytkownik potwierdził już okno dialogowe, użycie tego interfejsu API zwykle nie spowoduje ponownego wyświetlenia tego okna. Czasami okno może się wyświetlić ponownie użytkownikowi w sytuacji, gdy np. wyczyści pamięć podręczną na urządzeniu.

Kotlin


// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;

val listener : AlternativeBillingOnlyInformationDialogListener =
    AlternativeBillingOnlyInformationDialogListener { 
        override fun onAlternativeBillingOnlyInformationDialogResponse(
            billingResult: BillingResult) {
            // check billingResult
        }
}

val billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener)

Java


// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;

AlternativeBillingOnlyInformationDialogListener listener =
    new AlternativeBillingOnlyInformationDialogListener() {
        @Override
        public void onAlternativeBillingOnlyInformationDialogResponse(
            BillingResult billingResult) {
                // check billingResult
            }
    };

BillingResult billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener);

Jeśli ta metoda zwraca BillingResponseCode.OK, aplikacja może kontynuować transakcję. W przypadku BillingResponseCode.USER_CANCELED aplikacja powinna wywołać metodę showAlternativeBillingOnlyInformationDialog, w którym ponownie wyświetli się okno użytkownikowi. Informacje o innych kodach odpowiedzi znajdziesz w sekcji dotyczącej obsługi odpowiedzi.

Zgłaszanie transakcji w Google Play

Wszystkie transakcje dokonane za pomocą alternatywnego systemu rozliczeniowego muszą być zgłaszane do Google Play przez wywołanie interfejsu Google Play Developer API z backendu w ciągu 24 godzin i udostępnienie identyfikatora externalTransactionToken, który można uzyskać za pomocą opisanego poniżej interfejsu API. W przypadku każdego zakupu jednorazowego, każdej nowej subskrypcji oraz przejścia na wyższą lub niższą wersję subskrypcji należy wygenerować nowy parametr externalTransactionToken. Aby dowiedzieć się, jak zgłosić transakcję po uzyskaniu externalTransactionToken, zapoznaj się z przewodnikiem po integracji backendu.

Kotlin

billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
    AlternativeBillingOnlyReportingDetailsListener {
        override fun onAlternativeBillingOnlyTokenResponse(
            billingResult: BillingResult,
            alternativeBillingOnlyReportingDetails:
                AlternativeBillingOnlyReportingDetails?) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return
            }

            val externalTransactionToken =
                alternativeBillingOnlyReportingDetails?
                    .externalTransactionToken

            // Send transaction token to backend and report to Google Play.
        }
    });

Java


billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
    new AlternativeBillingOnlyReportingDetailsListener() {
        @Override
        public void onAlternativeBillingOnlyTokenResponse(
            BillingResult billingResult,
            @Nullable AlternativeBillingOnlyReportingDetails
                alternativeBillingOnlyReportingDetails) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return;
            }

            String transactionToken =
                alternativeBillingOnlyReportingDetails
                .getExternalTransactionToken();

            // Send transaction token to backend and report to Google Play.
        }
    });

Obsługiwanie odpowiedzi

W przypadku błędów te metody isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() i createAlternativeBillingOnlyReportingDetailsAsync() mogą zwracać odpowiedzi inne niż „BillingResponseCode.OK”. Oto zalecane sposoby postępowania z błędami:

  • ERROR: to jest błąd wewnętrzny. Kontynuuj przetwarzanie transakcji za pomocą alternatywnego systemu rozliczeniowego. Nie trzeba zgłaszać transakcji do Google, w tym wszelkich odnowień, których dotyczy problem.
  • FEATURE_NOT_SUPPORTED: Sklep Play na obecnym urządzeniu nie obsługuje interfejsów API rozliczeń alternatywnych. Kontynuuj przetwarzanie transakcji za pomocą alternatywnego systemu rozliczeniowego. Transakcja nie musi zostać zgłoszona do Google, jak również informacje o odnowieniach subskrypcji, których dotyczy problem.
  • USER_CANCELED: użyj ponownie wywołania showAlternativeBillingOnlyInformationDialog(), aby wyświetlić użytkownikowi okno z informacjami przy następnej próbie dokonania zakupu.
  • BILLING_UNAVAILABLE: transakcja nie kwalifikuje się tylko do rozliczeń alternatywnych, więc nie powinna być kontynuowana w ramach tego programu. Wynika to z faktu, że użytkownik nie znajduje się w kraju kwalifikującym się do tego programu lub Twoje konto nie zostało do niego zarejestrowane. W przeciwnym razie sprawdź stan rejestracji w Konsoli Play.
  • DEVELOPER_ERROR: wystąpił błąd z żądaniem. Zanim przejdziesz dalej, użyj komunikatu debugowania, aby zidentyfikować i poprawić błąd.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: to chwilowe błędy, które należy ponowić. W takim przypadku: SERVICE_DISCONNECTED i spróbuj ponownie połączyć się z Google Play.

Testowanie alternatywnego systemu rozliczeniowego

Do przetestowania integracji rozliczeń alternatywnych należy używać testerów licencji. Nie obciążymy Cię płatnością za transakcje zainicjowane przez konta testerów licencji. Więcej informacji o konfigurowaniu testerów licencji znajdziesz w artykule Testowanie rozliczeń w aplikacji za pomocą licencjonowania aplikacji.

Dalsze kroki

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