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

Google Play'in faturalandırma sistemi, Android uygulamanızda dijital ürünler ve içerik satmanıza olanak tanıyan bir hizmettir. Mayıs 2022 sürümüyle birlikte abonelik ürünlerinin nasıl tanımlandığını değiştirdik. Bu değişiklik, abonelik ürünlerinin uygulama içinde satılmasını ve arka uçta nasıl yönetileceğini etkilemektedir. Google Play Faturalandırma ile ilk kez entegrasyon yapıyorsanız Hazırlanıyor bölümünü okuyarak entegrasyonunuza başlayabilirsiniz.

Mayıs 2022'den önce Google Play Faturalandırma ile abonelik satıyorsanız mevcut aboneliklerinizi sürdürürken yeni özelliklerden nasıl yararlanacağınızı anlamanız önemlidir.

Bilmeniz gereken ilk şey, mevcut tüm aboneliklerinizin, uygulamalarınızın ve arka uç entegrasyonlarınızın Mayıs 2022 sürümünden önceki gibi çalıştığıdır. 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ü, kullanıma sunulmasından itibaren iki yıl boyunca desteklenir. Google Play Geliştirici API'si ile mevcut entegrasyonlar eskisi gibi çalışmaya devam edecektir.

Mayıs 2022 tarihli güncellemelerin özetini aşağıda bulabilirsiniz:

  • Yeni Google Play Console abonelikler, temel planlar ve fırsatlar oluşturup yönetmenize olanak tanır. Buna hem yeni hem de taşınmış abonelikler dahildir.
  • Play Developer API, yeni Google Play Console kullanıcı arayüzü işlevlerini API biçiminde destekleyecek güncellemeler içerir. Subscription Purchases API'sinin yeni bir sürümü kullanıma sunuldu. 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ına olanak tanır. Sürüm 5'e yükseltmeye hazır olduğunuzda taşıma kılavuzundaki yönergeleri uygulayın.

Abonelik yapılandırması

Google Play Console aracılığıyla abonelikleri yönetme

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

Artık tek bir abonelikte birden fazla temel plan ve teklif olabilir. Önceden oluşturulmuş abonelik SKU'ları artık Play Console'da bu yeni abonelik, temel plan ve teklif nesneleri olarak görünür. Henüz yapmadıysanız yeni nesnelerin işlevleri ve yapılandırmalarıyla ilgili açıklamaları için Play Console'da aboneliklerle ilgili son değişiklikler bölümüne bakın. Mevcut abonelik ürünlerinizin tümü Google Play Console'da bu yeni biçimde görünür. Her SKU artık tek bir temel plan ve varsa geriye dönük uyumlu teklif içeren bir abonelik nesnesiyle temsil ediliyor.

Eski entegrasyonlar her aboneliğin bir SkuDetails nesnesiyle temsil edilen tek bir fırsat içermesini beklediğinden, her aboneliğin geriye dönük uyumlu tek bir temel planı veya teklifi olabilir. Geriye dönük uyumlu temel plan veya teklif, şu anda 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 bölümüne bakın. Uygulamanız yalnızca queryProductDetailsAsync() kullanmaya başladıktan ve hâlâ satın alma işlemi gerçekleştiren eski sürüm kalmadığında geriye dönük uyumlu fırsatlar kullanmanız gerekmez.

Subscriptions Publishing API aracılığıyla abonelikleri yönetme

Play Developer API, abonelik satın alma işlemleri için yeni işlevler içerir. SKU yönetimi için inappproducts API, tek seferlik satın alınan ürünleri ve abonelikleri yönetme de dahil olmak üzere eskisi gibi çalışmaya devam ediyor. Bu sayede entegrasyonunuzu sürdürmek için hemen herhangi bir değişiklik yapmanız gerekmiyor.

Bununla birlikte, Google Play Console'un yalnızca yeni abonelik varlıklarını kullandığını unutmayın. Aboneliklerinizi Console'da düzenlemeye başladığınızda inappproducts API artık abonelikler için kullanılamaz.

Publishing API'yi Mayıs 2022'den önce kullandıysanız herhangi bir sorun yaşamamanız için mevcut abonelikler artık Google Play Console'da salt okunur olarak görünür. 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 Abonelik Yayınlama 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 nesnelerle nasıl eşlendiğini aşağıdaki tabloda görebilirsiniz:

