Vorbesteller-Angebote für Einmalkaufprodukte hinzufügen

1. Einführung

In diesem Codelab erstellen Sie ein Einmalkaufprodukt und fügen ein Vorbesteller-Angebot für das Produkt hinzu.

Hinweis: Bevor Sie mit diesem Codelab beginnen, müssen Sie Zugriff auf die Vorbestellungsfunktion anfordern, indem Sie das EAP-Antragsformular für Einmalkaufprodukte ausfüllen.

Zielgruppe

Dieses Codelab richtet sich an Android-App-Entwickler, die mit Einmalkaufprodukten vertraut sind und wissen möchten, wie sie ihren Einmalkaufprodukten Vorbesteller-Angebote hinzufügen können.

Voraussetzung

Wenn Sie noch keine Erfahrung mit Einmalkaufprodukten haben, empfehlen wir Ihnen, das Codelab zum Erschließen neuer Märkte mit regionalen Produktpreisen durchzuarbeiten.

Lerninhalte

  • So erstellen Sie Vorbestellungsangebote für Ihre Einmalkaufprodukte in der Google Play Console.
  • So fragen Sie mit den APIs der Play Billing Library Einmalkaufprodukte und die entsprechenden Vorbestellungsangebotsdetails ab.

Voraussetzungen

2. Beispiel-App erstellen

In diesem Codelab wird anhand einer Android-Beispiel-App gezeigt, wie Sie Einmalkäufe verwalten. Die Beispiel-App ist als voll funktionsfähige Android-App konzipiert, deren vollständiger Quellcode die folgenden Aspekte zeigt:

  • Integration der App in PBL
  • Abrufen von Einmalkaufprodukten und den zugehörigen Vorbesteller-Angeboten.
  • Kaufvorgänge für regionale Preise ausführen

Im folgenden Demovideo sehen Sie, wie die Beispiel-App nach der Bereitstellung und Ausführung aussieht und sich verhält.

Wenn Sie bereits mit Einmalkaufprodukten und der Play Billing Library (PBL) vertraut sind, können Sie die Beispiel-App herunterladen und damit experimentieren.

Voraussetzungen

Führen Sie vor dem Erstellen und Bereitstellen der Beispiel-App die folgenden Schritte aus:

Build

Ziel dieses Build-Schritts ist es, eine signierte Android App Bundle-Datei der Beispiel-App zu generieren.

So generieren Sie das Android-App-Bundle:

  1. Laden Sie die Beispiel-App von GitHub herunter.
  2. Beispiel-App erstellen: Ändern Sie vor dem Erstellen den Paketnamen der Beispiel-App und erstellen Sie sie dann. Wenn Sie Pakete anderer Apps in der Play Console haben, muss der Paketname, den Sie für die Beispiel-App angeben, eindeutig sein.

    Hinweis: Beim Erstellen der Beispiel-App wird nur eine APK-Datei erstellt, die Sie für lokale Tests verwenden können. Beim Ausführen der App werden jedoch keine Produkte und Preise abgerufen, da die Produkte nicht in der Play Console konfiguriert wurden.
  3. Ein signiertes Android App Bundle generieren
    1. Uploadschlüssel und ‑schlüsselspeicher generieren
    2. App mit dem Uploadschlüssel signieren
    3. Play App-Signatur konfigurieren

Als Nächstes müssen Sie das Android-App-Bundle in die Google Play Console hochladen.

3. OTP mit Vorbestellung in der Play Console erstellen

Wenn Sie Einmalkaufprodukte in der Google Play Console erstellen möchten, benötigen Sie eine App in der Play Console. Erstellen Sie eine App in der Play Console und laden Sie dann das zuvor erstellte signierte App-Bundle hoch.

App erstellen

So erstellen Sie eine App:

  1. Melden Sie sich mit Ihrem Entwicklerkonto in der Google Play Console an.
  2. Klicken Sie auf App erstellen. Die Seite App erstellen wird geöffnet.
  3. Geben Sie einen App-Namen, die Standardsprache und andere app-bezogene Details ein.
  4. Klicken Sie auf App erstellen. Dadurch wird eine App in der Google Play Console erstellt.

