Kullanıcının tercihine göre alternatif faturalandırma için uygulama içi entegrasyon kılavuzu

Bu kılavuzda, alternatif faturalandırma özelliği sunmak için API'leri nasıl entegre edeceğiniz açıklanmaktadır: tercih edebilirsiniz.

Play Faturalandırma Kitaplığı kurulumu

Android uygulamanıza Play Faturalandırma Kitaplığı bağımlılığını ekleyin. To 5.2 veya üzeri sürümleri kullanmanız gereken alternatif faturalandırma API'leri. Gerekirse önceki bir sürümden taşıma için taşıma rehberine bakın.

Google Play'e bağlanın

Entegrasyon sürecindeki ilk adımlar aşağıda açıklananlarla aynıdır: Google Play Faturalandırma entegrasyon kılavuzunu takip edin. BillingClient'ı başlatma:

  • Kullanıcıya bir teklif sunmak istediğinizi belirtmek için yeni bir yöntem çağırmanız gerekir tercih edilen faturalandırma seçenekleri: enableUserChoiceBilling.
  • Destek kayıtları için bir UserChoiceBillingListener kaydettirmeniz gerekir Kullanıcının alternatif faturalandırmayı tercih etmesi gerekir.

Aşağıdaki örnekte, bu yapılandırmalarla bir BillingClient'nin ilk kullanıma hazırlanması gösterilmektedir değişiklikler:

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

BillingClient uygulamasını başlattıktan sonra, şurayla bağlantı kurmanız gerekir: Google Play'i etkinleştirin.

Kullanılabilir ürünleri göster

Tıpkı bir Google Play faturalandırma sistemi entegrasyonu. Kullanıcının ürünleri gördüğü zaman Kullanıcı tercihine göre faturalandırma özelliğini kullanıma sunduktan sonra satın almak üzere birini seçerse akışı sağlandığından emin olun.

Kullanıcı tercihine göre faturalandırma akışını başlatma

launchBillingFlow() numaralı telefonu arayarak kullanıcı tercihine göre faturalandırma akışını başlatın. Bu komut çalışır Google Play faturalandırma sistemiyle satın alma akışı başlatmayla aynıdır. entegrasyon: bir ProductDetails örneği ve bir offerToken sağlarsınız ve kullanıcının edinmek istediği teklifle karşılaştırılır. Eğer Kullanıcı Google Play'in faturalandırma sistemini seçer. Bu bilgiler şu amaçlarla kullanılır: devam etmesini sağlar.

Geliştiriciler launchBillingFlow() hizmetini aradıklarında Google Play faturalandırma sistemi aşağıdaki kontrolü gerçekleştirir:

  • Sistem, kullanıcının Google Play ülkesinin geçerli bir ülke olup olmadığını kontrol eder. kullanıcıya tercih seçeneği sunan alternatif faturalandırmayı destekleyen ülke (ör. ülke). Kullanıcının Google Play ülkesi destekleniyorsa Google Play, alternatif faturalandırmanın etkin olup olmadığına bağlı olarak BillingClient.
    • Kullanıcı tercihine sahip alternatif faturalandırma etkinleştirilmişse satın alma işlemi akışında kullanıcı tercihi kullanıcı deneyimi gösterilir.
    • Kullanıcı tercihine sahip alternatif faturalandırma etkin değilse satın alma işlemi akışı, kullanıcı içermeyen standart Google Play faturalandırma sistemi kullanıcı deneyimini gösteriyor seçim.
  • Kullanıcının Google Play ülkesi desteklenen bir ülke değilse satın alma akışı, kullanıcı içermeyen standart Google Play faturalandırma sistemi kullanıcı deneyimini gösteriyor seçim.

Kullanıcının Play ülkesi desteklenen bir ülke

Kullanıcının Play ülkesi, desteklenen bir ülke değil

BillingClient kurulumu sırasında aktiveUserChoiceBilling çağrıldı

Kullanıcı, kullanıcının tercihine göre kullanıcı deneyimini görür

Kullanıcı, standart Google Play faturalandırma sistemi kullanıcı deneyimini görür.

