Mayıs 2022 abonelik değişiklikleri kılavuzu

Google Play'in faturalandırma sistemi, Android uygulamanızda dijital ürünler ve içerikler satmanıza olanak tanıyan bir hizmettir. Mayıs 2022'de yayınlanan sürümle birlikte abonelik ürünlerinin tanımlanma şeklini değiştirdik. Bu değişiklik, ürünlerin uygulama içinde satılma ve arka uçta yönetilme şeklini etkiliyor. Google Play Faturalandırma ile ilk kez entegrasyon yapıyorsanız Hazırlık başlıklı makaleyi okuyarak entegrasyonunuza başlayabilirsiniz.

Mayıs 2022'den önce Google Play Faturalandırma ile abonelik satıyorsanız mevcut aboneliklerinizi korurken yeni özellikleri nasıl kullanacağınızı anlamanız önemlidir.

Öncelikle, mevcut aboneliklerinizin, uygulamalarınızın ve arka uç entegrasyonlarınızın Mayıs 2022 sürümünden önceki gibi çalışmaya devam ettiğini bilmeniz gerekir. Hemen herhangi bir değişiklik yapmanız gerekmez. Bu yeni özellikleri zaman içinde kullanmaya başlayabilirsiniz. Google Play Faturalandırma Kitaplığı'nın her ana sürümü, yayınlandıktan sonraki iki yıl boyunca desteklenir. Google Play Developer API ile mevcut entegrasyonlar eskisi gibi çalışmaya devam eder.

Mayıs 2022 güncellemelerine genel bir bakış:

  • Yeni Google Play Console'da abonelikler, temel planlar ve teklifler oluşturup yönetebilirsiniz. Buna hem yeni hem de taşınan abonelikler dahildir.
  • Play Developer API, API biçiminde yeni Google Play Console kullanıcı arayüzü işlevlerini destekleyecek güncellemeler içerir. Özellikle, Subscription Purchases API'nin yeni bir sürümü bulunmaktadır. Abonelik durumunu kontrol etmek ve abonelik satın alma işlemlerini yönetmek için bu API'yi kullanın.
  • Yeni Play Faturalandırma Kitaplığı 5. sürümü, uygulamanızın tüm yeni abonelik özelliklerinden yararlanmasını sağlar. Sürüm 5'e yükseltmeye hazır olduğunuzda taşıma kılavuzundaki yönergeleri uygulayın.

Abonelik yapılandırması

Abonelikleri Google Play Console üzerinden yönetme

Mayıs 2022 itibarıyla Google Play Console'da bazı farklılıklar göreceksiniz.

Artık tek bir abonelikte birden fazla temel plan ve fırsat olabilir. Daha önce oluşturulan abonelik SKU'ları artık Play Console'da bu yeni abonelik, temel plan ve teklif nesneleri olarak gösteriliyor. Henüz yapmadıysanız yeni nesnelerin işlevleri ve yapılandırmaları da dahil olmak üzere açıklamaları için Play Console'da aboneliklerle ilgili son değişiklikler başlıklı makaleye göz atın. Mevcut tüm abonelik ürünleriniz, Google Play Console'da bu yeni biçimde gösterilir. Artık her SKU, tek bir temel plan ve varsa geriye dönük uyumlu teklif içeren bir abonelik nesnesiyle temsil ediliyor.

Eski entegrasyonlar her aboneliğin SkuDetails nesnesiyle temsil edilen tek bir fırsat içermesini beklediğinden, her abonelikte geriye dönük uyumlu tek bir temel plan veya fırsat olabilir. Geriye dönük uyumlu temel plan veya teklif, artık kullanımdan kaldırılan querySkuDetailsAsync() yöntemini kullanan uygulamalar için bir SKU'nun parçası olarak döndürülür. Geriye dönük uyumlu teklifleri yapılandırma ve yönetme hakkında daha fazla bilgi için Abonelikleri anlama başlıklı makaleyi inceleyin. Uygulamanız yalnızca queryProductDetailsAsync() kullanmaya başladıktan ve uygulamanızın eski sürümleriyle satın alma işlemleri yapılmamaya başladıktan sonra geriye dönük uyumlu teklif kullanmanız gerekmez.

Abonelikleri Subscriptions Publishing API ile yönetme

