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

Google Play'in faturalandırma sistemi, Android uygulamanızda dijital ürün ve içerik satabilmenizi sağlayan bir hizmettir. Mayıs 2022 sürümünde, abonelik ürünlerinin tanımlanma şeklini değiştirdik. Bu değişiklik, abonelik ürünlerinin uygulama içinde nasıl satıldığını ve arka uçta nasıl yönetildiğini etkiler. Google Play Faturalandırma ile ilk kez entegrasyon yapıyorsanız Hazırlanıyoruz bölümünü 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ı öğrenmeniz ö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 belirtmek isteriz. Hemen 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 sunulduktan 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 bakış:

  • Yeni Google Play Console, abonelik, temel plan ve fırsat oluşturmanıza ve yönetmenize olanak tanır. 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 destekleyen güncellemeler içerir. Özellikle, Subscription Purchases API'nin 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. 5. sürüme geçmeye hazır olduğunuzda taşıma kılavuzundaki talimatları uygulayın.

Abonelik yapılandırması

Abonelikleri Google Play Console üzerinden 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 bulunabilir. Daha önce oluşturulan 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ı da dahil olmak üzere açıklamaları için Play Console'da aboneliklerle ilgili son değişiklikler başlıklı makaleyi inceleyin. Mevcut tüm abonelik ürünleriniz 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 fırsat içeren bir abonelik nesnesi ile temsil edilir.

Eski entegrasyonlar, her abonelikte SkuDetails nesnesi ile temsil edilen tek bir fırsat olmasını beklediğinden, her abonelikte geriye dönük uyumlu tek bir temel plan veya fırsat bulunabilir. 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()'i kullandığında ve uygulamanızın satın alma işlemi yapan eski sürümleri olmadığında geriye dönük uyumlu teklif kullanmanıza gerek kalmaz.

Abonelikleri Subscriptions Publishing API üzerinden 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'si, tek seferlik satın alınan ürünler ve aboneliklerle ilgili işlemler 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. Console'da aboneliklerinizi düzenlemeye başladığınızda inappproducts API artık abonelikler için kullanılamaz.

Yayınlama API'sini Mayıs 2022'den önce kullandıysanız herhangi bir sorun yaşamamak 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 fırsatları yönetmenize olanak tanır. Aşağıdaki tabloda, farklı alanların InAppProduct öğesinden monetization.subscriptions altındaki yeni nesnelerle nasıl eşleştiğini görebilirsiniz:

InAppProduct Abonelik
packageName packageName
sku productId
status basePlans[0].state
prices basePlans[0].regionalConfigs.price
listings girişler
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ığı'ndaki değişiklikler

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

Play Billing Library 5, eski yöntemlerin yanı sıra yeni varlıkları ve işlevleri yönetmek için yeni bir ProductDetails nesnesi ve ilgili bir queryProductDetailsAsync() yöntemi içerir. Mevcut uygulama içi ürünler (tek seferlik satın alma işlemleri ve tüketim ürünleri) artık ProductDetails tarafından da destekleniyor.

ProductDetails.getSubscriptionOfferDetails(), abonelik için kullanıcının satın almaya uygun olduğu tüm temel planların ve fırsatların listesini döndürür. Bu, geriye dönük uyumluluktan bağımsız olarak kullanıcı için uygun olan tüm temel planlara ve fırsatlara erişebileceğiniz anlamına gelir. getSubscriptionOfferDetails(), abonelik dışı ürünler için null değerini döndürür. Tek seferlik satın alma işlemleri için getOneTimePurchaseOfferDetails()'ü kullanabilirsiniz.

Play Billing Library 5, satın alma akışını başlatmak için hem yeni hem de eski yöntemleri de içerir. BillingClient.launchBillingFlow() parametresine iletilen BillingFlowParams nesnesi bir SkuDetails nesnesi kullanılarak yapılandırılmışsa sistem, SKU'ya karşılık gelen geriye dönük uyumlu temel plandan veya tekliften satılık teklif bilgilerini çıkarır. BillingClient.launchBillingFlow() nesnesine iletilen BillingFlowParams nesnesi, ProductDetails ve satın alınan teklifin belirli teklif jetonunu temsil eden bir String içeren ProductDetailsParams nesneleri kullanılarak yapılandırılırsa sistem, kullanıcı tarafından edinilen ürünü tanımlamak için bu bilgileri kullanır.

