Anleitung zur In-App-Integration für die alternative Abrechnung mit Auswahlmöglichkeit für Nutzer

In diesem Leitfaden wird beschrieben, wie Sie die APIs einbinden, um eine alternative Abrechnung anzubieten die Nutzerauswahl in Ihrer App.

Play Billing Library einrichten

Füge deiner Android-App die Play Billing Library-Abhängigkeit hinzu. So verwenden Sie die APIs zur alternativen Abrechnung müssen Sie Version 5.2 oder höher verwenden. Bei Bedarf von einer früheren Version zu migrieren, folgen Sie der Anleitung in der Migration , bevor Sie die alternative Abrechnung implementieren.

Mit Google Play verbinden

Die ersten Schritte des Integrationsprozesses sind dieselben wie im im Integrationsleitfaden für Google Play Billing beschrieben. BillingClient initialisieren:

  • Sie müssen eine neue Methode aufrufen, um anzugeben, dass Sie dem Nutzer eine Auswahl der Abrechnungsoptionen: enableUserChoiceBilling.
  • Für die Bearbeitung von Anfragen müssen Sie eine UserChoiceBillingListener registrieren der Nutzer ein alternatives Abrechnungssystem auswählt.

Im folgenden Beispiel sehen Sie, wie ein BillingClient mit diesen Änderungen:

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

Nach dem Initialisieren des BillingClient müssen Sie eine Verbindung mit Google Play, wie im Integrationsleitfaden beschrieben.

Verfügbare Produkte anzeigen

Sie können dem Nutzer verfügbare Produkte auf dieselbe Weise anzeigen wie mit einem Integration des Google Play-Abrechnungssystems. Wenn der Nutzer die Produkte gesehen hat zum Kauf verfügbar ist und ein Produkt zum Kauf auswählt, starten Sie die Abrechnung mit Auswahlmöglichkeit für Nutzer. wie im folgenden Abschnitt beschrieben.

Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer starten

Starten Sie den Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer durch Aufrufen von launchBillingFlow(). Das funktioniert Dies entspricht dem Starten eines Kaufvorgangs mit einem Abrechnungssystem von Google Play. Integration: Sie stellen eine ProductDetails-Instanz und eine offerToken-Instanz bereit. dem Produkt und dem Angebot entsprechen, das die Nutzenden erwerben möchten. Wenn der Nutzer das Abrechnungssystem von Google Play auswählt, werden diese Informationen verwendet, um den Kaufvorgang fortzusetzen.

Wenn Entwickler launchBillingFlow() aufrufen, das Google Play-Abrechnungssystem führt folgende Prüfung durch:

  • Das System prüft, ob die Google Play-Landesversion des Nutzers Land, das eine alternative Abrechnung mit Auswahlmöglichkeit für Nutzer unterstützt (d.h. ein unterstütztes Land Land). Wenn das Google Play-Land des Nutzers unterstützt wird, prüft Google Play ob die alternative Abrechnung auf Grundlage der Konfiguration des BillingClient.
    • Wenn die alternative Abrechnung mit Auswahlmöglichkeit für Nutzer aktiviert ist, wird der Kauf der Nutzerauswahl-UX zeigt.
    • Wenn die alternative Abrechnung mit Auswahlmöglichkeit für Nutzer nicht aktiviert ist, wird der Kauf zeigt die Benutzeroberfläche des standardmäßigen Google Play-Abrechnungssystems ohne Nutzer eine große Auswahl.
  • Wenn das Google Play-Land des Nutzers kein unterstütztes Land ist, Der Kaufvorgang zeigt die Benutzeroberfläche des standardmäßigen Google Play-Abrechnungssystems ohne Nutzer eine große Auswahl.

Die Google Play-Landesversion des Nutzers ist ein unterstütztes Land

Die Google Play-Landesversion des Nutzers ist kein unterstütztes Land

"enableUserChoiceBilling" wird während der BillingClient-Einrichtung aufgerufen