Play Developer API'de abonelik satın alma işlemleri için yeni işlevler yer alıyor. SKU yönetimi için inappproducts API, tek seferlik satın alma ürünleri ve aboneliklerin işlenmesi de dahil olmak üzere eskisi gibi çalışmaya devam eder. Bu nedenle, entegrasyonunuzu sürdürmek için hemen herhangi bir değişiklik yapmanız gerekmez.

Ancak Google Play Console'un yalnızca yeni abonelik öğelerini kullandığını unutmayın. Aboneliklerinizi Console'da düzenlemeye başladığınızda artık abonelikler için inappproducts API'si kullanılamaz.

Mayıs 2022'den önce Publishing API'yi kullandıysanız sorun yaşamamak için mevcut abonelikler artık Google Play Console'da salt okunur olarak gösterilir. Değişiklik yapmaya çalışırsanız bu sınırlamayı açıklayan bir uyarı alabilirsiniz. Console'da abonelikleri daha fazla düzenlemeden önce, arka uç entegrasyonunuzu yeni Subscription Publishing uç noktalarını kullanacak şekilde güncellemeniz gerekir. Yeni monetization.subscriptions, monetization.subscriptions.baseplans ve monetization.subscriptions.offers uç noktaları, mevcut tüm temel planları ve teklifleri yönetmenize olanak tanır. Farklı alanların InAppProduct varlığından monetization.subscriptions altındaki yeni nesnelere nasıl eşlendiğini aşağıdaki tabloda görebilirsiniz:

InAppProduct Abonelik
packageName packageName
sku productId
status basePlans[0].state
prices basePlans[0].regionalConfigs.price
listings listelemeler
defaultPrice Eşdeğerlik yok
subscriptionPeriod basePlans[0].autoRenewingBasePlanType.billingPeriodDuration
trialPeriod basePlans[0].offers[0].phases[0].regionalConfigs[0].free
gracePeriod basePlans[0].autoRenewingBasePlanType.gracePeriodDuration
subscriptionTaxesAndComplianceSettings taxAndComplianceSettings

Bu zorunlu API güncellemesi yalnızca Publishing API (SKU yönetimi) için geçerlidir.

Play Faturalandırma Kitaplığı değişiklikleri

Play Faturalandırma Kitaplığı, kademeli geçişi desteklemek için önceki sürümlerde bulunan tüm yöntemleri ve nesneleri içerir. SkuDetails gibi nesneler ve querySkuDetailsAsync() gibi işlevler mevcut abonelik kodunu hemen güncellemeniz gerekmeden yeni işlevleri kullanmak için yükseltme yapabilmeniz amacıyla hâlâ mevcuttur. Ayrıca, geriye dönük uyumlu olarak işaretleyerek hangi tekliflerin kullanılabileceğini de kontrol edebilirsiniz.

Play Billing Library 5, eski yöntemleri korumanın yanı sıra yeni öğeleri ve işlevleri işlemek için yeni bir ProductDetails nesnesi ve karşılık gelen bir queryProductDetailsAsync() yöntemi içerir. Mevcut uygulama içi ürünler (tek seferlik satın almalar ve tüketilebilir ürünler) artık ProductDetails tarafından da destekleniyor.

Bir abonelik için ProductDetails.getSubscriptionOfferDetails() kullanıcının satın almaya uygun olduğu tüm temel planların ve tekliflerin listesini döndürür. Bu sayede, geriye dönük uyumluluktan bağımsız olarak kullanıcı için uygun olan tüm temel planlara ve fırsatlara erişebilirsiniz. Abonelik dışı ürünler için getSubscriptionOfferDetails() iade null. Tek seferlik satın alma işlemlerinde getOneTimePurchaseOfferDetails() kullanabilirsiniz.

Play Faturalandırma Kitaplığı 5, satın alma sürecini başlatmak için hem yeni hem de eski yöntemler içerir. BillingClient.launchBillingFlow() işlevine iletilen BillingFlowParams nesnesi bir SkuDetails nesnesi kullanılarak yapılandırılmışsa sistem, teklif bilgilerini SKU'ya karşılık gelen geriye dönük uyumlu temel plandan veya tekliften çıkarır. BillingFlowParams öğesine iletilen BillingClient.launchBillingFlow() nesnesi, ProductDetails ve satın alınan teklifin teklif jetonunu temsil eden String dahil olmak üzere ProductDetailsParams nesneleri kullanılarak yapılandırılmışsa sistem, kullanıcının satın aldığı ürünü belirlemek için bu bilgileri kullanır.

