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. Füllen Sie dazu das EAP-Antragsformular für Einmalkaufprodukte aus.

Zielgruppe

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

Voraussetzungen

Wenn Sie noch keine Erfahrung mit Einmalkaufprodukten haben, empfehlen wir Ihnen, das Codelab Mit regionalen Produktpreisen neue Märkte erschließen durchzuarbeiten.

Lerninhalte

  • Verwendung der Google Play Console zum Erstellen von Vorbesteller-Angeboten für Ihre Einmalkaufprodukte
  • Verwendung der Play Billing Library APIs zum Abfragen von Einmalkaufprodukten und den entsprechenden Details zu Vorbesteller-Angeboten

Voraussetzungen

2. Beispiel-App erstellen

In diesem Codelab wird anhand einer Android-Beispiel-App gezeigt, wie Sie Einmalkaufprodukte verwalten. Die Beispiel-App ist eine voll funktionsfähige Android-App mit dem vollständigen Quellcode, die folgende Aspekte veranschaulicht:

  • Integration der App in die Play Billing Library
  • Abrufen von Einmalkaufprodukten und den zugehörigen Vorbesteller-Angeboten
  • Ausführen von Kaufprozessen für regionale Preise

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 ausprobieren.

Voraussetzungen

Bevor Sie die Beispiel-App erstellen und bereitstellen, führen Sie 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. Erstellen Sie die Beispiel-App. Ändern Sie vor dem Erstellen den Paketnamen der Beispiel-App und erstellen Sie sie dann. Wenn Sie in Ihrer Play Console Pakete anderer Apps 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 in der Play Console nicht konfiguriert wurden.
  3. Generieren Sie ein signiertes Android App Bundle.
    1. Uploadschlüssel und Schlüsselspeicher generieren
    2. App mit dem Uploadschlüssel signieren
    3. Google Play App-Signatur konfigurieren

Im nächsten Schritt laden Sie das Android App Bundle in die Google Play Console hoch.

3. Einmalkaufprodukt mit Vorbestellung in der Play Console erstellen

Wenn Sie in der Google Play Console Einmalkaufprodukte 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 Details zur App 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 > Test > Interner Release > Neuen Release erstellen.
    2. Geben Sie einen Release-Namen 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 Einmalkaufprodukte erstellen.

Einmalkaufprodukt erstellen

Erstellen Sie nun das Einmalkaufprodukt, das 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 darstellt.
    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 die regionale Verfügbarkeit. Für ein Einmalkaufprodukt ist mindestens eine Kaufoption erforderlich, die definiert, wie die Berechtigung gewährt wird, sowie den Preis und die regionale Verfügbarkeit. Für dieses 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 speziell für diese Kaufoption gelten.
    • 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 ist, einschließlich 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 Preise 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 festgelegt.
    1. Deaktivieren Sie nur das Land United States und klicken Sie dann auf Als „nicht verfügbar“ festlegen. Jetzt ist das Einmalkaufprodukt nur in den 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. Daraufhin wird ein Dialogfeld angezeigt, in dem Sie den Preis festlegen können.
    4. Geben Sie 10 USD ein und klicken Sie dann auf Speichern.
  7. Klicken Sie auf Als Entwurf speichern.

Hinweis: Aktivieren Sie die Kaufoption noch nicht. Wir aktivieren sie, nachdem wir das Vorbesteller-Angebot konfiguriert haben. 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

Jetzt 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 (upcoming_movie_1) auf den Rechtspfeil. 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. Es sollte nur United States angezeigt werden, das 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 Details zur Vorbestellung 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 Kein Rabatt aus.
    • (Optional) Tags:Fügen Sie relevante Tags hinzu.
    • Startdatum und zugehörige Uhrzeit:Legen Sie ein Datum fest, das mindestens drei Tage in der Zukunft liegt.
    • Enddatum und zugehörige 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/einer bestimmten späteren Uhrzeit verfügbar sein soll.
    • (Optional) Garantie des niedrigeren Preises:Wählen Sie diese Option aus, wenn Nutzern der niedrigere Preis zwischen dem Vorbestellungs- und dem Veröffentlichungspreis berechnet werden soll. Das kann ein starker Anreiz für Frühkä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 zu dem Datum veröffentlicht, das Sie zuvor in den Details zur Vorbestellung konfiguriert haben.

Video zur Erstellung von Vorbesteller-Angeboten

Im folgenden Video werden die zuvor beschriebenen Schritte zur Erstellung von Vorbesteller-Angeboten gezeigt.

4. In die Play Billing Library einbinden

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

  1. Fügen Sie der Beispiel-App die Play Billing Library-Abhängigkeit hinzu.
    dependencies {
    val billing_version = "8.1.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. Initialisieren Sie den BillingClient. Der BillingClient ist das Client-SDK, das sich in Ihrer App befindet und mit der Play Billing Library kommuniziert. Das folgende Code-Snippet zeigt, wie Sie den Abrechnungsclient initialisieren.
    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. Verbinden Sie sich mit Google Play.Das folgende Code-Snippet zeigt, wie Sie sich mit Google Play verbinden.
    /**
    * 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. Rufen Sie die Details zum Einmalkaufprodukt ab.Nachdem Sie Ihre App in die Play Billing Library eingebunden haben, müssen Sie die Details zum Einmalkaufprodukt in Ihre 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 (upcoming_movie_1 in diesem Beispiel) 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. Sie können jede Kaufoption anhand ihres offerIdToken eindeutig identifizieren.
  5. Rufen Sie das Angebotstoken zusammen mit den Details zum Vorbesteller-Angebot ab. Sie benötigen das Angebotstoken, um in Schritt 6 den Abrechnungsprozess 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 Abrechnungsprozess.
    /**
     * 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-Einbindung mit Lizenztestern und dem Play Billing Lab testen.

Informationen zum Testen Ihrer Kaufoptionen mit dem Play Billing Lab finden Sie im Codelab Mit regionalen Produktpreisen neue Märkte erschließen.

6. Nächste Schritte

Referenzdokumente

7. Glückwunsch!

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

Umfrage

Wir freuen uns über Ihr Feedback zu diesem Codelab. Nehmen Sie sich einige Minuten Zeit, um an unserer Umfrage teilzunehmen.