Sürüm 4 veya 5'ten Google Play Faturalandırma Kitaplığı 6'ya geçiş

Bu konuda, Google Play Faturalandırma Kitaplığı 4 veya 5'ten Google Play Faturalandırma Kitaplığı 6 ve yeni abonelik özelliklerinin nasıl kullanılacağı.

6.0.0 sürümündeki değişikliklerin tam listesi için aşağıdaki sürüm notlar ekleyin.

Genel Bakış

Google Play Faturalandırma Kitaplığı 6, kullanıma sunulan yeni abonelik özelliklerini geliştiriyor birkaç iyileştirme daha ekledik. Bu özellikler sayesinde olanak tanıyıp operasyonel maliyetleri düşürerek SKU oluşturma ve yönetme çözümüdür.

Play Faturalandırma Kitaplığı ile sunulan yeni özellikler hakkında daha fazla bilgi için 5. Play'de aboneliklerle ilgili son değişiklikler bölümüne bakın Konsol.

Geriye dönük uyumlu Play Faturalandırma Kitaplığı'nı yeni sürüme geçirme

Tüm mevcut abonelik ürünleri otomatik olarak bu yeni sürüme dönüştürüldü. Play Faturalandırma Kitaplığı 5'in Mayıs 2022 sürümünün ve yeni abonelik platformu. Bu durum, herhangi bir abonelik yapmanız gerekmez. yeni sürümle uyumlu bir kataloğa sahip olması için sürümlerinden biridir. Aboneliklerin nasıl çalıştığıyla ilgili SKU'lar geriye dönük uyumlu aboneliklere dönüştürüldü. Daha fazla bilgi için Çalışma kılavuzu Play Console Yardım Merkezi'ndeki makalesine göz atın.

Uygulamanızın eski sürümleri çalışmaya devam eder

Geriye dönük uyumlu bir abonelik kataloğunuz varsa mevcut tüm sürümlerin uygulamanız bu ürünlerde amaçlandığı şekilde çalışmaya devam edecektir. Tek seferlik ürün satın alma işlemleri de eski sürümlerde sorunsuz bir şekilde çalışmaya devam edecektir.

Uygulamanızın kullanımdan kaldırılan yöntemlerin kullanıldığı sürümler (örneğin, querySkuDetailsAsync()) geriye dönük olmayan temel planları veya teklifleri satamaz. uyumlu olmalıdır. Geriye dönük uyumlu fırsatlar hakkında bilgi edinmek için Play Console Yardım Merkezi makalesine bakın.

Play Faturalandırma Kitaplığı 5 veya 6'ya yükseltme

Play Faturalandırma Kitaplığı 5 ve 6'da, kullanımdan kaldırılan yöntemler bulunuyor querySkuDetailsAsync ve BillingFlowParams.Builder.setSkuDetails Faturalandırma olarak SkuDetails akış parametresidir. Bu durumda, kademeli olarak Play Faturalandırma Kitaplığı 6'ya geçebilirsiniz planlayarak bu süreci kolaylaştırabilirsiniz.

Taşıma işleminin ilk adımı olarak kitaplığı güncelleyebilirsiniz. sürümünü kullanıyorsanız kataloğunuzu ve arka ucunuzu olduğu gibi bırakın ve uygulamanızı kullanmaya devam edebilir. Şunu kullanmıyorsanız: queryPurchases, launchPriceChangeFlow veya setVrPurchaseFlow olmalı beklendiği gibi çalışmaya devam eder. Daha sonra, yeni özellikleri tamamen benimsemek için abonelik özellikleri Mayıs 2022'de kullanıma sunuldu.

Daha önce bu özellikleri Google Play Faturalandırma Kitaplığı ile kullandıysanız 5 geçiş için doğrudan Google Güncellemeleri Güncelle" etiketli bölümlere geçebilirsiniz Play Faturalandırma Kitaplığı ve Kullanıcının aboneliğini değiştirme satın alma işlemleri. Önceki bir sürümden başlıyorsanız veya henüz yeni özellikleri tam olarak kullanmaya başlamadıysanız, geçiş sürecinin adımları izleyerek bunları nasıl benimseyeceğinizi öğrenebilirsiniz.

Tam taşıma adımları

Arka uç ürün kataloğunuzda yeni abonelikler oluşturun