Jetzt können Sie das signierte App-Bundle der Beispiel-App hochladen.

Signiertes App-Bundle hochladen

  1. Laden Sie das signierte App Bundle in den internen Test-Track der Google Play Console hoch. Erst nach dem Hochladen können Sie die Monetarisierungsfunktionen in der Play Console konfigurieren.
    1. Klicken Sie auf Testen und veröffentlichen > Testen > Interner Release > Neuen Release erstellen.
    2. Geben Sie einen Releasenamen ein und laden Sie die signierte APK-Datei hoch.
    3. Klicken Sie auf Weiter und dann auf Speichern und veröffentlichen.

Jetzt können Sie die Einmalprodukte erstellen.

Einmalkaufprodukt erstellen

Erstelle nun das Einmalkaufprodukt, das die Nutzer kaufen sollen.

  1. Öffnen Sie die Beispiel-App in der Google Play Console und rufen Sie Mit Google Play monetarisieren > Produkte > Einmalkaufprodukte auf.
  2. Klicken Sie auf Einmalkaufprodukt erstellen.
  3. Geben Sie die folgenden Produktdetails ein:
    • Produkt-ID:Geben Sie eine eindeutige ID ein. Beispiel: upcoming_movie_1.
    • (Optional) Tags:Fügen Sie relevante Tags hinzu.
    • Name:Geben Sie einen Produktnamen ein. Beispiel: Product Movie.
    • Beschreibung:Geben Sie eine Produktbeschreibung ein. Beispiel: Product Description.
    • (Optional) Symbolbild hinzufügen:Laden Sie ein Symbol hoch, das Ihr Produkt repräsentiert.
    Hinweis: Für dieses Codelab können Sie die Konfiguration des Abschnitts Steuern, Compliance und Programme überspringen.
  4. Klicken Sie auf Weiter.
  5. Fügen Sie eine Kaufoption hinzu und konfigurieren Sie ihre regionale Verfügbarkeit. Für ein Einmalkaufprodukt ist mindestens eine Kaufoption erforderlich, in der festgelegt wird, wie die Berechtigung gewährt wird, sowie der Preis und die regionale Verfügbarkeit. In diesem Codelab fügen wir die Standardoption Kaufen für das Produkt hinzu.Geben Sie im Abschnitt Kaufoption die folgenden Details ein:
    • Kaufoptions‑ID:Geben Sie eine eindeutige ID ein. Beispiel: buy-movie.
    • Kauftyp:Wählen Sie Kaufen aus.
    • (Optional) Tags:Fügen Sie Tags hinzu, die für diese Kaufoption spezifisch sind.
    • Optional: Klicken Sie auf Erweiterte Optionen, um die erweiterten Optionen zu konfigurieren. Für dieses Codelab können Sie die Konfiguration der erweiterten Optionen überspringen.
  6. Als Nächstes müssen Sie die regionale Verfügbarkeit und den Preis für die Kaufoption konfigurieren. Bei der regionalen Verfügbarkeit geben Sie die Regionen an, in denen Ihr Produkt verfügbar sein soll. Darunter sind auch Regionen, in denen Ihre App noch nicht veröffentlicht wurde. Standardmäßig ist eine Kaufoption in allen Regionen verfügbar.Klicken Sie im Abschnitt Verfügbarkeit und Preis auf Verfügbarkeit und Zugriff bearbeiten.
    1. Wählen Sie Als „nicht verfügbar“ festlegen aus.
    Alle Regionen sind automatisch ausgewählt und auf Verfügbar gesetzt.
    1. Entfernen Sie nur die Auswahl des Landes United States und klicken Sie dann auf Als „nicht verfügbar“ festlegen. Das Einmalkaufprodukt ist jetzt nur noch in United States verfügbar.
    2. Wählen Sie im Drop-down-Menü Alle Regionen die Option Verfügbare Länder und Regionen aus. Es sollte nur United States angezeigt werden.
    3. Klicken Sie auf das Symbol Preis. Dadurch wird ein Dialogfeld zum Festlegen des Preises angezeigt.
    4. Geben Sie 10 $ ein und klicken Sie auf Speichern.
  7. Klicken Sie auf Als Entwurf speichern.

