Yeni Abonelik Modeli ve Google Play Faturalandırma Kitaplığı 5.0’a Genel Bakış

Yıllık I/O konferansı sırasında Google, Google Play Faturalandırma Kitaplığı’nın yeni ana sürümünü tanıttı. Buna ek olarak klasik yöntemler ve silme işlemlerinin yanı sıra uygulama içi satın alma işlemlerini oluşturma, yönetme ve satma yönteminizi basitleştirmeyi amaçlayan yeni abonelik mimarisi hakkında da geniş bilgiler verdi. Bu yazıda, Google Play Faturalandırma Kitaplığı 5.0’a ait güncellemeleri inceleyecek ve en ilginç olanlarını derinlemesine inceleyeceğim.

Yeni Abonelik Modeli

Google Play Faturalama Sistemi, aboneliklerle uygulamanızdan para kazanmanıza yardımcı olan temel araçtır. Bu hizmetle ilgili hiç bilginiz yoksa lütfen bu makaleyi okuyun. Google, Kitaplığın en son sürümü ile abonelik ürünlerinin tanımlanma yapısında bazı değişiklikler yaptı ve bu da uygulama içindeki satışara ve bu satışların arka planda nasıl yönetildiğine dair değişikliklere yol açtı. 

Google Play Faturalama Kitaplığı 5.0 ile. Google temel planlar ve teklifler gibi varlıklar ekleyen abonelik mimarisini tanıttı. Hadi yakından inceleyelim. 

Uygulamanızda premium bir aboneliğiniz olduğunu ve müşterilerinize haftalık, aylık ve yıllık abonelikler sunduğunuzu varsayalım. Bu güncellemelerden önce dönem başına bir tane olmak üzere üç farklı abonelik oluşturmanız gerekir. Ardından geri dönmeye ikna etmek için uygulamanızdan ayrılan kullanıcılara ücretsiz bir deneme sunmak istediğinizi düşünelim. Bu nedenle de ücretsiz denemi imkanı veren bir tane daha yıllık abonelik oluşturmanız gerekir.

Bu iki yaygın örnek sebebiyle önceki abonelik modeliyle çok sayıda abonelik oluşturulabiliyordu ve buna daha birçok örneği de ekleyebiliriz. 

Ancak artık tüm bu senaryoları tek bir abonelikte yapabilirsiniz. Google, abonelik modelini aboneliğin kendisi, temel planlar ve teklifler olmak üzere üç bölüme ayırmıştır.

Yeni abonelik içeriklerinde şunlar bulunmaktadır: 

  • bir tanımlayıcı
  • başlık
  • tanım
  • vergi bilgileri

Geri kalan bilgiler temel planlar ve teklifler aracılığıyla oluşturulur. 

Temel plan dahilinde bulunanlar: 

  • tanımlayıcı 
  • yenileme türü (otomatik yenileme veya ön ödemeli) 
  • süre 
  • ödemesiz süre 
  • farklı bölgeler için fiyatlar ve uygunluk durumu
  • daha az öneme sahip birkaç ayar

Ayrıntıların tüm listesini resmi belgelerde bulabilirsiniz. 

Teklif dahilinde bulunanlar:

  • tanımlayıcı
  • uygunluk kriterleri — hangi kullanıcıların bu teklife erişebileceğini belirleyen bir seçenek (ilk kez abone olanlar, başka bir abonelikten yükseltme yapanlar veya belirlenen geliştirici), 
  • ücretsiz denemeler ve tek ya da tekrar eden ödemeler dahil olmak üzere aşamalar (aşamaların kullanımı aşağıdaki ekran görüntüsünde gösterilmiştir) 
  • fiyat indirimi — sabit tutar, yüzde veya taban plan fiyatına bağlı mutlak indirim 

Her abonelik, sırayla birkaç teklif içerebilecek bir veya daha fazla temel plan içerebilir (yukarıdaki şemayı inceleyin). Bu nedenle, yukarıdaki örnek için üç temel plana sahip bir premium abonelik oluşturabilirsiniz — her dönem için bir tane ve yıllık temel plan için ücretsiz denemeli bir teklif.

Yeni Abonelik Satın Alma