allowUserChoiceBilling, BillingClient kurulumu sırasında çağrılmadı

Kullanıcı, standart Google Play faturalandırma sistemi kullanıcı deneyimini görür.

Kullanıcı, standart Google Play faturalandırma sistemi kullanıcı deneyimini görür.

Kullanıcı seçimini işleme

Satın alma akışının geri kalanını nasıl yöneteceğiniz, satış kullanıcı Google Play'in faturalandırma sistemini veya alternatif faturalandırma sistemini seçti.

Kullanıcı alternatif faturalandırma sistemi seçtiğinde

Kullanıcı alternatif faturalandırma sistemini seçerse Google Play, UserChoiceBillingListener - Uygulamaya, satın alma akışını takip edebilir. Özellikle, userSelectedAlternativeBilling() yöntemi çağrılır.

UserChoiceDetails nesnesinde sağlanan harici işlem jetonu kullanıcının alternatif faturalandırmaya girme seçimi için bir imzayı temsil eder akışı sağlar. Bu seçimden kaynaklanan herhangi bir işlemi aşağıdaki gibi bildirmek için bu jetonu kullanın: arka uç entegrasyon kılavuzunda açıklanmıştır.

UserChoiceBillingListener, şu işlemleri gerçekleştirmelidir:

  • Kullanıcının satın aldığı ürünü veya ürünü edinerek, alternatif faturalandırma sistemindeki satın alma akışında gösterilir.
  • Harici işlem jetonu olarak alınan dizeyi toplayıp arka ucunuzu test edin. Bu ad daha sonra harici işlemi Google Play'e kaydetmemiz gerekir.
  • Geliştiricinin alternatif satın alma akışını başlatın.

Kullanıcı, satın alma işlemini alternatif faturalandırma sistemini kullanarak tamamlarsa Google Play Geliştirici'yi arayarak işlemi Google Play'e bildirmelidir API'yi kullanabilirsiniz. Böylece, externalTransactionToken ve ek işlem ayrıntıları. Bkz. arka uç entegrasyon kılavuzunu inceleyin.

Aşağıdaki örnekte, 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.
    }
};

Kullanıcı Google Play'in faturalandırma sistemini seçtiğinde

Kullanıcı Google Play'in faturalandırma sistemini seçerse Google Play'den satın alabilirsiniz.

  • Daha fazla bilgi için kitaplık entegrasyon kılavuzundaki Satın alma işlemlerini işleme bölümüne bakın yeni uygulama içi satın alma işlemlerinin Google Play'in faturalandırma sistemi.
  • Şu abonelik yönetimi kılavuzunda Yeni abonelikler'e bakın: hakkında daha fazla bilgi edinin.

Abonelikteki değişiklikleri yönetme

Kullanıcıya tercih seçeneği sunan alternatif faturalandırma kullanan geliştiriciler için satın alma işlemleri Google Play'in faturalandırma sistemi üzerinden işlenir veya externalTransactionId (kullanıcının seçimine bağlıdır). Mevcut olanda yapılan değişiklikler abonelik seçeneği kullanılabilir. süresi dolana kadar aynı faturalandırma sisteminde kalmasını sağlayın.

Bu bölümde, abonelik değişikliğiyle ilgili sık karşılaşılan bazı senaryoları nasıl ele alacağınız açıklanmaktadır.

Yeni ve eski sürüme geçiş akışları

Yükseltme ve eski sürüme geçme akışları dahil olmak üzere abonelik planı değişiklikleri aboneliğin başlangıçta satın alınmış olup olmadığına bağlı olarak farklı şekilde ele alınması Google Play'in faturalandırma sistemi veya alternatif faturalandırma sistemi aracılığıyla.

Mevcut bir aboneliğe bağlı olan, aynı ödeme yöntemini paylaşan eklentiler ve yinelenen ödemeler, yükseltme olarak kabul edilir. Kullanıcılar, diğer eklentilerde kullanmak istedikleri faturalandırma sistemini seçebilmeleri gerekir. Yeni bir kampanya başlatın açıklandığı üzere launchBillingFlow() kullanarak bir satın alma deneyimi sunmak kullanıcı tercihine göre faturalandırma akışı oluşturun.