queryPurchasesAsync(), kullanıcının sahip olduğu tüm satın alma işlemlerini döndürür. İstenen ürün türünü belirtmek için eski sürümlerde olduğu gibi bir BillingClient.SkuType değeri veya yeni abonelik öğelerini temsil eden bir BillingClient.ProductType değeri içeren bir QueryPurchasesParams nesnesi iletebilirsiniz.

Bu yeni abonelik özelliklerinden yararlanmaya başlayabilmek için uygulamalarınızı kısa süre içinde kitaplığın 5. sürümüne güncellemenizi öneririz.

Abonelik durumunu yönetme

Bu bölümde, sürüm 5'e geçiş için uygulanması gereken bir Google Play Faturalandırma sistemi entegrasyonunun arka uç bileşenlerinde yapılan temel değişiklikler açıklanmaktadır.

Gerçek Zamanlı Geliştirici Bildirimleri

Yakında SubscriptionNotification nesnesi artık subscriptionId içermeyecek. Abonelik ürününü tanımlamak için bu alanı kullanıyorsanız bildirimi aldıktan sonra purchases.subscriptionv2:get kullanarak bu bilgileri abonelik durumundan alacak şekilde güncelleme yapmanız gerekir. Satın alma durumu kapsamında döndürülen lineItems koleksiyonundaki her SubscriptionPurchaseLineItem öğesi, ilgili productId değerini içerir.

Subscriptions Purchases API: abonelik durumunu alma

Abonelik Satın Alma API'sinin önceki sürümlerinde, purchases.subscriptions:get kullanarak abonelik durumunu sorgulayabiliyordunuz. Bu uç nokta değişmedi ve geriye dönük uyumlu abonelik satın alma işlemleri için çalışmaya devam ediyor. Bu uç nokta, Mayıs 2022'de kullanıma sunulan yeni işlevleri desteklemez.

Abonelik Satın Alma API'sinin yeni sürümünde, abonelik satın alma durumunu almak için purchases.subscriptionsv2:get kullanın. Bu API, taşınan abonelikler, yeni abonelikler (hem ön ödemeli hem de otomatik yenilenen) ve her türden satın alma işlemiyle uyumludur. Bildirim alırken abonelik durumunu kontrol etmek için bu uç noktayı kullanabilirsiniz. Döndürülen nesne (SubscriptionPurchaseV2) yeni alanlar içeriyor ancak mevcut aboneliklerin desteklenmeye devam etmesi için gereken eski verileri de içeriyor.

Ön ödemeli planlar için SubscriptionPurchaseV2 alanları

Otomatik olarak yenilenmek yerine kullanıcı tarafından uzatılan ön ödemeli planları desteklemek için yeni alanlar eklendi. Aşağıdaki istisnalar dışında, tüm alanlar otomatik yenilenen aboneliklerde olduğu gibi ön ödemeli planlar için de geçerlidir:

  • [Yeni alan] lineItems[0].prepaid_plan.allowExtendAfterTime: Kullanıcının, ön ödemeli planını uzatmak için başka bir yükleme satın almasına ne zaman izin verileceğini belirtir. Kullanıcıların aynı anda yalnızca bir kullanılmamış yüklemesi olabilir.
  • [Yeni alan] SubscriptionState: Abonelik nesnesinin durumunu belirtir. Ön ödemeli planlarda bu değer her zaman ACTIVE, PENDING veya CANCELED olur.
  • lineItems[0].expiryTime: Bu alan, ön ödemeli planlarda her zaman bulunur.
  • paused_state_context: Bu alan, ön ödemeli planlar duraklatılamadığından hiçbir zaman mevcut değildir.
  • lineItems[0].auto_renewing_plan: Ön ödemeli planlarda mevcut değildir.
  • canceled_state_context: Bu alan yalnızca aboneliği etkin bir şekilde iptal eden kullanıcılar için geçerli olduğundan ön ödemeli planlarda mevcut değildir.
  • lineItems[0].productId: Bu alan, önceki sürümlerdeki subscriptionId öğesinin yerini alır.

Yinelenen abonelikler için SubscriptionPurchaseV2 alanları