Kodla ilgili bir diğer konu, Google Play Faturlandırma Kitaplığı 5.0’da SkuDetails sınıfı ve Sku içeren diğer tüm varlıklar veya yöntemler kullanımdan kaldırılmıştır. Bu yüzden artık bu amaç için ProductDetails kullanmayı düşünebilirsiniz. Ürün detayları, temel planlar ve teklifler de dahil olmak üzere abonelikle ilgili birçok bilgiyi içerir.

Önceden aşağıdaki gibi abonelik detayları isteği yapıyordunuz:

val params = SkuDetailsParams.newBuilder()
    .setType(BillingClient.SkuType.SUBS)
    .setSkusList(listOf("premium"))
    .build()

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

Artık şu şekilde yapmalısınız: 

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

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

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

Ve satın alma akışını başlatmak için aşağıdaki yapıları kullanıyordunuz:

val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(skuDetails)
    .build()

val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

Ama artık aşağıdaki gibi görünecek:

// Note that `subscriptionOfferDetails` can be null if it is an in-app product, not a subscription.
val offerToken = productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken ?: return

val productDetailsParamsList = listOf(
    BillingFlowParams.ProductDetailsParams.newBuilder()
        .setProductDetails(productDetails)
        .setOfferToken(offerToken)
        .build()
)

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

val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)  

Ayrıca Google Migration adımlarındaki geçiş örneklerine de göz atabilirsiniz. Şunu unutmayın ki bu örneklerde birkaç harf hatası bulunuyor ve bu hatalar burada düzeltiliyor.

Hadi gelin değişikliklere bir göz atalım. 

Daha önceden de bahsettiğim gibi abonelik detaylarını ve satın alma akışını sorgulamak için artık ProductDetails kullanabilirsiniz. Ayrıca her bir ProductDetails içinde birkaç teklif bulunabileceğinden dolayı faturalandırma akışı parametrelerine bir offerToken sağlamalısınız. Teklif detayları dizisinin (productDetails.subscriptionOfferDetails) her zaman temel plan detaylarını içerdiğini (herhangi bir temel plan varsa) unutmayın; bu sebeple aboneliğiniz yalnızca teklifleri olmayan bir temel plan içeriyor olsa bile satın alma için hala offerToken sahibi olacaklardır.

Yeni satın alma akışının önceki sürümde olduğu gibi SkuDetails yerine birden fazla ProductDetails kabul ettiğini siz de fark edebilirsiniz. Ancak birden fazla ProductDetails sağlarsanız akış hata verebilir. Resmi entegrasyon rehberi setProductDetails ve setOfferToken yöntemlerini, BillingFlowParams. Builder sınıfı üzerinde kullanırken yanlış bir örnek verir fakat bu amaçlar için mevcut yöntem yalnızca setProductDetailsParamsList’dir. Görünüşe göre Google, Faturalandırmanın aynı anda birden fazla farklı abonelik satın alımını destekleyeceği bir gelecek vizyonuyla son zamanlarda tek ürün ayrıntısından birden fazla ürün ayrıntısına geçmeye karar vermiş.

Geri kalan akış — yani satın alma işlemi — Google Play Faturalandırma Kitaplığı 4.0’daki ile aynı kalır.

Aboneliklerin Geriye Dönük Uyumluluğu

Şimdilik her şey yolunda görünüyor fakat eğer ya şimdi geçiş yapmak istemiyorsanız? Google bunu da düşündü.

Google Play Konsolu zaten yalnızca yeni abonelik modeliyle çalışıyor olsa da tüm eski abonelikler otomatik olarak yeni aboneliklere dönüştürülecek ve geriye dönük uyumlulukları da kaydediliyor. Yani, aboneliklerinizi Google Konsolunda yeni formatta gördüğünüz ancak uygulamada daha önce yaptığınız gibi yine de onlarla çalışabileceksiniz. 

Ayrıca, tüm eski aboneliklerin geçişten sonra salt okunur hale getirildiğini de göreceksiniz. Google, düzenlemenin söz konusu olduğu abonelikler için InAppProducts API desteğini devre dışı bırakacağı konusunda sizi uyarmakta.

Bazı ürün detaylarını görmek için bu API’yı arka planda kullanıyor olabilirsiniz, bu nedenle dikkatli olun — aboneliği düzenlenebilir hale getirdikten sonra, dönüştürülmüş abonelik bilgilerini almaya çalışırsanız bu API’dan hata (aşağıda gösterildiği gibi) alacaksınız. Aynı durum 11 Mayıs’tan sonra oluşturulan tüm yeni abonelikler için de geçerli olacaktır.

