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şlendiğ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.
querySkuDetailsAsync()
gibi SkuDetails
objeleri ve işlevleri 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 üzerinden hangi tekliflerin kullanılabileceğini geriye dönük uyumlu olarak işaretleyerek de kontrol edebilirsiniz.
Play Faturalandırma Kitaplığı 5, eski yöntemlerin yanı sıra yeni varlıkları ve işlevleri yönetmek için yeni bir ProductDetails
nesnesi ve buna karşılık gelen 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 ayıklar. 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
veyaCANCELED
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 etkin bir şekilde aboneliği 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 |
lineItems.autoRenewingPlan.recurringPrice |
introductoryPriceInfo |
(eşdeğer alan yok) Bu bilgiler, satın alınan aboneliklerin her birinin 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:
|
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.