Der Nutzer sieht die UX mit Auswahlmöglichkeit für Nutzer

Der Nutzer sieht das Standard-Abrechnungssystem von Google Play.

"enableUserChoiceBilling" wird während der BillingClient-Einrichtung nicht aufgerufen

Der Nutzer sieht das Standard-Abrechnungssystem von Google Play.

Der Nutzer sieht das Standard-Abrechnungssystem von Google Play.

Nutzerauswahl verwalten

Wie Sie den Rest des Kaufvorgangs abwickeln, hängt davon ab, Der Nutzer hat das Abrechnungssystem von Google Play oder ein alternatives Abrechnungssystem ausgewählt.

Wenn der Nutzer ein alternatives Abrechnungssystem auswählt

Wenn der Nutzer das alternative Abrechnungssystem auswählt, ruft Google Play die UserChoiceBillingListener, um die App zu benachrichtigen, dass die App gestartet werden muss. im alternativen Abrechnungssystem. Insbesondere Die Methode userSelectedAlternativeBilling() wird aufgerufen.

Das externe Transaktionstoken, das im UserChoiceDetails-Objekt bereitgestellt wird steht für eine Signatur für die Entscheidung des Nutzers, die alternative Abrechnung einzugeben Ablauf. Verwenden Sie dieses Token, um alle Transaktionen zu melden, die aus dieser Auswahl resultieren: im Leitfaden zur Back-End-Integration erläutert.

UserChoiceBillingListener sollte die folgenden Aktionen ausführen:

  • Das Produkt bzw. die Produkte erhalten, die vom Nutzer gekauft werden, damit sie die während des Kaufvorgangs im alternativen Abrechnungssystem angezeigt werden.
  • den als externes Transaktionstoken empfangenen String erfassen und an folgende Adresse senden: um sie dauerhaft zu speichern. Wird später verwendet, um externe Transaktion an Google Play, wenn der Nutzer diesen Kauf abschließt.
  • Starten Sie den alternativen Kaufvorgang des Entwicklers.

Wenn der Nutzer den Kauf über das alternative Abrechnungssystem abschließt, müssen Sie Sie müssen die Transaktion an Google Play melden, indem Sie den Google Play-Entwickler anrufen. API innerhalb von 24 Stunden vom Back-End unter Angabe der externalTransactionToken und weitere Transaktionsdetails. Weitere Informationen finden Sie in der Anleitung zur Backend-Integration.

Das folgende Beispiel zeigt, wie die 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.
    }
};

Wenn der Nutzer das Abrechnungssystem von Google Play auswählt

Wenn der Nutzer das Abrechnungssystem von Google Play auswählt, fährt er mit dem bei Google Play kaufen.

  • Weitere Informationen findest du im Integrationsleitfaden für die Mediathek unter Käufe verarbeiten. Informationen zum Umgang mit neuen In-App-Käufen über die Abrechnungssystem.
  • Weitere Informationen finden Sie unter Neue Abos im Leitfaden zur Aboverwaltung für zusätzliche Informationen zum Kauf von Abos.

Änderungen am Abo verarbeiten

Für Entwickler, die eine alternative Abrechnung mit Auswahlmöglichkeit für Nutzer verwenden, müssen Käufe die entweder über das Abrechnungssystem von Google Play verarbeitet oder externalTransactionId, je nach Auswahl des Nutzers. Änderungen an vorhandenen Abos, die durch den Ablauf der Nutzerauswahl verarbeitet wurden, bis zum Ablauf über dasselbe Abrechnungssystem laufen.

In diesem Abschnitt wird beschrieben, wie Sie mit einigen gängigen Szenarien bei Aboänderungen umgehen.

Upgrade- und Downgradeabläufe

Aboänderungen, einschließlich Upgrade- und Downgradeabläufen, sollten je nachdem, ob das Abo ursprünglich gekauft wurde oder nicht, über das Abrechnungssystem von Google Play oder ein alternatives Abrechnungssystem verwendet werden.