HTTP code - 422
Non-existent in-app product: com.qonversion.sample\/ProductId{productId=article_test_trial}

Bu nedenle, InAppProducts API kullanıyorsanız yeni abonelik oluşturmadan veya eski abonelikleri düzenlemeden önce  yükseltmeyi düşünün.

Google Play Console’daki yeni abonelikler arayüzünde gezinirken temel planların ve abonelik tekliflerinin yanında “Geriye dönük uyumlu” gibi etiketler bulacaksınız. Yani, bu abonelikleri kullanımdan kaldırılmış SkuDetails ile satın alırsanız (Tıpkı Google Play Faturalandırma Kitaplığı 4.0’da olduğu gibi) kelimenin tam anlamıyla bu uyumlu temel planları/teklifleri satın alacaksınız. Eğer hiçbir uyumluluk teklifine sahip olmayan bir uyumlu temel plan varsa o halde o temel plan satın alınacaktır. Hem uyumlu temel plan hem de teklif mevcutsa, teklif mevcut kullanıcı için uygunsa, satın alınacaktır, aksi takdirde — temel plan satın alınacaktır. İsterseniz geriye dönük uyumlu olarak başka bir temel plan/teklif seçebilirsiniz.

Not — bu Geriye dönük uyumluluk Google Play Faturalandırma Kitaplığı ile alakalıdır ve ayrıca InAppProducts API ile ilgili değildir. Önceden de belirtildiği üzere örneğin bir abonelik için birden fazla temel plan veya teklif gibi yeni özellikler kullanmaya başlarsanız ya da yalnızca salt okunurdan düzenlenebilir hale dönüştürürseniz, bu abonelik yine de uygulama için Geriye dönük olarak uyumlu olabilir, ancak API için uyumlu olmayabilir.

Diğer Güncellemeler

Google Play Faturalandırma Kitaplığı 5.0’da özet olarak bahsetmeye değer birkaç küçük güncelleme bulunuyor.

  • Google Play Faturlandırma Kitaplığı 4.0’da kullanımdan kaldırılan queryPurchases yöntemi de kaldırıldı
  • Artık senkronize istekler yok, sadece queryPurchasesAsync
  • launchPriceChangeFlow kullanımdan kaldırıldı — yeni tavsiye edilen fiyat değişimi akışı müşterinin Google Play abonelikleri sayfası aracılığıyla onayını gerektiriyor ve bu yüzden de BillingClient yöntemini kullanmak yerine gezinti için Derin Link (Deep Link) kullanmanız gerekiyor.
  • Tüketici Hakları Yönetmeliği uyarınca AB kullanıcıları için kişiselleştirilmiş bir fiyat sunmak adına setIsOfferPersonalized yöntemi eklendi. Bu seçenek, Google Faturalandırma satın alma ekranının altına bir satır ekleyerek fiyatın kişiselleştirildiğini belirtir.

Yeni Abonelik Modeli ve Qonversion

Google Play Faturalandırma Kitaplığı 5.0 desteği üzerinde çalışırken, uygulama içi satın alımlarınızda Qonversion SDK’yı kullanabilirsiniz. Artık Google Play Faturalandırma Kitaplığı 4.0’ı kullanıyoruz, bu da yalnızca geriye dönük uyumlu temel planlar ve tekliflerle abonelikleri yönetebileceğimiz anlamına geliyor. Önceki abonelik modelinde bulunan bir fiyat, ödemesiz dönem, deneme süresi vb. özellikleri hala düzenleyebilir ve yeni abonelikler oluşturabilirsiniz. Endişelenmeyin, geriye dönük uyumlu en az bir temel planınız ve gerekirse geriye dönük uyumlu bir teklifiniz olacak. Ve yine de, temel plan veya teklif tanımlayıcıları değil, Ürün Merkezimizdeki ürünleri yapılandırmak için tam bir abonelik tanımlayıcısına ihtiyacımız bulunuyor.

Eğer herhangi bir sorunuz varsa, lütfen bize bildirin. Size yardımcı olmaktan mutluluk duyarız. 

Faydalı Linkler