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 (tj. bez opcji wyboru przez użytkownika) w kwalifikujących się aplikacjach. Więcej informacji o tych programach w tym o wymaganiach kwalifikacyjnych i zasięgu geograficznym, znajdziesz w artykule Rozliczenia alternatywne.

Konfigurowanie Biblioteki płatności w Play

Dodaj zależność Biblioteki płatności w Play do swojej 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

Pierwsze kroki procesu integracji są takie same jak te opisane w przewodniku po integracji z Płatnościami w Google Play. W przypadku inicjowania elementu BillingClient należy jednak wprowadzić kilka zmian:

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

Poniższy przykład pokazuje, jak zainicjować element BillingClient z tymi zmianami:

Kotlin

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

Java

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

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

Sprawdzanie dostępności

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

Jeśli dostępne są tylko rozliczenia alternatywne, ten interfejs API zwróci wartość BillingResponseCode.OK, jeśli jest dostępny. Szczegółowe informacje o tym, jak aplikacja powinna reagować na inne kody odpowiedzi, znajdziesz w sekcji Obsługa 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 informacyjne dla użytkowników

Aby zintegrować się z rozliczeniami alternatywnymi, kwalifikująca się aplikacja musi wyświetlać ekran informacyjny, który pomoże użytkownikom zrozumieć, że rozliczenia nie będą zarządzane przez Google Play. Ekran informacyjny musi być wyświetlany użytkownikom przez wywołanie interfejsu API showAlternativeBillingOnlyInformationDialog przed każdym rozpoczęciem procesu rozliczeń alternatywnych. Jeśli użytkownik potwierdził już okno, użycie tego interfejsu API zwykle nie spowoduje ponownego wyświetlenia okna. W niektórych sytuacjach okno może być ponownie wyświetlane użytkownikowi, np. jeśli wyczyści on pamięć podręczną na swoim urządzeniu.

Kotlin

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

val listener: AlternativeBillingOnlyInformationDialogListener =
    AlternativeBillingOnlyInformationDialogListener { 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 zwróci wartość BillingResponseCode.OK, Twoja aplikacja może kontynuować transakcję. W przypadku BillingResponseCode.USER_CANCELED aplikacja powinna wywołać metodę showAlternativeBillingOnlyInformationDialog, aby ponownie wyświetlić użytkownikowi okno. Informacje o innych kodach odpowiedzi znajdziesz w sekcji Obsługa odpowiedzi sekcja.

Zgłaszanie transakcji do Google Play

Wszystkie transakcje dokonywane 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. Należy podać externalTransactionToken, który jest uzyskiwany za pomocą interfejsu API opisanego poniżej. Nowy token externalTransactionToken należy wygenerować dla każdego zakupu jednorazowego, każdej nowej subskrypcji oraz każdej zmiany na wyższą lub niższą wersję istniejącej subskrypcji. Aby dowiedzieć się, jak zgłosić transakcję po uzyskaniu tokena externalTransactionToken, zapoznaj się z przewodnikiem po integracji z backendem.

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ługa odpowiedzi

W przypadku błędów powyższe metody isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() i createAlternativeBillingOnlyReportingDetailsAsync() mogą zwracać odpowiedzi inne niż BillingResponseCode.OK. Zalecany sposób obsługi błędów opisujemy poniżej:

  • ERROR: to błąd wewnętrzny. Nie kontynuuj transakcji. Spróbuj ponownie, wywołując metodę showAlternativeBillingOnlyInformationDialog(), aby wyświetlić użytkownikowi okno informacyjne przy następnej próbie zakupu.
  • FEATURE_NOT_SUPPORTED: interfejsy API do rozliczeń alternatywnych nie są obsługiwane przez Sklep Play na bieżącym urządzeniu. Nie kontynuuj transakcji.
  • USER_CANCELED: nie kontynuuj transakcji. Ponownie wywołaj metodę showAlternativeBillingOnlyInformationDialog(), aby wyświetlić użytkownikowi okno informacyjne przy następnej próbie zakupu.
  • BILLING_UNAVAILABLE: transakcja nie kwalifikuje się do rozliczeń alternatywnych i dlatego nie powinna być realizowana w ramach tego programu. Może to być spowodowane tym, że użytkownik nie mieszka w kraju objętym tym programem lub Twoje konto nie zostało zarejestrowane w programie. Jeśli to drugie, sprawdź stan rejestracji w Konsoli Play.
  • DEVELOPER_ERROR: wystąpił błąd w żądaniu. Przed kontynuowaniem zidentyfikuj i popraw błąd, korzystając z komunikatu debugowania.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: są to błędy przejściowe, które należy ponowić. W przypadku błędu SERVICE_DISCONNECTED przed ponowieniem próby nawiąż ponownie połączenie z Google Play.

Testowanie rozliczeń alternatywnych

Do testowania integracji rozliczeń alternatywnych należy używać testerów licencji. Nie otrzymasz faktury 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.

Dalsze kroki

Gdy skończysz integrację w aplikacji, możesz zintegrować backend.