Für Add-ons, die von einem bestehenden Abo abhängen, wird dieselbe Zahlungsmethode verwendet und wiederkehrende Gebühren werden als Upgrades behandelt. Bei anderen Add-ons das gewünschte Abrechnungssystem auswählen. Neuen Code starten mit launchBillingFlow(), wie unter Das Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer.

Abos, die über ein alternatives Abrechnungssystem gekauft wurden

Für Abos, die ursprünglich über das nach Auswahl des Nutzers, Nutzer, die ein Upgrade anfordern, Das Downgrade muss über das alternative Abrechnungssystem des Entwicklers erfolgen ohne noch einmal mit der User-Choice-Option zu arbeiten.

Rufen Sie dazu launchBillingFlow() auf, wenn der Nutzer ein Upgrade oder eine ein Downgrade ausführen. Anstatt ein SubscriptionUpdateParams-Objekt im Feld Parameter, verwenden Sie setOriginalExternalTransactionId und geben Sie die externe Transaktions-ID des ursprünglichen Kaufs. Dadurch wird der Nutzer nicht Auswahlbildschirm, da die Nutzerauswahl für den ursprünglichen Kauf beibehalten wird für Upgrades und Downgrades. Der Aufruf von launchBillingFlow() in diesem Fall generiert ein neues externes Transaktionstoken für die Transaktion, das Sie aus dem Callback abgerufen werden.

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.

Wenn das Upgrade oder Downgrade im alternativen Abrechnungssystem abgeschlossen ist, Sie müssen mit dem externen Transaktionstoken eine neue Transaktion melden. die Sie durch den vorherigen Aufruf für den Kauf eines neuen Abonnements erhalten haben.

Abos, die über das Abrechnungssystem von Google Play gekauft wurden

Nutzer, die ihr aktuelles Abo über die Nach Auswahl der Nutzerauswahl sollte der Upgrade- oder Downgrade-Ablauf angezeigt werden. im Abrechnungssystem von Google Play. In der folgenden Anleitung wird beschrieben, wie würden Sie den Kaufvorgang für ein Upgrade oder Downgrade über Google Abrechnungssystem von Google Play:

  1. Ermitteln Sie die offerToken des ausgewählten Angebots für das neue Abo:

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

String offerTokenNewPlan = productDetailsNewPlan
                     .getSubscriptionOfferDetails(selectedOfferIndex)
                     .getOfferToken();
  1. Die richtigen Informationen an das Abrechnungssystem von Google Play senden, damit die neuen Kauf, einschließlich des Kauftokens für das bestehende Abo:

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

Der Kauf erfolgt über das Abrechnungssystem von Google Play und deine App erhält den PurchasesUpdatedListener.onPurchaseUpdated-Aufruf mit dem Ergebnis der kaufen. Wenn der Kauf erfolgreich war, wird auch die Methode onPurchaseUpdated() verwendet. erhält die neuen Kaufinformationen und Ihr Backend empfängt SUBSCRIPTION_PURCHASED Entwicklerbenachrichtigung in Echtzeit. Wenn Sie die Status des neuen Kaufs wird ein linkedPurchaseToken-Attribut Abonnementkauf, sodass Sie es als empfohlen.

Abokündigungen und ‐reaktivierungen

Nutzer sollten ihr Abo jederzeit kündigen können. Wenn ein Nutzer ein Abo kündigt, kann sich die Kündigung der Berechtigung bis zum der Zahlungszeitraum endet. Beispiel: Ein Nutzer kündigt ein Monatsabo nach der Hälfte des Monats möglicherweise noch dauert es noch etwa 2 Wochen, bis ihr Zugriff entfernt wird. Während dieses Zeitraums das Abonnement noch technisch aktiv ist, sodass der Nutzer den Dienst verwenden kann.

Es ist nicht ungewöhnlich, dass die Nutzer sich während dieser aktive Periode. In dieser Anleitung wird dies als Wiederherstellung bezeichnet. Die folgenden wird in den Abschnitten beschrieben, wie Wiederherstellungen Billing API integriert.