Play Console'u veya Play Developer API'yi kullanarak artık şunları yapabilirsiniz: Her biri birden fazla temel plana sahip tek bir abonelik yapılandırın. tekliflerdir. Abonelik teklifleri, esnek fiyatlandırma modelleri ve uygunluk seçeneklerine sahiptir. Çeşitli özellikleri kullanarak abonelik yaşam döngüsü boyunca fırsatlar oluşturabilirsiniz. otomatik yenilenen ve ön ödemeli planlar.

Yeni tarihinden önce, Play Faturalandırma Kitaplığı 6 entegrasyonunuz için abonelik platformu hakkında daha fazla bilgi edinin. Eski kataloğunuzda yinelenen ürünleri birleştirebilirsiniz Tek bir abonelik ve kullanım kapsamında aynı yararlanma hakkı avantajlarını temsil eden istediğiniz tüm seçenekleri temsil edecek temel plan ve teklif yapılandırmaları değer katar. Bu öneri hakkında daha fazla bilgi için bkz. Play Console Yardımı'nın bölümünden eski abonelikler makalesine göz atın.

Dönüştürülen abonelik ürünlerini Mayıs 2022 sürümü; sürümleri ile satılacak olduklarından, bunları uygulamanızın, querySkuDetailsAsync() etkileyebileceğini öğrendiniz.

Dönüşüm sürecinde, kataloğunuzdaki abonelik ürünleri oluşturuldu Kazayla ortaya çıkabilecek değişiklikleri önlemek için Mayıs 2022'den önce salt okunur sorunları gidermeye çalışır. Bu aboneliklerde değişiklik yapmak ama ön ucunuzu ve kalitenizi etkileyebilecek arka uç entegrasyonları:

  • Ön uçta, querySkuDetailsAsync() kullanan uygulama sürümleri abonelik ürünü ayrıntılarında yalnızca geriye dönük uyumlu temel planlar satılabilir geriye dönük olarak uyumlu tek bir temel plan ve teklif olabilir. Bu nedenle, dönüştürülen aboneliklere yeni planlar veya teklifler eklerseniz Yeni ek temel planlar veya fırsatlar bu eski cihazlarda satılamayacak. sürümleri de ekleyebilirsiniz.

  • Arka uçta, dönüştürülen aboneliklerinizi Play Console kullanıcı arayüzü. Bunları inappproducts ile yönetemezsiniz . Ayrıca Satın alma işlemlerini yönetmek için yeni abonelik satın alma durumu uç noktasına (purchases.subscriptionsv2.get) geçin Bu abonelikler için eski satın alma durumu uç noktası (purchases.subscriptions.get) yalnızca geriye dönük uyumlu temel planları ve teklifleri yönetmek için gereken veriler değeri için teklif verirsiniz. Daha fazla bilgi için Abonelik satın alma durumunu yönetme bölümünü inceleyin.

Yeni API ile arka uç abonelik kataloğunuzu yönetin

Abonelik ürün kataloğunuzu Google Play Developer API, yeni abonelik ürününü kullanmanız gerekiyor Abonelikler, temel planlar ve teklifler oluşturup yönetmek için uç noktaları tanımlama. Mayıs 2022 abonelik özelliklerini okuyun kılavuz bu sürümdeki ürün kataloğu API'sinde yapılan değişiklikler hakkında daha fazla bilgi edinin.

Bir otomatik ürün kataloğu yönetim modülünün, Google Play Faturalandırma abonelikleri, inappproducts Yönetmek ve yayınlamak için yeni Subscription Publishing API ile API abonelik kataloğunuzu kullanabilirsiniz. Üç yeni uç nokta vardır:

Bu yeni uç noktalar, tüm bu olanaklardan yararlanmak için kataloğunuzdaki yeni özellikler: temel plan ve teklif etiketleri, bölgesel hedefleme, ön ödemeli planlar ve daha fazlası.

Yine de inappproducts Tek seferlik satın alım ürünleri için uygulama içi ürün kataloğunuzu yöneten API.

Uygulamanızın kullanımdan kaldırılan yöntemlerin (ör. querySkuDetailsAsync()) kullanıldığı sürümlerde, geriye dönük uyumlu olmayan temel planlar veya teklifler satılamaz. Geriye dönük uyumlu fırsatlar hakkında buradan bilgi edinebilirsiniz.

Google Play Faturalandırma Kitaplığı'nı güncelleme

Yeni abonelik ürünleri kataloğunuzu oluşturduktan sonra, uygulamanızı Google Faturalandırma Kitaplığı 5'e taşıyabilirsiniz. Mevcut Şu şekilde güncellenmiş sürüme sahip Play Faturalandırma Kitaplığı bağımlılığı: uygulamanızın build.gradle dosyası.

