Tek seferlik ürünler için ön sipariş fırsatları ekleme

1. Giriş

Bu codelab'de tek seferlik ürün (OTP) oluşturmaya ve ürüne ön sipariş teklifi eklemeye odaklanacaksınız.

Not: Bu codelab'e başlamadan önce Tek seferlik ürünler EAP talep formunu doldurarak ön sipariş özelliğine erişim isteğinde bulunmanız gerekir.

Kitle

Bu codelab, tek seferlik ürünler hakkında bilgi sahibi olan ve tek seferlik ürünlerine ön sipariş fırsatları eklemeyi öğrenmek isteyen Android uygulama geliştiricilere yöneliktir.

Ön koşul

Tek seferlik ürünler konusunda yeniyseniz Bölgesel ürün fiyatlandırmasıyla yeni pazarlara açılma adlı codelab'i tamamlamanız önerilir.

Öğrenecekleriniz...

  • Tek seferlik ürünleriniz için ön sipariş teklifleri oluşturmak üzere Google Play Console'u kullanma
  • Tek seferlik ürünleri ve ilgili ön sipariş teklifi ayrıntılarını sorgulamak için Play Faturalandırma Kitaplığı API'lerini kullanma

İhtiyacınız olanlar...

2. Örnek uygulamayı oluşturma

Bu codelab'de, tek seferlik ürünleri nasıl yöneteceğinizi öğretmek için örnek bir Android uygulaması kullanılmaktadır. Örnek uygulama, aşağıdaki yönleri gösteren eksiksiz kaynak koduna sahip, tam işlevli bir Android uygulaması olacak şekilde tasarlanmıştır:

  • Uygulamayı PBL ile entegre etme
  • Tek seferlik ürünler ve ilgili ön sipariş fırsatları getirilir.
  • Bölgesel fiyatlandırma için satın alma akışlarını yürütün.

Aşağıdaki demo videosunda, örnek uygulamanın dağıtılıp çalıştırıldıktan sonra nasıl görüneceği ve nasıl davranacağı gösterilmektedir.

Tek seferlik ürünler ve Play Faturalandırma Kitaplığı (PBL) hakkında bilginiz varsa örnek uygulamayı indirip deneyebilirsiniz.

Ön koşullar

Örnek uygulamayı oluşturup dağıtmadan önce aşağıdakileri yapın:

Derleme

Bu derleme adımının amacı, örnek uygulamanın imzalı bir Android App Bundle dosyasını oluşturmaktır.

Android uygulama paketini oluşturmak için aşağıdaki adımları uygulayın:

  1. GitHub'dan örnek uygulamayı indirin.
  2. Örnek uygulamayı oluşturun. Oluşturmadan önce örnek uygulamanın paket adını değiştirin ve ardından oluşturun. Play Console'da başka uygulamaların paketleri varsa örnek uygulama için sağladığınız paket adının benzersiz olduğundan emin olun.

    Not: Örnek uygulamayı oluşturduğunuzda yalnızca yerel test için kullanabileceğiniz bir APK dosyası oluşturulur. Ancak ürünler Play Console'da yapılandırılmadığı için uygulamayı çalıştırmak ürünleri ve fiyatları getirmez.
  3. İmzalı bir Android App Bundle oluşturun.
    1. Yükleme anahtarı ve anahtar deposu oluşturma
    2. Uygulamanızı yükleme anahtarınızla imzalama
    3. Play Uygulama İmzalama'yı yapılandırma

Bir sonraki adım, Android uygulama paketini Google Play Console'a yüklemektir.

3. Play Console'da ön siparişle birlikte OTP oluşturma

Google Play Console'da tek seferlik ürünler (OTP) oluşturmak için Play Console'da bir uygulamanızın olması gerekir. Play Console'da bir uygulama oluşturun ve daha önce oluşturulan imzalı uygulama paketini yükleyin.

Uygulama oluşturma

Uygulama oluşturmak için:

  1. Geliştirici hesabınızı kullanarak Google Play Console'da oturum açın.
  2. Uygulama oluştur'u tıklayın. Uygulama oluştur sayfası açılır.
  3. Uygulama adını girin, varsayılan dili ve uygulamayla ilgili diğer ayrıntıları seçin.
  4. Uygulama oluştur'u tıklayın. Bu işlem, Google Play Console'da bir uygulama oluşturur.

