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
veyaCANCELED
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:
|
cancelReason ,
userCancellationTimeMillis ,
cancelSurveyResult |
canceledStateContext |
linkedPurchaseToken |
linkedPurchaseToken (değişiklik yok) |
purchaseType |
Test: testPurchase aracılığıylaPromosyon: (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.