Abos, die über ein alternatives Abrechnungssystem gekauft wurden

Wenn Sie eine externe Transaktions-ID für ein gekündigtes Abo haben, ist das nicht launchBillingFlow() aufrufen, um das Abo wiederherzustellen. sollten nicht für diese Art der Aktivierung verwendet werden. Wenn ein Nutzer sein Konto während der aktiven Laufzeit eines gekündigten Abos nicht verfügbar ist, Transaktion zu diesem Zeitpunkt stattfindet; können Sie einfach die Verlängerungen melden, läuft der aktuelle Zyklus aus und die nächste Verlängerung findet statt. Dazu gehören auch Fälle, in denen Der Nutzer erhält im Rahmen der Wiederherstellung ein Guthaben oder einen Sonderpreis für die Verlängerung. (z. B. ein Angebot, das den Nutzer dazu ermuntert, sein Abo fortzusetzen).

Abos, die über das Abrechnungssystem von Google Play gekauft wurden

Im Allgemeinen können Nutzer Abos über das Abrechnungssystem von Google Play wiederherstellen. Für gekündigte Abos, die ursprünglich über die Abrechnung bei Google Play abgeschlossen wurden. kann der Nutzer die Kündigung rückgängig machen, solange das Abo abgeschlossen ist. über die Google Play-Funktion Wieder abonnieren aktiv sind. In diesem Fall eine SUBSCRIPTION_RESTARTED Entwicklerbenachrichtigung in Echtzeit in deinem Backend und kein neues Kauftoken ausgestellt, sondern das ursprüngliche Token. um das Abo fortzusetzen. Weitere Informationen zum Verwalten der Wiederherstellung in Google Das Abrechnungssystem von Google Play – siehe Wiederherstellungen in der Aboverwaltung .

Sie können auch über die App eine Wiederherstellung im Abrechnungssystem von Google Play auslösen. indem du launchBillingFlow() anrufst. Siehe Vor Ablauf des Abonnements – In-App. Im Fall von Nutzenden, die für den ursprünglichen Kauf (der zwar storniert wurde, aber noch aktiv ist), erkennt das System die Auswahl automatisch und zeigt die Benutzeroberfläche zum Wiederherstellen dieser Käufe. Sie werden gebeten, das Abo noch einmal bei Google Play kaufen, noch einmal durch den User-Choice-Ablauf. Für den Nutzer wird ein neues Kauftoken ausgestellt. in diesem Fall. Dein Backend empfängt ein SUBSCRIPTION_PURCHASED-Echtzeitgebot. Entwicklerbenachrichtigung und der Wert von linkedPurchaseToken für den neuen Kauf wird der Status wie bei einem Upgrade oder Downgrade beim alten Kauf Token für das gekündigte Abo.

Erneute Abos

Wenn ein Abonnement vollständig ausläuft, sei es aufgrund einer Kündigung oder Ablehnung der Zahlung ohne Wiederherstellung (eine abgelaufene Kontosperre), muss der Nutzer neu abonnieren, wenn sie die Berechtigung wieder aktivieren möchten.

Das erneute Abonnieren kann auch über die App aktiviert werden. Die Verarbeitung erfolgt auf ähnliche Weise eine Standard-Registrierung. Nutzer sollten das gewünschte Abrechnungssystem auswählen können zu verwenden. launchBillingFlow() kann in diesem Fall aufgerufen werden, wie unter Starten Sie den Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer.

Alternative Abrechnung testen

Lizenztester sollten Ihre Integration für die alternative Abrechnung testen. Ich Transaktionen, die vom Lizenztester initiiert wurden, werden nicht in Rechnung gestellt. Konten. Weitere Informationen finden Sie unter In-App-Abrechnung mit App-Lizenzierung testen. Informationen zum Konfigurieren von Lizenztestern.

Nächste Schritte

Nach der In-App-Integration können Sie Ihre Back-End.