Artık örnek uygulamanın imzalı uygulama paketini yükleyebilirsiniz.

İmzalı uygulama paketini yükleyin

  1. İmzalı uygulama paketini Google Play Console'un dahili test kanalına yükleyin. Para kazanmayla ilgili özellikleri Play Console'da yalnızca yükleme işleminden sonra yapılandırabilirsiniz.
    1. Test edin ve yayınlayın > Test > Dahili sürüm > Yeni sürüm oluştur'u tıklayın.
    2. Bir sürüm adı girin ve imzalı APK dosyasını yükleyin.
    3. Sonraki'yi ve ardından Kaydet ve yayınla'yı tıklayın.

Artık tek seferlik ürünler oluşturabilirsiniz.

Tek seferlik ürün oluşturma

Şimdi, kullanıcıların satın almasını istediğiniz tek seferlik ürünü oluşturun.

  1. Google Play Console'da örnek uygulamayı açın ve Play ile para kazanma > Ürünler > Tek seferlik ürünler'e gidin.
  2. Tek seferlik ürün oluştur'u tıklayın.
  3. Aşağıdaki ürün ayrıntılarını girin:
    • Ürün kimliği: Benzersiz bir kimlik girin. Örneğin, upcoming_movie_1.
    • (İsteğe bağlı) Etiketler: Alakalı etiketler ekleyin.
    • Ad: Ürün adı girin. Örneğin, Product Movie.
    • Açıklama: Ürün açıklaması girin. Örneğin, Product Description.
    • (İsteğe bağlı) Simge görseli ekleyin: Ürününüzü temsil eden bir simge yükleyin.
    Not: Bu codelab'in amacı doğrultusunda Vergi, kanunlara ve kurallara uygunluk, programlar bölümünü yapılandırmayı atlayabilirsiniz.
  4. İleri'yi tıklayın.
  5. Satın alma seçeneği ekleyin ve bölgesel kullanılabilirliğini yapılandırın. Tek seferlik ürünler için en az bir satın alma seçeneği gerekir. Bu seçenek, yetkinin nasıl verileceğini, fiyatını ve bölgesel stok durumunu tanımlar. Bu codelab'de ürün için standart Satın al seçeneğini ekleyeceğiz.Satın alma seçeneği bölümünde aşağıdaki ayrıntıları girin:
    • Satın alma seçeneği kimliği: Benzersiz bir kimlik girin. Örneğin, buy-movie.
    • Satın alma türü: Satın al'ı seçin.
    • (İsteğe bağlı) Etiketler: Bu satın alma seçeneğine özel etiketler ekleyin.
    • (İsteğe bağlı) Gelişmiş seçenekleri yapılandırmak için Gelişmiş seçenekler'i tıklayın. Bu codelab'in amacı doğrultusunda gelişmiş seçenekler yapılandırmasını atlayabilirsiniz.
  6. Ardından, satın alma seçeneğinin bölgesel stok durumunu ve fiyatını yapılandırmanız gerekir. Bölgesel stok durumu bölümünde, ürününüzün kullanılabildiği bölgeleri (uygulamanızın henüz yayınlanmadığı bölgeler dahil) belirtirsiniz. Satın alma seçeneği varsayılan olarak tüm bölgelerde kullanılabilir.Kullanılabilirlik ve fiyatlandırma bölümünde Kullanılabilirlik ve erişimi düzenle'yi tıklayın.
    1. Kullanılamıyor olarak ayarla'yı seçin.
    Tüm bölgelerin otomatik olarak seçildiğini ve Kullanılabilir olarak ayarlandığını unutmayın.
    1. Yalnızca United States ülkesinin seçimini kaldırın ve Kullanılamaz olarak ayarla'yı tıklayın. Tek seferlik ürün artık yalnızca United States'da kullanılabilir.
    2. Tüm bölgeler açılır listesinde Kullanılabilir ülkeler ve bölgeler'i seçin. Yalnızca United States simgesini görürsünüz.
    3. Fiyat simgesini tıklayın. Fiyatı ayarlamak için bir iletişim kutusu gösterilir.
    4. 10 ABD doları girip Kaydet'i tıklayın.
  7. Taslak olarak kaydet'i tıklayın.