Alternatif faturalandırma sistemi üzerinden satın alınan abonelikler

Orijinal olarak geliştiricinin alternatif faturalandırma sistemini, kullanıcının tercihine bağlı olarak eski sürüme geçiş, geliştiricinin alternatif faturalandırma sistemi üzerinden devam etmelidir Böylece kullanıcı seçimi deneyimini bir daha yaşamazsınız.

Bunu yapmak için kullanıcı yeni sürüme geçme veyalaunchBillingFlow() eski sürüme geçemez. Şurada bir SubscriptionUpdateParams nesnesi belirtmek yerine: parametresi için setOriginalExternalTransactionId kullanın, harici orijinal satın alma işleminin işlem kimliği. Bu işlem kullanıcıyı göstermez (kullanıcının orijinal satın alma işlemine ait tercihinin korunduğundan) seçim ekranı yükseltme ve düşürme işlemleri için kullanılır. Bu durumda launchBillingFlow() çağrısı işlem için yeni bir harici işlem jetonu oluşturur. geri çağırmayı ifade eder.

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.

Alternatif faturalandırma sisteminde yükseltme veya düşürme işlemi tamamlandığında Harici işlem jetonunu kullanarak yeni bir işlem bildirmeniz gerekir (yeni abonelik satın alma işlemi için yapılan önceki aramayla elde edilen)

Google Play'in faturalandırma sistemi kullanılarak satın alınan abonelikler

Benzer şekilde, mevcut aboneliklerini Google Play'in Kullanıcı seçiminden sonra faturalandırma sisteminde yeni sürüme geçme veya eski sürüme geçme akışı gösterilmelidir hesaplayabilirsiniz. Aşağıdaki talimatlarda, Google üzerinden bir yükseltme veya düşürme için satın alma akışını başlatırsanız Play'in faturalandırma sistemi:

  1. Yeni plan için seçili teklifin offerToken değerini belirleyin:

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

String offerTokenNewPlan = productDetailsNewPlan
                     .getSubscriptionOfferDetails(selectedOfferIndex)
                     .getOfferToken();
  1. Google Play'in faturalandırma sistemine doğru bilgileri göndererek mevcut aboneliğin satın alma jetonu da dahil olmak üzere yeni satın alma işlemi için:

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

Bu satın alma işlemi, Google Play'in faturalandırma sisteminde yapılır ve uygulamanız PurchasesUpdatedListener.onPurchaseUpdated çağrısı değeri için teklif verirsiniz. Satın alma işlemi başarılı olursa onPurchaseUpdated() yöntemi de yeni satın alma bilgilerini alır ve arka ucunuz SUBSCRIPTION_PURCHASED Gerçek Zamanlı Geliştirici Bildirimi. yeni satın alma işleminin durumunu gösterirse, linkedPurchaseToken özelliği eski Böylece, bunu önerilir.

Abonelik iptalleri ve geri yükleme işlemleri

Kullanıcılar aboneliklerini istedikleri zaman iptal edebilmelidir. Bir kullanıcı bir aboneliği iptal ettiğinde, yararlanma hakkının feshi, ödeme dönemi sona erdiğinde. Örneğin, bir kullanıcı aylık aboneliğini iptal ederse Ayın ortasında da bu süre içinde söz konusu erişimlerinin kaldırılmasına yaklaşık 2 hafta kaldı. Bu süreçte abonelik hâlâ teknik olarak etkin olduğundan kullanıcı hizmeti kullanabilir.

Kullanıcıların bu süre zarfında iptal işlemini geri alma kararı alması sık karşılaşılan bir durumdur. aktif olduğu dönem. Bu kılavuzda, buna restorasyon adı verilir. Aşağıdakiler bölümlerde, alternatif projenizde geri yükleme senaryolarıyla ilgili faturalandırma API'si entegrasyonu.

Alternatif faturalandırma sistemi üzerinden satın alınan abonelikler