dependencies {
    def billingVersion = "6.0.0"

    implementation "com.android.billingclient:billing:$billingVersion"
}

Projeniz için herhangi bir çağrıda değişiklik yapmamış olsanız bile, yöntemler: Play Faturalandırma Kitaplığı 6 geriye dönük uyumludur. SKU kavramı gibi düşünülebilir. Kullanımdan kaldırılmış olarak görülse de artımlı süreçtir.

Faturalandırma İstemcisini ilk kullanıma hazırlayın ve Google Play ile bağlantı kurun

Satın alma işlemlerini Android uygulamasından başlatmanın ilk adımları aynıdır:

Satın alınabilecek ürünleri göster

Kullanıcının satın alabileceği tüm teklifleri almak için:

  • SkuDetailsParams yerine QueryProductDetailsParams yazın
  • BillingClient.querySkuDetailsAsync() görüşmesini değiştir BillingClient.queryProductDetailsAsync() kullanmak için

Sorgu sonuçlarının artık SkuDetails yerine ProductDetails olduğunu unutmayın. Her ProductDetails öğede ürünle ilgili bilgiler yer alır (kimlik, başlık, tür vb.). Abonelik ürünleri için ProductDetails List<ProductDetails.SubscriptionOfferDetails> içeren bir List<ProductDetails.SubscriptionOfferDetails> abonelik teklifi ayrıntılarının yer aldığı listedir. Tek seferlik satın alımlarda geçerli olan ürünler için ProductDetails, ProductDetails.OneTimePurchaseOfferDetails içeriyor. Bu kullanıcılara hangi tekliflerin gösterileceğine karar vermek için kullanılabilir.

Aşağıdaki örnek, uygulamanızın değişiklikten önce ve sonra nasıl görünebileceğini gösterir aşağıdaki değişiklikleri yaparak:

Önce

Kotlin

val skuList = ArrayList<String>()

skuList.add("up_basic_sub")

val params = SkuDetailsParams.newBuilder()

params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build()

billingClient.querySkuDetailsAsync(params) {
    billingResult,
    skuDetailsList ->
    // Process the result
}

Java

List<String> skuList = new ArrayList<>();

skuList.add("up_basic_sub");

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();

params.setSkusList(skuList).setType(SkuType.SUBS).build();

billingClient.querySkuDetailsAsync(params,
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult,
                List<SkuDetails> skuDetailsList) {
            // Process the result.
        }
    }
);

Sonra

Kotlin

val productList =
    listOf(
        QueryProductDetailsParams.Product.newBuilder()
            .setProductId("up_basic_sub")
            .setProductType(BillingClient.ProductType.SUBS)
            .build()
    )

val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build()

billingClient.queryProductDetailsAsync(params) {
    billingResult,
    productDetailsList ->
    // Process the result
}

Java

ImmutableList<Product> productList = ImmutableList.of(Product.newBuilder()
                                            .setProductId("up_basic_sub")
                                            .setProductType(ProductType.SUBS)
                                            .build());

QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
    .setProductList(productList)
    .build();

billingClient.queryProductDetailsAsync(
        params,
        new ProductDetailsResponseListener() {
                public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) {
                    // Process the result
                }
        }
);

queryProductDetailsAsync için geri çağırma, List<ProductDetails> döndürüyor. Her ProductDetails öğede ürünle ilgili bilgiler yer alır (kimlik, başlık, tür vb.). Aradaki temel fark abonelik ürünler artık bir List<ProductDetails.SubscriptionOfferDetails> de içeriyor bir kampanya oluşturun.

Play Faturalandırma Kitaplığı'nın önceki sürümleri yeni (abonelikler, temel planlar, teklifler vb.) içeren yeni sistem, Her abonelik SKU'sunu geriye dönük uyumlu tek bir SKU'ya çevirir. ve teklife dönüşebilir. Tek seferlik satın alımlarda kullanılan ürünler ProductDetails nesnesine taşındı. Tek seferlik teklif ayrıntıları satın alınan ürüne getOneTimePurchaseOfferDetails() yöntemini çağırın.