Not: Satın alma seçeneğini henüz etkinleştirmeyin. Ön sipariş teklifi yapılandırıldıktan sonra bu özelliği etkinleştiririz. Bunun nedeni, bölgesel kullanılabilirliği ayarlanmış etkin bir satın alma seçeneğine ön sipariş fırsatı ekleyememenizdir.

Ön sipariş fırsatı ekleme

Şimdi, daha önce oluşturduğunuz satın alma seçeneği için bir ön sipariş fırsatı ekleyeceksiniz. Ön sipariş fırsatı, kullanıcıların öğenizi resmi olarak yayınlanmadan önce satın almasına olanak tanır. Ön sipariş fırsatlarının yalnızca Satın alma seçeneğinde desteklendiğini ve yalnızca bir bölgedeki yeni ürünler için yapılandırılabileceğini unutmayın.

Ön sipariş fırsatı eklemek için aşağıdaki 2 adımı uygulamanız gerekir:

  1. Satın alma seçeneğini ön sipariş fırsatı için hazırlayın.
  2. Satın alma seçeneği için ön sipariş fırsatını ekleyin.

Satın alma seçeneğini ön sipariş fırsatı için hazırlama

  1. Google Play Console'da örnek uygulamayı açın ve Play ile para kazanma > Ürünler > Tek seferlik ürünler'e gidin.
  2. Tek seferlik ürünler sayfasında ürününüzün sağ okunu (upcoming_movie_1) tıklayın. Tek seferlik ürünü düzenle sayfası açılır.
  3. Daha önce oluşturduğunuz buy-movie satın alma seçeneği için sağ oku tıklayın. Satın alma seçeneğini düzenleyin sayfası açılır.
  4. Kullanılabilirliği ve erişimi düzenle'yi tıklayın, ardından Erişilebilir olarak ayarla ve kullanıcıların ön sipariş vermesine izin ver'i seçin.
  5. Tüm bölgeler açılır listesinden Kullanılabilir ülkeler ve bölgeler'i seçin. Bu bölümde yalnızca daha önce yapılandırdığınız United States gösterilmelidir.
  6. Ülkeyi seçin ve Yalnızca ön sipariş için kullanılabilir olarak ayarla'yı tıklayın.
  7. Kaydet'i tıklayın.

Satın alma seçeneğinize henüz ön sipariş fırsatı eklemediğinizi unutmayın. Sonraki adım, ön sipariş fırsatını eklemektir.

Ön sipariş fırsatı ekleme

  1. Google Play Console'da örnek uygulamayı açın ve Play ile para kazanma > Ürünler > Tek seferlik ürünler'e gidin.
  2. Tek seferlik ürünler sayfasında ürününüz için Fırsat ekle > Ön sipariş'i (upcoming_movie_1) tıklayın. Ön sipariş ekle sayfası açılır.
  3. Ön Sipariş Ayrıntılarını Girin:
    • Ön sipariş kimliği: preorder-offer-1 değerini girin.
    • (İsteğe bağlı) İndirim ekleyin: Hiçbiri, Yüzde veya Net indirim tutarı seçeneklerinden birini belirleyebilirsiniz. Bu codelab'in amacı doğrultusunda Yok'u seçin.
    • (İsteğe bağlı) Etiketler: Alakalı etiketler ekleyin.
    • Başlangıç tarihi ve saati: En az 3 gün sonrası bir tarih ayarlayın.
    • Bitiş tarihi ve saati: Başlangıç tarihinden en az 24 saat sonraki bir tarihi ayarlayın.
    • Ön siparişten sonra kullanılabilirlik: Ürünün, ön sipariş döneminden hemen sonra mı yoksa daha sonraki belirli bir tarih/saatte mi kullanıma sunulacağını seçin.
    • (İsteğe bağlı) Daha düşük fiyat garantisi: Kullanıcılardan ön sipariş fiyatı ile piyasaya sürülme fiyatı arasından daha düşük olanı tahsil etmek istiyorsanız bu seçeneği belirleyin. Bu, erken dönem alıcılar için güçlü bir teşvik olabilir.
  4. Kaydet'i tıklayın.
  5. Tek seferlik ürününüz (upcoming_movie_1) için Tek seferlik ürünü düzenle sayfasını açın.
  6. Satın alma seçeneği (buy-movie) için Etkinleştir'i tıklayın.
  7. Satın alma seçeneğinin altındaki ön sipariş fırsatı (preorder-offer-1) için Etkinleştir'i tıklayın. Bu işlem, ön sipariş teklifini etkinleştirir ve ön sipariş ayrıntılarında daha önce yapılandırdığınız tarihte yayınlar.