purchases.subscriptionv2, yeni abonelik nesneleri hakkında daha fazla ayrıntı sağlayan yeni alanlar içerir. Aşağıdaki tabloda, eski abonelik uç noktasındaki alanların purchases.subscriptionv2'daki karşılık gelen alanlarla nasıl eşlendiği gösterilmektedir.

SubscriptionPurchase SubscriptionPurchaseV2
countryCode regionCode
orderId latestOrderId
(eşdeğer alan yok) lineItems.offerPhase (mevcut aşamayı tanımlar: ücretsiz deneme, tanıtım fiyatı, orantılı fiyat, taban fiyat)
(eşdeğer alan yok) lineItems (list of SubscriptionPurchaseLineItem) that represents the products acquired with the purchase
(eşdeğer alan yok) lineItems.offerDetails.basePlanId
(eşdeğer alan yok) lineItems.offerDetails.offerId
(eşdeğer alan yok) lineItems.offerDetails.offerTags
startTimeMillis startTime
expiryTimeMillis lineItems.expiryTime (Satın alma işleminde edinilen her aboneliğin kendi expiryTime vardır)
(eşdeğer alan yok) subscriptionState ( aboneliğin durumunu gösterir)
(eşdeğer alan yok) pausedStateContext (yalnızca abonelik durumu SUBSCRIPTION_STATE_PAUSED ise gösterilir)
autoResumeTimeMillis pausedStateContext.autoResumeTime
(eşdeğer alan yok) canceledStateContext (yalnızca abonelik durumu SUBSCRIPTION_STATE_CANCELED ise gösterilir)
(eşdeğer alan yok) testPurchase (yalnızca lisanslı test kullanıcısı satın alma işlemlerinde bulunur)
autoRenewing lineItems.autoRenewingPlan.autoRenewEnabled
priceCurrenceCode, priceAmountMicros lineItems.autoRenewingPlan.recurringPrice
introductoryPriceInfo lineItems.offerPhase.introductoryPrice
Bu bilgilere, satın alınan her abonelik için offer bölümünden de ulaşabilirsiniz.
developerPayload (Eşdeğer alan yok) Geliştirici yükü desteği sonlandırıldı
paymentState (eşdeğer alan yok)
Ödeme durumunu subscriptionState öğesinden çıkarabilirsiniz:
  • Ödeme beklemede:
    • SUBSCRIPTION_STATE_PENDING (bekleyen işlemli yeni satın almalar)
    • SUBSCRIPTION_STATE_IN_GRACE_PERIOD
    • SUBSCRIPTION_STATE_ON_HOLD
  • Ödeme alındı:
    • SUBSCRIPTION_STATE_ACTIVE
  • Ücretsiz deneme:
    • lineItems.offerPhase.freeTrial
  • Yükseltme / düşürme işleminin ertelenmesi:
    • SUBSCRIPTION_STATE_PENDING
cancelReason, userCancellationTimeMillis, cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (değişiklik yok)
purchaseType Test: testPurchase
aracılığıyla Promosyon: signupPromotion
priceChange lineItems.autoRenewingPlan.priceChangeDetails
profileName, emailAddress, givenName, familyName, profileId subscribeWithGoogleInfo
acknowledgementState acknowledgementState (no change)
promotionType, promotionCode signupPromotion
externalAccountId, obfuscatedExternalAccountId, obfuscatedExteranlProfileId externalAccountIdentifiers

Diğer abonelik yönetimi işlevleri

purchases.subscriptions:get, purchases.subscriptionsv2:get sürümüne yükseltilirken geliştirici aboneliği yönetim işlevlerinin geri kalanı purchases.subscriptions uç noktasında şimdilik değişmeden kalacak. Bu nedenle, purchases.subscriptions:acknowledge, purchases.subscriptions:cancel, purchases.subscriptions:defer, purchases.subscriptions:refund ve purchases.subscriptions:revoke işlevlerini daha önce olduğu gibi kullanmaya devam edebilirsiniz.

Pricing API

Bölgesel fiyatları Play Console'da olduğu gibi hesaplamak için monetization.convertRegionPrices uç noktasını kullanın. Bu yöntem, Play'in desteklediği herhangi bir para biriminde tek bir fiyatı kabul eder ve Google Play'in satın alma işlemlerini desteklediği tüm bölgeler için dönüştürülmüş fiyatları (geçerli olduğu durumlarda varsayılan vergi oranı dahil) döndürür.