Uygulama İçiÜrün Abonelik
packageName packageName
sku productId
status basePlans[0].state
prices basePlans[0].regionalConfigs.price
listings giriş
defaultPrice Denklik yok
subscriptionPeriod basePlans[0].autoRenewingBasePlanType.billingPeriodDuration
trialPeriod basePlans[0].offers[0].phases[0].regionalConfigs[0].ücretsiz
gracePeriod basePlans[0].autoRenewingBasePlanType.gracePeriodDuration
subscriptionTaxesAndComplianceSettings vergi veUyumlulukAyarları

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

Play Faturalandırma Kitaplığı'ndaki değişiklikler

Kademeli geçişi desteklemek için Play Faturalandırma Kitaplığı, önceki sürümlerde kullanılabilen tüm yöntemleri ve nesneleri içerir. querySkuDetailsAsync() gibi SkuDetails nesneleri ve işlevleri hâlâ mevcuttur. Dolayısıyla, mevcut abonelik kodunu hemen güncellemenize gerek kalmadan yeni işlevleri kullanmak için yükseltme yapabilirsiniz. Ayrıca bu yöntemler aracılığıyla hangi tekliflerin kullanılabilir olduğunu kontrol etmek için bunları geriye dönük uyumlu olarak işaretleyebilirsiniz.

Play Faturalandırma Kitaplığı 5, eski yöntemlerin yanı sıra artık yeni bir ProductDetails nesnesi ve yeni varlıklar ile işlevleri işlemek için buna karşılık gelen bir queryProductDetailsAsync() yöntemi içeriyor. Mevcut uygulama içi ürünler (tek seferlik satın alımlar ve tüketilebilir ürünler) artık ProductDetails tarafından da desteklenmektedir.

ProductDetails.getSubscriptionOfferDetails(), abonelik söz konusu olduğunda tüm temel planların listesini ve kullanıcının satın almaya uygun olduğu teklifleri döndürür. Diğer bir deyişle, geriye dönük uyumluluktan bağımsız olarak, kullanıcı için uygun olan tüm temel planlara ve tekliflere erişebilirsiniz. getSubscriptionOfferDetails(), abonelik olmayan ürünler için null değerini döndürür. Tek seferlik satın alımlar için getOneTimePurchaseOfferDetails() kullanabilirsiniz.

Play Faturalandırma Kitaplığı 5 ayrıca, satın alma akışını başlatmak için hem yeni hem de eski yöntemleri içerir. BillingClient.launchBillingFlow() öğesine iletilen BillingFlowParams nesnesi bir SkuDetails nesnesi kullanılarak yapılandırılırsa sistem, teklif bilgilerini geriye dönük uyumlu temel plandan veya SKU'ya karşılık gelen tekliften satmak için ayıklar. BillingClient.launchBillingFlow() öğesine iletilen BillingFlowParams nesnesi, ProductDetailsParams nesneleri (ProductDetails ve satın alınan teklif için belirli teklif jetonunu temsil eden bir String dahil) kullanılarak yapılandırılırsa sistem, bu bilgiyi kullanıcının edindiği ürünü tanımlamak için 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 varlıklarını temsil eden BillingClient.ProductType değeri içeren bir QueryPurchasesParams nesnesi aktarabilirsiniz.

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

Abonelik durumunu yönetme

Bu bölümde, sürüm 5'e taşıma için uygulanması gereken 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 bir subscriptionId içermeyecek. Abonelik ürününü tanımlamak için bu alandan yararlanıyorsanız bildirimi aldıktan sonra purchases.subscriptionv2:get aracını kullanarak abonelik durumundan bu bilgileri almak için güncelleme yapmanız gerekir. lineItems koleksiyonundaki satın alma durumunun bir parçası olarak döndürülen her bir SubscriptionPurchaseLineItem öğesi, karşılık gelen productId öğesini içerir.

Subscriptions Purchases API'si: abonelik durumu alma

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

Subscriptions Purchases API'nin yeni sürümünde abonelik satın alma durumunu öğrenmek için purchases.subscriptionsv2:get değerini kullanın. Bu API taşınan abonelikler, yeni abonelikler (hem ön ödemeli hem de otomatik yenilenen) ve her tür satın alma işlemiyle uyumludur. Bildirim alırken abonelik durumunu kontrol etmek için bu uç noktayı kullanabilirsiniz. Döndürülen SubscriptionPurchaseV2 nesnesi yeni alanlar içerir ancak mevcut abonelikleri desteklemeye devam etmek için gereken eski verileri yine de içerir.