Nadiren de olsa bazı cihazlar ProductDetails ve queryProductDetailsAsync() öğelerini desteklemeyebilir. Bunun nedeni genellikle Google Play Hizmetleri. Emin olmak için destek alabileceğinizi isFeatureSupported() PRODUCT_DETAILS için özelliğini queryProductDetailsAsync aramayı deneyin. Yanıt OK cihaz bu özelliği desteklediğinden queryProductDetailsAsync() numaralı telefonu aramaya devam edebilirsiniz. Yanıt FEATURE_NOT_SUPPORTED ise Bunun yerine, querySkuDetailsAsync(). Geriye dönük uyumluluğun nasıl kullanılacağı hakkında daha fazla bilgi edinmek için Mayıs 2022 abonelik özellikleri kılavuzunu inceleyin.

Teklif satın alma akışını başlatma

Bir fırsat için satın alma akışı başlatmak, akış başlatmaya çok benzerdir. isteyebilirsiniz. Sürüm 6'yı kullanarak bir satın alma isteği başlatmak için aşağıdakileri yapın:

  • BillingFlowParams için SkuDetails kullanmak yerine, ProductDetailsParams kullanın.
  • Teklif kimliği ve temel plan kimliği gibi teklif ayrıntılarına SubscriptionOfferDetails kullanılarak ulaşılabilir. nesnesini tanımlayın.

Kullanıcının seçtiği fırsatla bir ürün satın almak için offerToken kazanın ProductDetailsParams nesnesine aktarmanızı sağlar.

BillingFlowParams nesnesi oluşturduktan sonra faturalandırma akışını başlatın BillingClient aynı kalır.

Aşağıdaki örnek, uygulamanızın değişiklikten önce ve sonra nasıl görünebileceğini gösterir aşağıdaki değişiklikleri yaparak:

Önce

Kotlin

// An activity reference from which the billing flow will be launched.
val activity : Activity = ...
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
val billingFlowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetails)
                            .build()

val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

Java

// An activity reference from which the billing flow will be launched.
Activity activity = ...;
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(skuDetails)
        .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

Sonra

Kotlin

// An activity reference from which the billing flow will be launched.
val activity : Activity = ...;

val productDetailsParamsList = listOf(
    BillingFlowParams.ProductDetailsParams.newBuilder()
        // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
        .setProductDetails(productDetails)
        // For One-time product, "setOfferToken" method shouldn't be called.
        // For subscriptions, to get the offer token corresponding to the selected
        // offer call productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken
        .setOfferToken(selectedOfferToken)
        .build()
)

val billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .build()

// Launch the billing flow
val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

Java

// An activity reference from which the billing flow will be launched.
Activity activity = ...;

ImmutableList<ProductDetailsParams> productDetailsParamsList =
    ImmutableList.of(
        ProductDetailsParams.newBuilder()
             // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
            .setProductDetails(productDetails)
            // For one-time products, "setOfferToken" method shouldn't be called.
            // For subscriptions, to get the offer token corresponding to the selected
            // offer call productDetails.getSubscriptionOfferDetails().get(selectedOfferIndex).getOfferToken()
            .setOfferToken(selectedOfferToken)
            .build()
    );

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .build();

// Launch the billing flow
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);

Satın alma işlemlerini gerçekleştirme

Satın alma işlemleri Google Play Faturalandırma Kitaplığı 6 ile benzer şekilde işlenmeye devam ediyor önceki sürümlere dönelim.

Kullanıcıya ait tüm etkin satın alma işlemlerini almak ve yeni satın almak istiyorsanız aşağıdakileri yapın:

  • BillingClient.SkuType değerini queryPurchasesAsync(), bir QueryPurchasesParams nesnesi iletin (BillingClient.ProductType değeri içeren)
ziyaret edin.

Aşağıdaki örnek, uygulamanızın daha önce ve sonra nasıl görünebileceğini şu değişiklikleri yaptıktan sonra:

Önce

Kotlin

billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) {
    billingResult,
    purchaseList -> {
        // Process the result
    }
}

Java

billingClient.queryPurchasesAsync(
    BillingClient.SkuType.SUBS,
    new PurchasesResponseListener() {
        public void onQueryPurchasesResponse(
                BillingResult billingResult,
                ListP<urchase >purchases) {
            // process the result
        }
    }
);

Sonra

Kotlin

billingClient.queryPurchasesAsync(
    QueryPurchasesParams.newBuilder()
        .setProductType(BillingClient.ProductType.SUBS)
        .build()
) { billingResult, purchaseList ->
    // Process the result
}

Java