Hinweis: Aktivieren Sie die Kaufoption noch nicht. Wir aktivieren sie, nachdem du das Vorbestellungsangebot konfiguriert hast. Das liegt daran, dass Sie einer aktiven Kaufoption, deren regionale Verfügbarkeit festgelegt ist, kein Vorbesteller-Angebot hinzufügen können.

Vorbesteller-Angebot hinzufügen

Als Nächstes fügen Sie ein Vorbesteller-Angebot für die zuvor erstellte Kaufoption „Kaufen“ hinzu. Mit einem Vorbesteller-Angebot können Nutzer Ihren Artikel vor der offiziellen Veröffentlichung kaufen. Vorbesteller-Angebote werden nur für die Kaufoption Kaufen unterstützt und können nur für neue Produkte in einer Region konfiguriert werden.

Das Hinzufügen eines Vorbesteller-Angebots umfasst die folgenden zwei Schritte:

  1. Bereiten Sie die Kaufoption Kaufen für das Vorbesteller-Angebot vor.
  2. Fügen Sie das Vorbesteller-Angebot für die Kaufoption hinzu.

Kaufoption „Kaufen“ für das Vorbesteller-Angebot vorbereiten

  1. Öffnen Sie die Beispiel-App in der Google Play Console und rufen Sie Mit Google Play monetarisieren > Produkte > Einmalkaufprodukte auf.
  2. Klicken Sie auf der Seite Einmalkaufprodukte für Ihr Produkt auf den Rechtspfeil (upcoming_movie_1). Die Seite Einmalkaufprodukt bearbeiten wird geöffnet.
  3. Klicken Sie für die zuvor erstellte Kaufoption buy-movie auf den Rechtspfeil. Die Seite Kaufoption bearbeiten wird geöffnet.
  4. Klicken Sie auf Verfügbarkeit und Zugriff bearbeiten und wählen Sie dann Als „verfügbar“ festlegen und Nutzern erlauben, Produkte vorzubestellen aus.
  5. Wählen Sie im Drop-down-Menü Alle Regionen die Option Verfügbare Länder und Regionen aus. Hier sollten nur United States angezeigt werden, die Sie zuvor konfiguriert haben.
  6. Wählen Sie das Land aus und klicken Sie dann auf Nur für Vorbestellungen verfügbar.
  7. Klicken Sie auf Speichern.

Sie haben Ihrer Kaufoption noch kein Vorbesteller-Angebot hinzugefügt. Im nächsten Schritt fügen Sie das Vorbesteller-Angebot hinzu.

Vorbesteller-Angebot hinzufügen

  1. Öffnen Sie die Beispiel-App in der Google Play Console und rufen Sie Mit Google Play monetarisieren > Produkte > Einmalkaufprodukte auf.
  2. Klicken Sie auf der Seite Einmalkaufprodukte für Ihr Produkt (upcoming_movie_1) auf Angebot hinzufügen > Vorbestellen. Die Seite Vorbestellung hinzufügen wird geöffnet.
  3. Geben Sie die Vorbestellungsdetails ein:
    • Vorbestellungs-ID:Geben Sie preorder-offer-1 ein.
    • (Optional) Rabatt hinzufügen:Sie können Kein Rabatt, Rabatt (in %) oder Rabatt insgesamt auswählen. Wählen Sie für dieses Codelab Keine aus.
    • (Optional) Tags:Fügen Sie relevante Tags hinzu.
    • Startdatum und ‑uhrzeit:Legen Sie ein Datum fest, das mindestens drei Tage in der Zukunft liegt.
    • Enddatum und ‑uhrzeit:Legen Sie ein Datum fest, das mindestens 24 Stunden nach dem Startdatum liegt.
    • Verfügbarkeit nach Vorbestellungszeitraum:Wählen Sie aus, ob das Produkt sofort nach dem Vorbestellungszeitraum oder zu einem bestimmten späteren Datum bzw. einer bestimmten späteren Uhrzeit verfügbar sein soll.
    • (Optional) Garantie des niedrigeren Preises: Wählen Sie diese Option aus, wenn Nutzern der niedrigere der beiden Preise berechnet werden soll: der Preis bei der Vorbestellung oder der Preis bei der Veröffentlichung. Das kann ein starker Anreiz für Erstkäufer sein.
  4. Klicken Sie auf Speichern.
  5. Öffnen Sie die Seite Einmalkaufprodukt bearbeiten für Ihr Einmalkaufprodukt (upcoming_movie_1).
  6. Klicken Sie für die Kaufoption „Kaufen“ (buy-movie) auf Aktivieren.
  7. Klicken Sie unter der Kaufoption „Kaufen“ für das Vorbesteller-Angebot (preorder-offer-1) auf Aktivieren. Dadurch wird das Vorbesteller-Angebot aktiviert und am Datum veröffentlicht, das Sie zuvor in den Vorbestelldetails konfiguriert haben.