Ön sipariş fırsatı oluşturma videosu

Aşağıdaki videoda, daha önce açıklanan ön sipariş fırsatı oluşturma adımları gösterilmektedir.

4. PBL ile entegrasyon

Uygulamanızı Play Faturalandırma Kitaplığı (PBL) ile entegre etmek için aşağıdaki adımları uygulayın:

  1. Örnek uygulamaya Play Faturalandırma Kitaplığı bağımlılığını ekleyin.
    dependencies {
    val billing_version = "8.1.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. BillingClient'ı başlatın. BillingClient, uygulamanızda bulunan ve Play Faturalandırma Kitaplığı ile iletişim kuran istemci SDK'sıdır. Aşağıdaki kod snippet'inde, faturalandırma istemcisinin nasıl başlatılacağı gösterilmektedir.
    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. Google Play'e bağlanın.Aşağıdaki kod snippet'inde Google Play'e nasıl bağlanılacağı gösterilmektedir.
    /**
    * 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. Tek seferlik ürün ayrıntılarını getirin.Uygulamanızı PBL ile entegre ettikten sonra tek seferlik ürün ayrıntılarını uygulamanıza getirmeniz gerekir. Aşağıdaki kod snippet'i, tek seferlik ürün ayrıntılarını uygulamanıza nasıl getireceğinizi gösterir.
    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());
                }
            }
            });
    }
    
    ProductDetails içinde tek seferlik ürünün (bu örnekte upcoming_movie_1) getirilmesi, aşağıdakine benzer bir yanıt verir:
    {
        "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
                }
            }
        ]
    }
    
    Ön sipariş fırsatıyla ilgili ayrıntıların oneTimePurchaseOfferDetailsList bölümünde yer aldığını unutmayın. Bu listede, Play Console'da ön sipariş fırsatı yapılandırılmış 1 satın alma seçeneği (buy-option) vardır. Her satın alma seçeneğini offerIdToken ile benzersiz şekilde tanımlayabilirsiniz.
  5. Ön sipariş fırsatı ayrıntılarıyla birlikte teklif jetonunu getirin. 6. adımda faturalandırma akışını başlatmak için teklif jetonuna ihtiyacınız vardır.
    @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. Faturalandırma akışını başlatın.
    /**
     * 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. Satın alma seçeneklerini test etme

Tek seferlik ürünlerinizi canlı uygulamanızda kullanıma sunmadan önce lisans test kullanıcılarını ve Google Play Faturalandırma Test Alanı'nı kullanarak PBL entegrasyonunuzu test edebilirsiniz.

Play Faturalandırma Test Alanı'nı kullanarak satın alma seçeneklerinizi nasıl test edebileceğinizi öğrenmek için Bölgesel ürün fiyatlandırmasıyla yeni pazarlara açılma adlı codelab'i inceleyin.

6. Sonraki adımlar

Referans belgeleri

7. Tebrikler!

Tebrikler! Tek seferlik bir ürün için ön sipariş teklifi oluşturmak üzere Google Play Console'da başarılı bir şekilde ilerlediniz. Artık Google Play'in tek seferlik satın alımlar için sunduğu esnek ürün kataloğu hakkında daha fazla bilgiye sahipsiniz.

Anket

Bu codelab ile ilgili geri bildiriminiz bizim için çok değerli. Anketimizi tamamlamak için birkaç dakikanızı ayırabilirsiniz.