billingClient.queryPurchasesAsync(
    QueryPurchasesParams.newBuilder().setProductType(ProductType.SUBS).build(),
    new PurchasesResponseListener() {
        public void onQueryPurchasesResponse(
                BillingResult billingResult,
                List<Purchase> purchases) {
            // Process the result
        }
    }
);

Uygulama dışı satın alma işlemlerini yönetme adımları ve bekleyen işlemler değişmedi.

Arka ucunuzdaki yeni API ile abonelik satın alma durumunu yönetin

Abonelik satın alma durumu yönetim bileşeninizi taşımanız gerekir arka ucunuzda, oluşturulan yeni ürünlerin satın alımına geri dönüp bakarsınız. Mevcut abonelik satın alma durumunuzun yönetimi bileşeninin normal şekilde çalışması gerekir: Bu özellik, Mayıs 2022 lansmanından önce tanımlanmalıdır ve satın alma işlemlerini yönetmek için yeterli olmalıdır. sunar, ancak yeni işlevlerin hiçbirini desteklemez.

Satın alma işlemleri için yeni Subscription Purchases API'sini satın alma durumunu kontrol eden abonelik satın alma durumu yönetim modülü durumu sunar ve arka ucunuzda Play Faturalandırma aboneliği yararlanma haklarını yönetir. API'nin eski sürümü, yönetim için gerekli tüm ayrıntıları döndürmez satın alma işlemlerini izleyebilirsiniz. Önceki sürümlerdeki değişikliklerle ilgili ayrıntılar için Mayıs 2022'de sunulan yeni abonelik özellikleri rehberini inceleyin.

Normalde, yeni bir abonelik satın aldığınızda Subscription Purchases API'yi SubscriptionNotification Gerçek Zamanlı Geliştirici Bildirimi abonelik durumuyla ilgili en son bilgileri görebilirsiniz. Mevcut şifrenizi yeni sürümüyle purchases.subscriptions.get için yapılan çağrılar Subscription Purchases API'si, purchases.subscriptionsv2.get. Adında yeni bir kaynak var. SubscriptionPurchaseV2 sahip olduğunuz 'nı inceleyin.

Bu yeni uç nokta, tüm abonelik ürünlerinizin ve satın aldığınız uygulamanın hangi sürüm olduğunu ve ürün tanımlandığında (Mayıs 2022 lansmanından önce veya sonra), Taşıma işleminden sonra aboneliğinizin yalnızca bu sürümüne ihtiyacınız olacak. modülünü kullanabilirsiniz.

Kullanıcının abonelik satın alma işlemlerini değiştirme

Play Faturalandırma Kitaplığı 5 ve önceki sürümlerde: ProrationMode kullanıcının abonelik satın alma işlemlerine (yükseltme gibi) değişiklikleri uygulamak için kullanıldı veya alt sürüme geçme. Bu özellik kullanımdan kaldırıldı ve şununla değiştirildi: ReplacementMode kullanıma sunduk.

Abonelik fiyatı değişikliklerini yönetme

Daha önce desteği sonlandırılan launchPriceConfirmationFlow API şuradan kaldırıldı: Play Faturalandırma Kitaplığı 6. Alternatifler için fiyat değişikliklerine bakın rehberini inceleyin.

Play Faturalandırma Kitaplığı hatalarını işleme

Play Faturalandırma Kitaplığı 6'da şunu belirten yeni bir NETWORK_ERROR kodu eklendi: Kullanıcının cihazı ile Google Play sistemi. Kodlarda da değişiklikler yapıldı: SERVICE_TIMEOUT ve SERVICE_UNAVAILABLE. Daha fazla bilgi için BillingResult yanıtının ele alınması bölümüne bakın. ekleyebilirsiniz.

Beklemedeki işlemleri ele alma

Play Faturalandırma Kitaplığı 6.0.0 sürümünden itibaren sipariş oluşturmamaktadır Bekleyen satın alma işlemlerinin kimliği. Bu satın alma işlemleri için sipariş kimliği şundan sonra doldurulur: satın alma işlemi, PURCHASED durumu. Entegrasyonunuzun yalnızca İşlemin tamamı tamamlandı. Şu ayrıntılar için satın alma jetonunu kullanmaya devam edebilirsiniz: kayıtları. Bekleyen satın alma işlemlerinin ele alınması hakkında daha fazla bilgi için bkz. Play Faturalandırma Kitaplığı entegrasyon kılavuzu ve satın alma yaşam döngüsü yönetimi rehberini inceleyin.