queryPurchasesAsync(), kullanıcıya ait 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 gönderebilirsiniz.

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

Abonelik durumunu yönetme

Bu bölümde, Google Play faturalandırma sistemi entegrasyonunun arka uç bileşenlerinde 5. sürüme geçiş için uygulanması gereken temel değişiklikler açıklanmaktadır.

Gerçek Zamanlı Geliştirici Bildirimleri

Yakında SubscriptionNotification nesnesi 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 bilgiyi abonelik durumundan elde edecek şekilde güncellemelisiniz. 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

Subscriptions Purchases API'nin önceki sürümlerinde purchases.subscriptions:get kullanarak abonelik durumunu sorgulayabiliyordunuz. Bu uç nokta değişmeden kalır ve geriye dönük uyumlu abonelik satın alma işlemleri için çalışmaya devam eder. 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 almak için purchases.subscriptionsv2:get değerini kullanın. Bu API, taşınan abonelikler, yeni abonelikler (hem ön ödemeli hem de otomatik olarak yenilenen) ve tüm satın alma işlemleriyle uyumludur. Bildirim alırken abonelik durumunu kontrol etmek için bu uç noktayı kullanabilirsiniz. Döndürülen nesne (SubscriptionPurchaseV2) yeni alanlar içerir ancak mevcut abonelikleri desteklemeye devam etmek için gereken eski verileri de içerir.

Ö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 abonelikler için olduğu gibi ön ödemeli planlar için de geçerlidir:

  • [Yeni alan] lineItems[0].prepaid_plan.allowExtendAfterTime: Kullanıcıların aynı anda yalnızca bir kullanılmamış para ekleme işlemine sahip olmasına izin verildiğinden, kullanıcıların ön ödemeli planlarını uzatmak için başka bir para ekleme işlemi satın almasına ne zaman izin verileceğini belirtir.
  • [Yeni alan] SubscriptionState: Abonelik nesnesi durumunu belirtir. Ön ödemeli planlar için bu değer her zaman ACTIVE, PENDING veya CANCELED olur.
  • lineItems[0].expiryTime: Bu alan, ön ödemeli planlarda her zaman mevcuttur.
  • paused_state_context: Ön ödemeli planlar duraklatılamayacağı için bu alan hiçbir zaman mevcut değildir.
  • lineItems[0].auto_renewing_plan: Ön ödemeli planlarda bulunmaz.
  • canceled_state_context: Bu alan yalnızca 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 alanının 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'teki ilgili alanlarla nasıl eşlendiği gösterilmektedir.

SubscriptionPurchase SubscriptionPurchaseV2
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 değeri 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 mevcuttur)
autoResumeTimeMillis pausedStateContext.autoResumeTime
(eşdeğer alan yok) canceledStateContext (yalnızca abonelik durumu SUBSCRIPTION_STATE_CANCELED ise mevcuttur)
(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 aboneliklerin her birinin basePlan/offer bölümünde bulunabilir.
developerPayload (no equivalent field) geliştirici yükü desteği sonlandırıldı
paymentState (eşdeğer alan yok)
Ödeme durumunu subscriptionState'dan anlayabilirsiniz:
  • Ödeme beklemede:
    • SUBSCRIPTION_STATE_PENDING (beklemedeki işlemle 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 yükseltme / düşürme:
    • SUBSCRIPTION_STATE_PENDING
cancelReason, userCancellationTimeMillis, cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (değişiklik yok)
purchaseType Test: testPurchase
üzerinden 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 olarak yükseltilmiş olsa da geliştirici aboneliği yönetimi 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 yaptığınız 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ğunda varsayılan vergi oranı dahil) döndürür.