Ön ödemeli planlar için SubscriptionPurchaseV2 alanları

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

  • [New field] lineItems[0].prepaid_plan.allowExtendAfterTime: Kullanıcıya aynı anda yalnızca bir kez kullanılmayan para ekleme iznine sahip olduğundan, kullanıcının ön ödemeli planını uzatmak için başka bir para ekleme satın almasına ne zaman izin verileceğini belirtir.
  • [Yeni alan] SubscriptionState: Abonelik nesnesinin durumunu belirtir. Ön ödemeli planlar için bu değer her zaman ACTIVE, PENDING veya CANCELED olur.
  • lineItems[0].expiryTime: Bu alan, ön ödemeli planlar için her zaman mevcuttur.
  • paused_state_context: Ön ödemeli planlar duraklatılamadığı için bu alan hiçbir zaman mevcut değildir.
  • lineItems[0].auto_renewing_plan: Ön ödemeli planlar için mevcut değildir.
  • canceled_state_context: Bu alan yalnızca bir aboneliği etkin olarak 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 içindeki karşılık gelen alanlarla nasıl eşlendiği gösterilmektedir.

AbonelikSatın Alma AbonelikSatın Alma V2
countryCode regionCode
orderId latestOrderId
(eşdeğer alan yok) Satın alma işlemiyle edinilen ürünleri temsil eden lineItems (SubscriptionPurchaseLineItem listesi)
(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 belirtir)
(eşdeğer alan yok) pausedStateContext (yalnızca abonelik durumu SUBSCRIPTION_STATE_PAUSED olduğunda bulunur)
autoResumeTimeMillis pausedStateContext.autoResumeTime
(eşdeğer alan yok) canceledStateContext (yalnızca abonelik durumu SUBSCRIPTION_STATE_CANCELED olduğunda bulunur)
(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, introductoryPriceInfo (eşdeğer alan yok)
Bu bilgiler, satın alınan her abonelik için basePlan/offer adresinde bulunabilir.
geliştirici Yükü (eşdeğer alan yok) geliştirici yükü kullanımdan kaldırıldı
ödeme durumu (eşdeğer alan yok)
Ödeme durumunu subscriptionState kaynağından tahmin edebilirsiniz:
  • Ödeme beklemede:
    • SUBSCRIPTION_STATE_PENDING (beklemedeki işlemleri olan yeni satın alma işlemleri)
    • SUBSCRIPTION_STATE_IN_GRACE_PERIOD
    • SUBSCRIPTION_STATE_ON_HOLD
  • Ödeme alındı:
    • SUBSCRIPTION_STATE_ACTIVE
  • Ücretsiz deneme:
    • (eşdeğer alan yok)
  • Ertelenen yeni / eski sürüme geçirme:
    • SUBSCRIPTION_STATE_PENDING
cancelReason, userCancellationTimeMillis, cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (değişiklik yok)
purchaseType Test: testPurchase aracılığıyla
Promosyon: (eşdeğer alan yoktur); yakında kullanıma sunulacaktır
priceChange lineItems.autoRenewingPlan.priceChangeDetails
profileName, emailAddress, givenName, familyName, profileId subscribeWithGoogleInfo
acknowledgementState acknowledgementState (no change)
promotionType, promotionCode (eşdeğer alan yok); yakında kullanıma sunulacak
externalAccountId, obfuscatedExternalAccountId, obfuscatedExteranlProfileId externalAccountIdentifiers

Diğer abonelik yönetimi işlevleri

purchases.subscriptions:get purchases.subscriptionsv2:get'e yükseltilmiş olsa da diğer geliştirici abonelik yönetimi işlevleri şu an için purchases.subscriptions uç noktasında değişmiyor. purchases.subscriptions:acknowledge, purchases.subscriptions:cancel, purchases.subscriptions:defer, purchases.subscriptions:refund ve purchases.subscriptions:revoke uç noktasında kullanmaya devam edebilirsiniz.

Fiyatlandırma API'si

Bölgesel fiyatları Play Console'da yaptığınız gibi hesaplamak için monetization.convertRegionPrices uç noktasını kullanın. Bu yöntem, Play tarafından desteklenen herhangi bir para birimi üzerinden 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ülen fiyatları (geçerli olduğunda varsayılan vergi oranı dahil) döndürür.