İptal edilen bir abonelik için harici işlem kimliğiniz varsa aboneliği yenilemesi için launchBillingFlow() bu tür etkinleştirme için kullanılmamalıdır. Kullanıcı iptal edilmiş bir aboneliğin etkin dönemindeyken abonelik, İşlemin o tarihte gerçekleştiğini; yenilemeleri bildirmeye devam edebilirsiniz. mevcut döngü sona erer ve bir sonraki yenileme gerçekleşir. Bu, hangi durumlarda Kullanıcı, geri yükleme kapsamında bir kredi veya özel yenileme fiyatı alır. (örneğin, kullanıcıyı aboneliğine devam etmeye teşvik eden bir tanıtım).

Google Play'in faturalandırma sistemi kullanılarak satın alınan abonelikler

Kullanıcılar abonelikleri genellikle Google Play'in faturalandırma sistemini kullanarak geri yükleyebilirler. Örneğin, İlk olarak Google Play'in faturalandırma yöntemi kullanılarak satın alınan aboneliklerin iptal edilmesi Abonelik devam ederken, kullanıcı iptal işlemini geri almayı Google Play'in Yeniden abone ol özelliği aracılığıyla etkin. Böyle bir durumda, SUBSCRIPTION_RESTARTED şeklinde bir Gerçek Zamanlı Geliştirici Bildirimi aldığınızda ve yeni bir satın alma jetonu verilmezse orijinal jeton kullanılır. . Google'da geri yüklemeyi nasıl yöneteceğinizi öğrenmek için Play'in faturalandırma sistemi için abonelik yönetiminde Geri yüklemeler bölümüne bakın. rehberini inceleyin.

Google Play'in faturalandırma sisteminde geri yükleme işlemini uygulamadan da tetikleyebilirsiniz launchBillingFlow() numaralı telefonu arayarak. Bkz. Abonelik sona ermeden önce - in-app inceleyin. Dönüşüm Optimize Edici'yi kullanan Kullanıcı seçim akışı (iptal edilen ancak satın alınan etkin olduğunda) sistem, otomatik olarak kullanıcının seçimini otomatik olarak algılar ve kullanıcı arayüzünden geri yükleyebilirsiniz. Kendisinden aboneliği Google Play üzerinden yeniden satın alabilir, ancak tekrar kontrol edebilirsiniz. Kullanıcı için yeni bir satın alma jetonu verilir seçmemiz gerekir. Arka ucunuz gerçek zamanlı SUBSCRIPTION_PURCHASED sağlar Geliştirici Bildirimi ve yeni satın alma işlemi için linkedPurchaseToken değeri durumu, eski satın alma işlemiyle birlikte yükseltme veya düşürme durumunda olduğu gibidir. iptal edilen aboneliğin jetonu.

Yeniden abonelikler

Bir aboneliğin süresi tamamen dolarsa, iptal veya kullanıcının kurtarma işlemi olmadan ödemesi reddedilirse (hesap askıya alma süresi sona ermiş) Yararlanma hakkını yeniden başlatmak isteyen yeniden abone ol seçeneğini belirleyin.

Yeniden abone olma özelliği, uygulama üzerinden şuna benzer şekilde işlenerek de etkinleştirilebilir: standart bir kayıt işlemidir. Kullanıcılar istedikleri faturalandırma sistemini seçebilmelidir. tıklayın. Bu durumda launchBillingFlow(), şurada açıklandığı gibi çağrılabilir: Kullanıcı tercihine göre faturalandırma akışını başlatın.

Alternatif faturalandırmayı test etme

Alternatif faturalandırma entegrasyonunuzu test etmek için lisans test kullanıcıları kullanılmalıdır. Siz Lisans test kullanıcısı tarafından başlatılan işlemler için faturalandırılmayacaktır. hesaplar. Daha fazla bilgi için Uygulama içi faturalandırmayı uygulama lisanslama ile test etme başlıklı makaleye bakın. lisans test kullanıcılarını yapılandırma hakkında bilgi edinin.

Sonraki adımlar

Uygulama içi entegrasyonu tamamladıktan sonra, uygulamanızı arka uç.