Video zur Erstellung von Vorbesteller-Angeboten

Im folgenden Video sind die oben beschriebenen Schritte zum Erstellen eines Vorbesteller-Angebots zu sehen.

4. In PBL einbinden

So integrieren Sie Ihre App in die Play Billing Library (PBL):

  1. Fügen Sie der Beispiel-App die Abhängigkeit der Play Billing Library hinzu.
    dependencies {
    val billing_version = "8.1.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. Initialisieren Sie den BillingClient. BillingClient ist das Client-SDK, das sich in Ihrer App befindet und mit der Play Billing Library kommuniziert. Das folgende Code-Snippet zeigt, wie der Abrechnungsclient initialisiert wird.
    private BillingClient createBillingClient() {
    return BillingClient.newBuilder(activity)
        .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
        // For one-time products, add a listener to process and acknowledge the purchases. This will notify
        // Google the purchase was processed.
        // For client-only apps, use billingClient.acknowledgePurchase().
        // If you have a secure backend, you must acknowledge purchases on your server using the
        // server-side API.
        // See https://developer.android.com/google/play/billing/security#acknowledge
        // In this sample snippet purchases aren't processed. You must
        // implement your business logic to process and acknowledge the purchases.
        .setListener((billingResult, purchases) -> {})
        .enableAutoServiceReconnection()
        .build();
     }
    
  3. Verbindung zu Google Play herstellen: Das folgende Code-Snippet zeigt, wie eine Verbindung zu Google Play hergestellt wird.
    /**
    * Starts the billing connection with Google Play. This method should be called exactly once
    * before any other methods in this class.
    *
    * @param productList The list of products to query for after the connection is established.
    */
    public void startBillingConnection(List<Product> productList) {
        billingClient.startConnection(
            new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                Log.d(TAG, "Billing Client Connection Successful");
                queryProductDetails(productList);
                } else {
                Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage());
                listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user.
                }
            }
    
            @Override
            public void onBillingServiceDisconnected() {
                Log.e(TAG, "Billing Client Connection Lost");
                listener.onBillingError("Billing Connection Lost");
            }
            });
    }
    
  4. Details zum Einmalkaufprodukt abrufen: Nachdem Sie Ihre App in PBL eingebunden haben, müssen Sie die Details zum Einmalkaufprodukt in Ihrer App abrufen. Das folgende Code-Snippet zeigt, wie Sie die Details zum Einmalkaufprodukt in Ihrer App abrufen.
    private void queryProductDetails(List<Product> productList) {
        QueryProductDetailsParams queryProductDetailsParams =
            QueryProductDetailsParams.newBuilder().setProductList(productList).build();
    
        billingClient.queryProductDetailsAsync(
            queryProductDetailsParams,
            new ProductDetailsResponseListener() {
            @Override
            public void onProductDetailsResponse(
                BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                List<ProductDetails> productDetailsList =
                    productDetailsResponse.getProductDetailsList();
                    listener.onProductDetailsResponse(productDetailsList);
                } else {
                Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage());
                listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode());
                }
            }
            });
    }
    
    Wenn Sie das Einmalkaufprodukt (in diesem Beispiel upcoming_movie_1) in ProductDetails abrufen, erhalten Sie eine Antwort ähnlich der folgenden:
    {
        "productId": "upcoming_movie_1",
        "type": "inapp",
        "title": "Purrfect Mayhem: The Final Playback (Movies All Day | Play Samples)",
        "name": "Purrfect Mayhem: The Final Playback",
        "description": "Yolo and Thorne must reach the original broadcasting site to initiate the \"Final Playback\" and save the timeline. Follow them through their race against the Clockinators.",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 8500000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$8.50",
                "offerIdToken": "<---offerIdToken--->",
                "offerId": "preorder",
                "purchaseOptionId": "buy-option",
                "offerTags": [],
                "validTimeWindow": {
                    "startTimeMillis": 1756771200000,
                    "endTimeMillis": 1785542400000
                },
                "preorderDetails": {
                    "preorderReleaseTimeMillis": 1785542400000,
                    "preorderPresaleEndTimeMillis": 1785542400000
                }
            }
        ]
    }
    
    Die Details zum Vorbesteller-Angebot sind in der oneTimePurchaseOfferDetailsList verfügbar. Diese Liste enthält eine Kaufoption (buy-option), für die in der Play Console ein Vorbesteller-Angebot konfiguriert wurde. Jede Kaufoption lässt sich anhand ihres offerIdToken eindeutig identifizieren.
  5. Rufen Sie das Angebotstoken zusammen mit den Details zum Vorbesteller-Angebot ab. Sie benötigen das Angebotstoken, um den Abrechnungsablauf in Schritt 6 zu starten.
    @Override
    public void onProductDetailsResponse(List<ProductDetails> productDetailsList) {
    
    if (productDetailsList != null && !productDetailsList.isEmpty()) {
    
    // Process productDetailsList returned by QueryProductDetailsResult
    for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) {
      for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails :
          productDetails.getOneTimePurchaseOfferDetailsList()) {
        // Checks if the offer is a preorder offer.
        if (oneTimePurchaseOfferDetails.getPreorderDetails() != null) {
          // Process the returned PreorderDetails
          OneTimePurchaseOfferDetails.PreorderDetails preorderDetails =
              oneTimePurchaseOfferDetails.getPreorderDetails();
          // Get preorder release time in millis.
          long preorderReleaseTimeMillis = preorderDetails.getPreorderReleaseTimeMillis();
          // Get preorder presale end time in millis.
          long preorderPresaleEndTimeMillis = preorderDetails.getPreorderPresaleEndTimeMillis();
          // Get offer ID
            String offerId = oneTimePurchaseOfferDetails.getOfferId();
          // Get the associated purchase option ID
          if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) {
            String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId();
          }
        }
      }
      }
      } else {
            Log.e(TAG, "No product details found for " + productId);
        }
    }
    
  6. Starten Sie den Abrechnungsvorgang.
    /**
     * Launches the billing flow for the product with the given offer token.
    *
    * @param activity The activity instance from which the billing flow will be launched.
    * @param productDetails The product details of the product to purchase.
    * @param offerToken The offer token of the product to purchase.
    * @return The result of the billing flow.
    */
    public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) {
        ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList =
            ImmutableList.of(
                BillingFlowParams.ProductDetailsParams.newBuilder()
                    .setProductDetails(productDetails)
                    .setOfferToken(offerToken)
                    .build());
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(productDetailsParamsList)
            .build();
        billingClient.launchBillingFlow(activity, billingFlowParams);
    }
    

5. Kaufoptionen testen

Bevor Sie Ihre Einmalkaufprodukte in Ihrer Live-App verfügbar machen, können Sie Ihre PBL-Integration mit Lizenztestern und dem Play Billing Lab testen.

Informationen dazu, wie Sie Ihre Kaufoptionen mit dem Play Billing Lab testen können, finden Sie im Codelab Unlock new markets with regional product pricing.

6. Nächste Schritte

Referenzdokumente

7. Glückwunsch!

Glückwunsch! Sie haben in der Google Play Console erfolgreich ein Vorbestellungsangebot für ein Einmalkaufprodukt erstellt. Sie haben jetzt ein besseres Verständnis des flexiblen Produktkatalogs von Google Play für Einmalkäufe.

Umfrage

Ihr Feedback zu diesem Codelab ist uns sehr wichtig. Nehmen Sie sich einige Minuten Zeit, um an unserer Umfrage teilzunehmen.