In-App-Integrationsanleitung nur für die alternative Abrechnung

In dieser Anleitung wird beschrieben, wie Sie die APIs einbinden, um die alternative Abrechnung (d.h. ohne Nutzerauswahl) in berechtigten Apps anzubieten. Weitere Informationen zu diesen Programmen einschließlich der Teilnahmevoraussetzungen und des geografischen Geltungsbereichs, finden Sie unter Alternative Abrechnung.

Play Billing Library einrichten

Fügen Sie Ihrer Android-App die Play Billing Library-Abhängigkeit hinzu. Wenn Sie die APIs zur alternativen Abrechnung verwenden möchten, benötigen Sie Version 6.1 oder höher.

Verbindung zu Google Play herstellen

Die ersten Schritte im Integrationsprozess sind dieselben wie in der Anleitung zur Google Play Billing-Integration beschrieben. Es gibt jedoch einige Änderungen bei der Initialisierung von BillingClient:

  • Sie müssen eine neue Methode aufrufen, um anzugeben, dass Ihre App nur ein alternatives Abrechnungssystem verwendet: enableAlternativeBillingOnly.

Im folgenden Beispiel wird die Initialisierung eines BillingClient mit diesen Änderungen veranschaulicht:

Kotlin


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

Java

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

Nachdem Sie den BillingClient initialisiert haben, müssen Sie eine Verbindung zu Google Play herstellen, wie in der Integrationsanleitung beschrieben.

Verfügbarkeit prüfen

Ihre App sollte bestätigen, dass nur die alternative Abrechnung verfügbar ist, indem sie isAlternativeBillingOnlyAvailableAsync aufruft.

Diese API gibt BillingResponseCode.OK zurück, wenn nur die alternative Abrechnung verfügbar ist. Weitere Informationen dazu, wie Ihre App auf andere Antwortcodes reagieren sollte, finden Sie unter Antwortverarbeitung.

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.
        }
    });

Informationsdialog für Nutzer

Wenn Sie nur die alternative Abrechnung einbinden möchten, muss in Ihrer berechtigten App ein Informationsbildschirm angezeigt werden, auf dem Nutzer darüber informiert werden, dass die Abrechnung nicht von Google Play verwaltet wird. Der Informationsbildschirm muss Nutzern angezeigt werden, indem Sie die showAlternativeBillingOnlyInformationDialog API aufrufen, bevor Sie jedes Mal mit dem alternativen Abrechnungsablauf beginnen. Wenn der Nutzer den Dialog bereits bestätigt hat, wird er durch die Verwendung dieser API in der Regel nicht noch einmal angezeigt. Es kann jedoch vorkommen, dass der Dialog Nutzern noch einmal angezeigt wird, z. B. wenn sie die Caches auf ihrem Gerät leeren.

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);

Wenn diese Methode BillingResponseCode.OK zurückgibt, kann Ihre App mit der Transaktion fortfahren. Bei BillingResponseCode.USER_CANCELED sollte Ihre App `showAlternativeBillingOnlyInformationDialog` aufrufen, um den Dialog dem Nutzer noch einmal anzuzeigen. Informationen zu anderen Antwortcodes finden Sie im Abschnitt zur Antwortverarbeitung.

Transaktionen an Google Play melden

Alle Transaktionen, die über ein alternatives Abrechnungssystem ausgeführt werden, müssen innerhalb von 24 Stundenüber das Back-End an Google Play gemeldet werden. Rufen Sie dazu die Google Play Developer API auf und geben Sie ein externalTransactionToken an, das Sie mit der unten beschriebenen API erhalten. Für jeden einmaligen Kauf, jedes neue Abo und jedes Upgrade oder Downgrade eines bestehenden Abos sollte ein neues `externalTransactionToken` generiert werden. Informationen zum Melden einer Transaktion, nachdem ein externalTransactionToken abgerufen wurde, finden Sie in der Anleitung zur Back-End-Integration.

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.
        }
    });

Antwortverarbeitung

Die oben genannten Methoden isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() und createAlternativeBillingOnlyReportingDetailsAsync() können bei Fehlern Antworten zurückgeben, die nicht BillingResponseCode.OK sind. Die empfohlene Behandlung der Fehler wird unten beschrieben:

  • ERROR: Dies ist ein interner Fehler. Fahren Sie nicht mit der Transaktion fort. Versuchen Sie es noch einmal, indem Sie showAlternativeBillingOnlyInformationDialog() aufrufen, um den Informationsdialog dem Nutzer beim nächsten Kaufversuch anzuzeigen.
  • FEATURE_NOT_SUPPORTED: Die APIs zur alternativen Abrechnung werden vom Google Play Store auf dem aktuellen Gerät nicht unterstützt. Fahren Sie nicht mit der Transaktion fort.
  • USER_CANCELED: Fahren Sie nicht mit der Transaktion fort. Rufen Sie showAlternativeBillingOnlyInformationDialog() noch einmal auf, um den Informationsdialog dem Nutzer beim nächsten Kaufversuch anzuzeigen.
  • BILLING_UNAVAILABLE: Die Transaktion ist nicht für die alternative Abrechnung geeignet und sollte daher nicht im Rahmen dieses Programms ausgeführt werden. Das liegt entweder daran, dass der Nutzer sich nicht in einem für dieses Programm berechtigten Land befindet oder dass Ihr Konto nicht erfolgreich für das Programm registriert wurde. Im letzteren Fall prüfen Sie den Registrierungsstatus in der Play Console.
  • DEVELOPER_ERROR: Es liegt ein Fehler in der Anfrage vor. Verwenden Sie die Debug-Meldung, um den Fehler zu identifizieren und zu beheben, bevor Sie fortfahren.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: Dies sind vorübergehende Fehler, die wiederholt werden sollten. Bei SERVICE_DISCONNECTED stellen Sie eine Verbindung zu Google Play wieder her, bevor Sie es noch einmal versuchen.

Alternative Abrechnung testen

Lizenztester sollten verwendet werden, um Ihre Integration der alternativen Abrechnung zu testen. Transaktionen, die von Lizenztesterkonten initiiert wurden, werden Ihnen nicht in Rechnung gestellt. Weitere Informationen zum Konfigurieren von Lizenztestern finden Sie unter In-App-Abrechnung mit App-Lizenzierung testen.

Nächste Schritte

Nachdem Sie die In-App-Integration abgeschlossen haben, können Sie Ihr Back-End einbinden.