Bu konuda, yenileme ve geçerlilik bitiş tarihi gibi abonelik yaşam döngüsü olaylarının nasıl ele alınacağı açıklanmaktadır. Ayrıca, promosyon sunma ve kullanıcılarınızın kendi aboneliklerini yönetmelerine olanak tanıma gibi ek abonelik özellikleri de açıklanmaktadır.
Uygulamanız için abonelik ürünleri yapılandırmadıysanız Ürünlerinizi oluşturma ve yapılandırma bölümüne bakın.
Aboneliklere genel bakış
Abonelik, kullanıcıların belirli bir dönem boyunca erişebileceği avantajları temsil eder. Örneğin, abonelik kullanıcıya bir müzik çalma hizmetine erişme hakkı verebilir.
Aynı uygulamada birden fazla aboneliğiniz olabilir. Bu abonelikler farklı avantaj gruplarını veya tek bir avantaj grubunun farklı katmanlarını ("Gümüş" ve "Altın" katmanları gibi) temsil edebilir.
Temel planlar ve teklifler aracılığıyla aynı abonelik ürünü için birden fazla yapılandırma oluşturabilirsiniz. Örneğin, uygulamanıza daha önce hiç abone olmamış kullanıcılar için bir tanıtım teklifi oluşturabilirsiniz. Benzer şekilde, halihazırda abone olan kullanıcılar için yükseltme teklifi de oluşturabilirsiniz.
Abonelik ürünleri, temel planlar ve fırsatlarla ilgili ayrıntılı genel bakış için Play Console Yardım Merkezi'ndeki dokümanlara bakın.
Ön ödemeli plan entegrasyonu
Ön ödemeli planlar, geçerlilik süresi sona erdiğinde otomatik olarak yenilenmez. Abonelikten yararlanma hakkını kesintisiz olarak uzatmak için kullanıcının aynı abonelik için ön ödemeli bir plana para eklemesi gerekir.
Para ekleme için faturalandırma akışını, orijinal satın alma işleminde olduğu gibi başlatın. Satın alma işleminin para ekleme olduğunu belirtmeniz gerekmez.
Ön ödemeli plan para ekleme işlemlerinde her zaman CHARGE_FULL_PRICE
değişim modu kullanılır ve bu modu açık bir şekilde ayarlamanız gerekmez.
Kullanıcıdan tam fatura dönemi için hemen ödeme alınır ve kullanıcının yararlanma hakkı para eklemede belirtilen süre kadar uzatılır.
Para ekleme işleminden sonra, Purchase
sonuç nesnesindeki aşağıdaki alanlar, en son para ekleme işlemini yansıtacak şekilde güncellenir:
- Sipariş kimliği
- Satın alma zamanı
- İmza
- Satın alma jetonu
- Alınan
Aşağıdaki Purchase
alanları her zaman orijinal satın almada bulunan verileri içerir:
- Paket adı
- Satın alma durumu
- Ürünler
- Otomatik yenileme
Ön ödemeli satın alma onayı
Otomatik yenilenen aboneliklerde olduğu gibi, satın alma işleminden sonra ön ödemeli planları onaylamanız gerekir. Hem ilk satın almanın hem de para ekleme işlemlerinin onaylanması gerekir. Daha fazla bilgi için Satın alma işlemlerini işleme bölümüne bakın.
Ön ödemeli plan süreleri kısa olabileceğinden, satın alma işlemini mümkün olan en kısa sürede onaylamanız önemlidir.
Bir hafta veya daha uzun süreli ön ödemeli planlar üç gün içinde onaylanmalıdır.
Bir haftadan kısa süreli ön ödemeli planlar, plan süresinin yarısında onaylanmalıdır. Örneğin, geliştiricilerin üç günlük ön ödemeli planı onaylamak için 1,5 gün süresi vardır.
Kullanıcıların abonelikleri yönetmesine izin vermek için derin bağlantılar kullanın
Uygulamanız, bir ayarlar veya tercihler ekranında kullanıcıların aboneliklerini yönetmelerine olanak tanıyan bir bağlantı içermelidir. Bu bağlantıyı uygulamanızın doğal görünümüne ve tarzına dahil edebilirsiniz.
Süresi dolmamış abonelikler için uygulamanızdan Google Play abonelik merkezine bir derin bağlantı ekleyebilirsiniz. Bu bağlantıyı, abonelik kaynağının subscriptionState
alanını kullanarak belirleyebilirsiniz.
Bu bilgiler doğrultusunda, Play Store abonelik merkezine derin bağlantı oluşturmak için kullanabileceğiniz birkaç yöntem vardır.
Abonelik merkezi bağlantısı
Şekil 1 ve 2'de gösterildiği gibi, kullanıcıları tüm aboneliklerinin gösterildiği sayfaya yönlendirmek için aşağıdaki URL'yi kullanın:
https://play.google.com/store/account/subscriptions


Bu derin bağlantı, kullanıcının iptal edilen bir aboneliği Play Store abonelik merkezinden geri yüklemesine yardımcı olabilir.
Belirli bir abonelik yönetimi sayfasına bağlantı (önerilir)
Süresi dolmamış bir aboneliğin yönetim sayfasına doğrudan bağlantı oluşturmak için satın alınan abonelikle ilişkili paket adını ve productId
değerini belirtin. Mevcut bir abonelik için productId
öğesini programatik olarak belirlemek amacıyla uygulamanızın arka ucunu sorgulayın veya belirli bir kullanıcıyla ilişkilendirilmiş aboneliklerin listesi için BillingClient.queryPurchasesAsync()
numaralı telefonu çağırın. Her abonelik, abonelik durumu bilgilerinin bir parçası olarak karşılık gelen productId
değerini içerir.
Bir abonelik satın alma işlemiyle ilişkili her SubscriptionPurchaseLineItem
nesnesi, kullanıcının söz konusu satır öğesinde satın aldığı abonelikle ilişkili productId
değerini içerir.
Kullanıcıları belirli bir abonelik yönetimi ekranına yönlendirmek için "alt-ürün-kimliğiniz" ve "uygulama-paketiniz" ifadesini sırasıyla productId
ve uygulama paketi adıyla değiştirerek aşağıdaki URL'yi kullanın:
https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
Böylece kullanıcı, ödeme yöntemlerini yönetebilir ve iptal, yeniden abonelik ve duraklatma gibi özelliklere erişebilir.
Abonelik yönetimi bağlantıları için örnek kodu Classy Taxi örnek uygulamasında bulabilirsiniz.
Kullanıcıların aboneliklerini yükseltmesine, düşürmesine veya değiştirmesine izin ver
Mevcut abonelere, abonelik planlarını ihtiyaçlarını daha iyi karşılayacak şekilde değiştirmeleri için çeşitli seçenekler sunabilirsiniz:
- "Temel" ve "premium" abonelik gibi birden fazla abonelik katmanı satıyorsanız kullanıcıların farklı bir aboneliğin temel planını veya fırsatı satın alarak katmanlar arasında geçiş yapmasına izin verebilirsiniz.
- Kullanıcıların geçerli fatura dönemlerini değiştirmesine olanak tanıyabilirsiniz. Örneğin, aylık plandan yıllık plana geçebilirsiniz.
- Ayrıca, kullanıcıların otomatik yenilenen ve ön ödemeli planlar arasında geçiş yapmasına da izin verebilirsiniz.
Uygun kullanıcılara indirim sağlamak için abonelik fırsatları sunarak bu değişikliklerin herhangi birini teşvik edebilirsiniz. Örneğin, aylık plandan yıllık plana geçerken ilk yıl için% 50 indirim sunan bir teklif oluşturabilir ve bu teklifi, teklifi satın almamış olan aylık plana abone olan kullanıcılarla sınırlandırabilirsiniz. Fırsat uygunluk ölçütleriyle ilgili daha fazla bilgiyi Yardım Merkezi'nde bulabilirsiniz.
Şekil 3'te, üç farklı plan içeren örnek bir uygulama gösterilmektedir:

Uygulamanızda Şekil 3'e benzer bir ekran gösterilebilir. Bu ekran, kullanıcılara aboneliklerini değiştirme seçenekleri sunar. Her durumda, kullanıcılar mevcut abonelik planlarının ne olduğu ve planı değiştirmek için ne gibi seçeneklere sahip oldukları açıkça anlaşılmalıdır.
Kullanıcılar aboneliklerini yükseltmeye, düşürmeye veya değiştirmeye karar verdiklerinde, mevcut ücretli fatura dönemindeki orantılı değerin nasıl uygulanacağını ve herhangi bir yararlanma hakkı değişikliğinin ne zaman gerçekleşeceğini belirleyen bir değiştirme modu belirtirsiniz.
Değişim modları
Aşağıdaki tabloda, kullanılabilir değiştirme modları ve örnek kullanımlar listelenmiştir.
Değiştirme modu |
Açıklama |
Örnek kullanım |
|
Abonelik hemen yeni sürüme veya eski sürüme geçirilir. Kalan süre, fiyat farkına göre düzenlenir ve bir sonraki faturalandırma tarihine kadar yeni aboneliğe aktarılır. Bu, varsayılan davranıştır. |
Hemen ek ödeme yapmadan daha pahalı bir katmana geçin. |
|
Abonelik hemen yükseltilir ve faturalandırma döngüsü aynı kalır. Kalan döneme ait fiyat farkı daha sonra kullanıcıdan tahsil edilir. Not: Bu seçenek yalnızca zaman birimi başına fiyatın arttığı abonelik yükseltmeleri için kullanılabilir. |
Faturalandırma tarihini değiştirmeden daha pahalı bir katmana geçin. |
|
Abonelik hemen üst veya alt sürüme geçirilir ve kullanıcıdan yeni yararlanma hakkı için tam ücret hemen alınır. Önceki abonelikten kalan değer aynı yararlanma hakkına aktarılır veya farklı bir yararlanma hakkına geçiş yapıldığında zamana orantılı olarak hesaplanır. |
Daha kısa faturalandırma dönemlerinden daha uzun fatura dönemlerine geçiş yapın. |
|
Abonelik hemen üst veya alt sürüme geçirilir ve abonelik yenilendiğinde yeni fiyat tahsil edilir. Faturalandırma döngüsü aynı kalır. |
Kalan ücretsiz süreyi korurken daha yüksek bir abonelik katmanına geçin. |
|
Abonelik yalnızca abonelik yenilendiğinde yükseltilir veya düşürülür. Ancak yeni satın alma işlemi, yeni yararlanma hakkı için gelecekte bir başlangıç tarihiyle hemen gönderilir. Böylece geliştirici, kullanıcılara isterse ek değişiklikler yapma izni verebilir. Örneğin, orijinal plana geri dönebilir veya yeni bir ertelenmiş plan değişikliği başlatabilirler. |
Daha ucuz bir katmana geçin. |
Yükseltme veya düşürme tekliflerinin farklı upsell ve geri kazanma uygulamaları hakkında daha fazla bilgi edinmek için teklifleri ve promosyon kılavuzunu okuyun.
Satın alma işlemi için değiştirme modunu ayarlama
Tercihlerinize ve iş mantığınıza bağlı olarak farklı abonelik geçiş türleri için farklı değiştirme modları kullanabilirsiniz. Bu bölümde, bir abonelikteki değişiklik için değiştirme modunun nasıl ayarlanacağı ve geçerli sınırlamalar açıklanmaktadır.
Aynı abonelik içinde yeniden abone olma veya plan değiştirme
Google Play Console'da varsayılan değiştirme modu belirtebilirsiniz. Bu ayar, aynı abonelik için farklı bir temel plan veya teklif satın alan ya da iptal sonrasında yeniden abone olan mevcut abonelerden ne zaman ödeme alınacağını seçmenize olanak tanır. CHARGE_FULL_PRICE
ile eşdeğer olan Hemen tahsil et ve WITHOUT_PRORATION
ile eşdeğer olan Bir sonraki fatura tarihinde tahsil et seçenekleri mevcuttur. Aynı abonelik içinde temel planlar arasında geçiş yaparken kullanılabilen tek değişim modları bunlardır.
Örneğin, kullanıcı iptal ettikten sonra ancak abonelik sona ermeden önce aynı plan için bir geri kazanma fırsatı uyguluyorsanız yeni satın alma işlemini SubscriptionUpdateParams
aracında herhangi bir değer belirtmeden normal bir satın alma işlemi olarak işleyebilirsiniz. Sistem, abonelikte yapılandırdığınız varsayılan değiştirme modunu kullanır ve eski satın alma işleminden yeni satın alma işlemine plan geçişini otomatik olarak gerçekleştirir.
Abonelikler arasında plan değiştirme veya varsayılan değiştirme modunu geçersiz kılma
Kullanıcı, abonelik ürünleri (farklı bir abonelik satın alma satın alma) değiştiriyorsa veya herhangi bir nedenle varsayılan değiştirme modunu geçersiz kılmak isterseniz satın alma akışı parametreleri kapsamında çalışma zamanında orantılı kullanım oranını belirtirsiniz.
Çalışma zamanı satın alma akışı yapılandırmanızın bir parçası olarak SubscriptionUpdateParams
öğesini doğru şekilde sağlamak için aşağıdaki kısıtlamalara dikkat edin:
- Ön ödemeli plan veya otomatik yenilenen plan için üst sürüme geçerken, eski sürüme geçerken veya aynı aboneliğin ön ödemeli planına geçirken izin verilen tek kullanımlık paylaştırma modu
CHARGE_FULL_PRICE
'dur. Başka bir oranlama modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir. - Aynı abonelik içinde, ön ödemeli plandan veya otomatik yenilenen plandan otomatik yenilenen bir plana geçiş yaparken geçerli bölüştürme modları
CHARGE_FULL_PRICE
veWITHOUT_PRORATION
şeklindedir. Başka bir oranlama modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir.
Değiştirme örnekleri ve davranışları
Bölüştürme modunun nasıl çalıştığını anlamak için aşağıdaki senaryoyu inceleyin:
Sami'nin, Country Gardener uygulamasından online içeriğe aboneliği var. İçeriğin yalnızca metin içeren Katman 1 sürümüne aylık aboneliği var. Bu aboneliğin maliyeti ayda 2 ABD dolarıdır ve abonelik ayın ilk günü yenilenir.
Samwise 15 Nisan'da, video güncellemelerini içeren ve maliyeti yılda 36 ABD doları olan 2. Katman aboneliğinin yıllık sürümüne geçmeyi seçti.
Geliştirici, aboneliği yükseltirken bir bölüşme modu seçer. Aşağıdaki listede, her bir oranlama modunun Samwise'ın aboneliğini nasıl etkilediği açıklanmaktadır:
WITH_TIME_PRORATION
Sami'nin 1. Katman aboneliği hemen sona erer. Tam ay için ödeme yaptığı (1-30 Nisan) ancak abonelik döneminin ortasında yükseltme yaptığı için bir aylık aboneliğin yarısı (1 ABD doları) yeni aboneliğine uygulanır. Ancak, yeni aboneliğin ücreti yılda 36 ABD doları olduğundan, 1 ABD doları kredi bakiyesi yalnızca 10 gün için (16-25 Nisan) ödeme yapar. Bu nedenle, 26 Nisan'da yeni bir abonelik için 36 ABD doları ve sonraki her yılın 26 Nisan'ında 36 ABD doları daha tahsil edilir.
Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener
kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır.
CHARGE_PRORATED_PRICE
Zaman birimi başına Katman 2 abonelik fiyatı (36 ABD doları/yıl = 3 ABD doları/ay), zaman birimi başına 1. Katman abonelik fiyatından (2 ABD doları/ay) daha yüksek olduğu için bu mod kullanılabilir. Sami'nin 1. Katman aboneliği hemen sona erer. Bir ayın tamamı için ödeme yapıp yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Ancak, yeni aboneliğin ücreti 36 ABD doları olduğu için kalan 15 günün maliyeti 1,50 ABD dolarıdır. Bu nedenle yeni aboneliği için 0,50 ABD doları ücret alınır. Samwise'dan 1 Mayıs'ta yeni abonelik katmanı için 36 ABD doları ve sonraki her yıl 1 Mayıs'ta 36 ABD doları daha ücret alınır.
Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener
kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır.
WITHOUT_PRORATION
Samwise'ın 1. Katman aboneliği, ücretsiz olarak hemen 2. Katman'a yükseltilir. 1 Mayıs'ta yeni abonelik katmanı için 36 ABD doları, sonraki her yılın 1 Mayıs'ında ise 36 ABD doları ücret alınır.
Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener
kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır.
DEFERRED
Samwise'ın 1. Katman aboneliği, süresi 30 Nisan'da sona erene kadar devam eder. 1 Mayıs'ta 2. Katman aboneliği geçerlilik kazanır ve Sami'den yeni abonelik katmanı için 36 ABD doları ücret alınır.
Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener
kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır. Bu noktada diğer yeni satın alma işlemlerini yaptığınız gibi satın alma işlemini de gerçekleştirmeniz gerekir. Özellikle, yeni satın alma işlemini onayladığınızdan emin olun. Yeni abonelik startTime
alanının, değişim işleminin geçerli olduğu anda (eski aboneliğin süresi dolduğunda) doldurulduğunu unutmayın. Bu noktada, yeni abonelik planı için bir SUBSCRIPTION_RENEWED
RTDN alırsınız. Ertelenen değiştirme işlemini işleme bölümünde ReplacementMode.DEFERRED
davranışı hakkında daha fazla bilgi edinin.
CHARGE_FULL_PRICE
Sami'nin 1. Katman aboneliği hemen sona erer. 2. Katman aboneliği bugün başlıyor ve kendisinden 36 ABD doları ücret alınıyor. Bir ayın tamamı için ödeme yapıp yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Yeni aboneliğin ücreti 36 ABD doları olduğu için yılın 1/36'sında abonelik dönemine (yaklaşık 10 gün) eklenir. Bu nedenle Samwise'ın bir sonraki ödemesi 1 yıl 10 gün sonra 36 ABD doları olacaktır. Sonrasında, kendisinden her yıl 36 ABD doları ücret alınır.
Bölüştürme modu seçerken değiştirme önerilerimizi incelemeyi unutmayın.
Uygulama içinde abonelik değişikliklerini tetikleyin
Uygulamanız, kullanıcılara satın alma akışını başlatma adımlarını uygulayarak yeni veya eski sürüme geçme olanağı sunabilir. Ancak yeni sürüme veya eski sürüme geçerken aşağıdaki örnekte gösterildiği gibi mevcut abonelik, gelecekteki (yükseltilmiş veya eski sürüme geçirilmiş) abonelik ve kullanılacak değiştirme moduyla ilgili ayrıntıları sağlamanız gerekir:
Kotlin
val offerToken = productDetails .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken() val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(offerToken) .build() ) ).setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken("old_purchase_token") .setSubscriptionReplacementMode( BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE ) .build() ).build() billingClient.launchBillingFlow( activity, billingParams ) // ...
Java
String offerToken = productDetails .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken(); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmuableList.of( ProductDetailsParams.newBuilder() // fetched via queryProductDetailsAsync .setProductDetails(productDetails) // offerToken can be found in // ProductDetails=>SubscriptionOfferDetails .setOfferToken(offerToken) .build())) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in Purchase#getPurchaseToken .setOldPurchaseToken("old_purchase_token") .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE) .build()) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams); // ...
Değiştirme önerileri
Aşağıdaki tabloda, farklı oranlama senaryoları ve her senaryo için önerdiklerimiz gösterilmektedir:
Senaryo | Önerilen değiştirme modu | Sonuç |
---|---|---|
Daha pahalı bir katmana geçme | CHARGE_PRORATED_PRICE |
Kullanıcı, aynı fatura dönemini koruyup hemen erişim elde eder. |
Daha düşük fiyatlı bir katmana geçme | DEFERRED |
Kullanıcı daha pahalı katman için zaten ödeme yaptığından bir sonraki faturalandırma tarihine kadar erişime devam eder. |
Ücretsiz deneme sırasında yeni sürüme geçme, denemeyi devam ettirme | WITHOUT_PRORATION |
Kullanıcı ücretsiz deneme erişimini korur ancak denemenin geri kalanında daha yüksek bir katmana geçer. |
Ücretsiz deneme süresinde yeni sürüme geçme: Ücretsiz denemeye erişimi sona erdirme | CHARGE_PRORATED_PRICE |
Kullanıcı yeni katmana hemen erişebilir ancak artık ücretsiz denemeden yararlanamaz. |
Abonelik değişikliği satın alma işlemlerini yönetme
Plan değişiklikleri, tüm şartlar ve amaçlar için yapılan yeni satın alma işlemleridir. Bu değişiklikler, faturalandırma akışı başarıyla tamamlandıktan sonra bu şekilde işlenip onaylanmalıdır. Yeni satın alma işlemini uygun bir şekilde işlemenin yanı sıra, değiştirilen satın alma işlemini geri almanız gerekir.
Uygulama içi davranış, yeni satın alma işlemleriyle aynıdır. Uygulamanız, PurchasesUpdatedListener
hesabınızda yapılan yeni satın alma işleminin sonucunu alır ve yeni satın alma işlemi queryPurchasesAsync
üzerinden sunulur.
Bir satın alma işlemi mevcut bir kaynağın yerine geçtiğinde Google Play Developer API, abonelik kaynağında bir linkedPurchaseToken
döndürür. Eski jetonun hizmetlerinize erişim elde etmek amacıyla kullanılmaması için linkedPurchaseToken
içinde sağlanan jetonu geçersiz kıldığınızdan emin olun. Sürüm yükseltme ve düşürme satın alma işlemlerini yönetme hakkında bilgi için Yeni sürüme geçme, eski sürüme geçme ve yeniden kaydolma işlemleri bölümüne bakın.
Yeni satın alma jetonunu aldığınızda, yeni satın alma jetonunu doğrulama işleminin aynısını uygulayın. Bu satın alma işlemlerini, Google Play Faturalandırma Kitaplığı'ndan BillingClient.acknowledgePurchase()
veya Google Play Developer API'den Purchases.subscriptions:acknowledge
ile onayladığınızdan emin olun.
Ertelenen değiştirme işlemini işleme
Ertelenen değiştirme modu, kullanıcının yeni plana başlamadan önce eski planındaki kalan yararlanma hakkını kullanmasına izin vermenizi sağlar.
Yeni bir satın alma işlemi için ReplacementMode.DEFERRED değerini kullandığınızda queryPurchasesAsync()
, satın alma akışından sonra yeni bir satın alma jetonu döndürür. Bu jeton bir sonraki yenileme tarihine, ertelenen değiştirme işlemi gerçekleşene kadar eski ürünle ilişkili kalmaya devam eder. Bu tarihten sonra yeni ürün iade edilir.
Geçmişte, bu kullanıcı deneyimini kullanımdan kaldırılan ProrationMode.DEFERRED
ile elde edebiliyordunuz ancak ProrationMode.DEFERRED
, Play Faturalandırma Kitaplığı 6'da kullanımdan kaldırıldı. Davranışın nerede farklılık gösterdiğini anlamak için aşağıdaki tabloya bakın:
Süre |
ProrationMode.DEFERRED (desteği sonlandırıldı) |
DeğiştirmeMode.DEFERRED |
Satın alma süreci başarılı olduktan hemen sonra (uygulama) |
Eski plandan yararlanma hakkı bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru yararlanma hakkını verdiğinden emin olmak için Yeni satın alma jetonu görünmediğinden bu noktada işlenemiyor. |
Yeni satın alma jetonu gösterildiğinden, değiştirme işleminin yapılacağı zaman dikkate alınarak bu noktada işleme edilmelidir. |
Satın alma akışı başarılı olduktan hemen sonra (arka uç) |
SUBSCRIPTION_PURCHASED RTDN, satın alma akışından sonra gönderilmez. Yeni satın alma işlemi, arka uçta henüz bildirilmedi. |
SUBSCRIPTION_PURCHASED RTDN, yeni satın alma jetonu için satın alma akışından hemen sonra gönderilir. purchases.subscriptionsv2.get yönteminin yeni satın alma jetonuyla çağrılması, iki satır öğesi içeren bir satın alma işlemi döndürür:
Eski satın alma jetonu için SUBSCRIPTION_EXPIRED gönderildi. purchases.subscriptionsv2.get yöntemi eski satın alma jetonuyla çağrıldığında, jetonun süresi dolmuş olarak görünür (eski planın yararlanma hakkı, kalan süre boyunca yeni satın alma işlemine aktarılır). |
Değiştirme işleminde - satın alma akışından sonra ilk yenileme (uygulama) |
Yeni satın alma jetonu kullanıma sunulduğundan işlenmesi gerekir. |
Yeni satın alma işleminin, satın alma akışı başarılı olduktan sonra zaten işlenmiş olması gerekir. Bu nedenle, uygulama doğru yararlanma hakkının verildiğinden emin olmak dışında özel bir işlem yapmamalıdır. |
Değişim işleminde: Satın alma akışından sonra ilk yenileme (arka uç) |
Yeni satın alma işlemi artık ilk SUBSCRIPTION_RENEWED RTDN gönderildiğinde işlenebilir ve onaylanabilir. Abonelik kaynağındaki |
Yeni satın alma işlemi işlendi ve yeni satın alma jetonu için SUBSCRIPTION_PURCHASED RTDN gönderildiğinde onaylandı. ReplacementMode.DEFERRED ile, ilk yenilemeler diğer herhangi bir yenilemenin standart davranışını izler ve bu etkinlik gerçekleştiğinde değiştirme için özel bir mantık işlemeniz gerekmez. Yeni satın alma jetonuyla purchases.subscriptionsv2.get yöntemi çağrıldığında, iki satır öğesi içeren bir satın alma işlemi döndürülür:
|
Yararlanma hakkı değişiklikleriyle ilgili aynı davranışı sunduğu, ancak satın alma işlemini yönetebilmeniz için diğer yeni satın alma işlemlerine yönelik davranışlarla daha tutarlı bir yöntem sunduğundan, kullanımdan kaldırılan ProrationMode.DEFERRED yerine artık ReplacementMode.DEFERRED kullanılmalıdır.
Müşteri yönetimi
Gerçek zamanlı geliştirici bildirimlerini kullanarak, bir kullanıcının iptal etmeye karar verdiğini gerçek zamanlı olarak tespit edebilirsiniz. Bir kullanıcı aboneliğini iptal ettiğinde, ancak aboneliği sona ermeden önce yeniden abone olmalarını istemek için kullanıcıya push bildirimleri veya uygulama içi mesajlar gönderebilirsiniz.
Bir kullanıcı, aboneliğini iptal ettikten sonra bu kullanıcıyı uygulamanızdan veya Play Store üzerinden geri kazanmayı deneyebilirsiniz. Aşağıdaki tabloda çeşitli abonelik senaryoları, ilişkili geri kazanma işlemleri ve uygulama gereksinimleri açıklanmaktadır.
Aboneliğin süresi dolmadan önce | Abonelik süresi dolduktan sonra | |||
Uygulama içi | Play Store'da | Uygulama içi | Play Store'da | |
Geri kazanma özelliği | Uygulama içi abonelik | Geri yükle | Uygulama içi abonelik | Yeniden abone olma |
Kullanıcı ödeme akışından geçer | Evet | Hayır | Evet | Evet |
Kullanıcı aboneliği aynı SKU ile ilişkili kalmaya devam ediyor | Kullanıcı aynı veya farklı bir SKU'ya kaydolabilir | Evet | Kullanıcı aynı veya farklı bir SKU'ya kaydolabilir | Evet |
Yeni satın alma jetonu oluşturur | Evet | Hayır | Evet | Evet |
Varsayılan olarak etkindir | Hayır | Evet, tüm geliştiriciler için destek gerekiyor | Hayır |
Faturalandırma Kitaplığı 2.0+ olmayan uygulamalar: Hayır Faturalandırma Kitaplığı 2.0 ve sonraki sürümlere sahip uygulamalar: Evet. Geliştiriciler, Console'da bu özelliği devre dışı bırakabilir. |
Kullanıcıdan ödeme alındığında |
Aynı SKU'yu kullanıyorsanız: Geçerli fatura döneminin sonu. Farklı bir SKU kullanıyorsanız: bölüştürme moduna bağlıdır. |
Geçerli fatura döneminin sonu | Hemen | Hemen |
Uygulama gerekli | Uygulamanızda yeniden kayıt için bir kullanıcı arayüzü sağlayın |
Abonelik durumundaki değişikliği tespit et Play Store'a derin bağlantı |
Uygulamanızda yeniden kayıt için bir kullanıcı arayüzü sağlayın | Uygulama dışı satın alma işlemlerini yönetin |
Aboneliğin süresi dolmadan önce - uygulama içi
İptal edilen ancak henüz süresi dolmamış aboneliklerde, yeni abonelerin uygulama içi ürün satın alma akışının aynısını uygulayarak abonelerin uygulamanızda aboneliklerini geri yüklemelerine izin verebilirsiniz. Kullanıcı arayüzünüzde, kullanıcının mevcut bir aboneliğinin olduğundan emin olun. Örneğin, Yeniden etkinleştir düğmesiyle kullanıcının mevcut son kullanma tarihini ve yinelenen fiyatı göstermek isteyebilirsiniz.
Çoğu zaman, kullanıcıya abone olduğu aynı fiyatı ve SKU'yu aşağıdaki şekilde sunmak istersiniz:
- Aynı SKU ile yeni bir abonelik satın alma işlemi başlatın.
- Yeni abonelik eski aboneliğin yerini alır ve aynı son kullanma tarihinde yenilenir. Eski abonelik hemen süresi doldu olarak işaretlenir.
- Örneğin, Achilles'in Örnek Müzik Uygulaması aboneliği var ve aboneliğin süresi 1 Ağustos'ta sona erecek. 10 Temmuz'da bir aylık aboneliğe her ay aynı fiyatla yeniden abone olur. Yeni abonelik kalan krediyle orantılı olarak hesaplanır, hemen etkin olur ve 1 Ağustos'ta yenilenmeye devam eder.
Farklı bir fiyat (ör. yeni bir ücretsiz deneme veya geri kazanma indirimi) sunmak isterseniz bunun yerine kullanıcıya farklı bir SKU sunabilirsiniz:
- Değiştirme modunu
WITHOUT_PRORATION
kullanarak farklı SKU ile yükseltme veya düşürme işlemi başlatın. - Yeni abonelik eski aboneliğin yerini alır ve aynı son kullanma tarihinde yenilenir. Kullanıcı, tanıtım fiyatları dahil olmak üzere yeni SKU'nun fiyatı için orijinal son kullanma tarihinde ücretlendirilir. Eski abonelik, kod karartma uygulanmış bir hesap kimliği kullanılarak oluşturulmuşsa aynı kimlik yükseltme ve düşürme işlemleri için
BillingFlowParams
uygulamasına iletilmelidir. - Örneğin, Achilles'in Örnek Müzik Uygulaması aboneliği var ve aboneliğin süresi 1 Ağustos'ta sona erecek. 10 Temmuz'da tanıtım fiyatıyla yıllık aboneliğe yeniden abone olur. Yeni abonelik hemen etkinleştirilir ve kullanıcıdan 1 Ağustos'ta tanıtım fiyatı alınır.
- Geri kazanma SKU'nuza ücretsiz deneme veya tanıtım fiyatı eklemeye karar verirseniz Google Play Console'daki Uygulama başına bir ücretsiz denemeye izin ver kutusunun işaretini kaldırarak kullanıcının uygun olduğundan emin olun. Bu kutu, kullanıcının uygulama başına yalnızca bir ücretsiz deneme almasını sağlar.
Satın alma jetonunu aldığınızda, yeni bir abonelikte yaptığınız gibi satın alma işlemini yapın. Ayrıca Google Play Developer API, abonelik kaynağında bir linkedPurchaseToken
döndürür. Eski jetonun hizmetlerinize erişim elde etmek amacıyla kullanılmamasını sağlamak için linkedPurchaseToken
içinde sağlanan jetonu geçersiz kıldığınızdan emin olun.
Aboneliğin süresi dolmadan önce - Play Store'da
Abonelik iptal edilmiş ancak etkin durumdayken kullanıcılar Yeniden abone ol'u (eski adıyla Geri yükle) tıklayarak Google Play abonelik merkezinde aboneliği geri yükleyebilirler. Bu işlemde aynı abonelik ve satın alma jetonu kullanılır.

Abonelikleri geri yükleme hakkında daha fazla bilgi için Geri yükleme işlemleri başlıklı makaleyi inceleyin.
Abonelik süresi dolduktan sonra - uygulama içi
Yeni abonelerle aynı uygulama içi ürün satın alma akışını uygulayarak süresi dolmuş abonelerin uygulamanızda yeniden abone olmalarını sağlayabilirsiniz. Aşağıdakileri göz önünde bulundurun:
- Kullanıcılara indirim sunmak amacıyla aboneliğiniz için özel fiyatlandırma içeren bir ürün kimliği sunmak isteyebilirsiniz. Bu kimlik, geri kazanma SKU'su olarak da adlandırılır. Teklifi uygulamanızda sağlayabilir veya kullanıcıyı e-posta gibi yöntemlerle uygulama dışında bilgilendirebilirsiniz.
- Geri kazanma aboneliği başlatmak için Google Play Faturalandırma Kitaplığı'nı kullanarak Android uygulamanızda satın alma akışını başlatın. Bu süreç yeni aboneliktekiyle aynıdır ancak kullanıcıya sunulan SKU'yu belirleyebilirsiniz.
- Geri kazanma SKU'nuza ücretsiz deneme veya tanıtım fiyatı eklemeye karar verirseniz Google Play Console'daki Uygulama başına bir ücretsiz denemeye izin ver kutusunun işaretini kaldırarak kullanıcının uygun olduğundan emin olun. Bu kutu, kullanıcının uygulama başına bir ücretsiz deneme almasını sağlar.
- Kullanıcı aynı SKU'ya yeniden abone olursa ücretsiz denemelerden veya tanıtım fiyatından yararlanamaz. Kullanıcı arayüzünüzün bunu yansıttığından emin olun.
Satın alma jetonunu aldığınızda, yeni bir abonelikte yaptığınız gibi satın alma işlemini yapın. Abonelik kaynağında bir linkedPurchaseToken
almazsınız.
Abonelik süresi dolduktan sonra - Play Store'da
Etkinleştirilirse kullanıcılar Google Play abonelik merkezinde Yeniden abone ol'u tıklayarak süre dolduktan sonra bir yıla kadar aynı SKU'ya yeniden abone olabilirler. Bu işlemle yeni bir abonelik ve satın alma jetonu oluşturulur.

Yeniden abone olmak, uygulama dışı satın alma işlemi olarak kabul edilir. Bu nedenle, uygulamanızın dışından yapılan satın alma işlemlerini işleme ile ilgili en iyi uygulamaları takip ettiğinizden emin olun.
Aboneliğinizi tanıtın
Seçili kullanıcılara mevcut bir abonelik için uzatılmış ücretsiz deneme süresi sağlamak için promosyon kodları oluşturabilirsiniz. Daha fazla bilgi için Promosyon kodları bölümünü inceleyin.
Google Play, ücretsiz denemelerde ücretsiz denemeden önce kullanıcının geçerli bir ödeme yöntemine sahip olduğunu doğrular. Bazı kullanıcılar bu doğrulamayı, ödeme yöntemlerinde provizyon veya ödeme olarak görebilir. Bu provizyon veya ödeme geçici olup daha sonra geri alınır ya da geri ödenir.
Deneme süresi sona erdikten sonra, tam abonelik tutarı kullanıcının ödeme yönteminden alınır.
Kullanıcı, ücretsiz deneme süresinin herhangi bir noktasında aboneliği iptal ederse abonelik deneme süresinin sonuna kadar etkin kalır ve ücretsiz deneme süresi sona erdiğinde ücret alınmaz.
İptal etme, geri ödeme veya iptal etme
Bir aboneliği iptal etmek, geri ödeme veya iptal etmek için Google Play Geliştirici API'sini kullanabilirsiniz. Bu işlev Google Play Console'da da mevcuttur.
- İptal: Kullanıcılar Google Play'de bir aboneliği iptal edebilir. Ayrıca, kullanıcılara uygulamanızdan veya web sitenizden iptal etme seçeneği sunabilirsiniz. Uygulamanız, bu iptal işlemlerini İptaller bölümünde açıklandığı şekilde gerçekleştirmelidir.
- Geri ödeme: Geri ödeme yaptığınızda kullanıcı, aboneliği kullanmaya devam edebilir. Geri ödemeler, örneğin kullanıcının ürününüze erişmesini engelleyen teknik bir hata olduysa ancak hata giderilmişse kullanılabilir. En son ödemeden daha yüksek bir tutarda geri ödeme yapmak veya kısmi bir geri ödeme yapmak istiyorsanız Google Play Console'u kullanmanız gerektiğini unutmayın.
- İptal etme: İptal ettiğinizde kullanıcı, aboneliğe erişimini hemen kaybeder. Örneğin, kullanıcının ürününüze erişmesini engelleyen teknik bir hata varsa ve kullanıcı ürünü kullanmaya devam etmek istemiyorsa bu özellik kullanılabilir. Uygulamanız, bu iptal işlemlerini İptaller bölümünde açıklandığı şekilde işlemelidir.
Aşağıdaki tabloda iptal, geri ödeme ve iptal etme arasındaki farklar gösterilmektedir.
Yenilemeyi durdurur | Parayı geri ödeme | Erişimi iptal etme | |
İptal | Evet | Hayır | Hayır |
Geri ödeme | Hayır | Evet | Hayır |
İptal et | Evet | Evet | Evet |
Abonelerin faturalandırmasını erteleme
Otomatik yenilenen abonelerin bir sonraki faturalandırma tarihini, Google Play Developer API'de Purchases.subscriptions:defer
kullanarak ileri alabilirsiniz. Erteleme süresi boyunca kullanıcı, içeriğinize tam erişimle abone olur ancak ücretlendirilmez. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.
Ön ödemeli planlarda, geçerlilik bitiş süresini ertelemek için ertelenen faturalandırma API'sini kullanabilirsiniz.
Ertelenmiş faturalandırma aşağıdakileri yapmanıza olanak tanır:
- Özel bir teklif olarak kullanıcılara ücretsiz erişim verin (ör. film satın almaları için bir hafta ücretsiz erişim verme).
- İyi niyetinizin göstergesi olarak müşterilere ücretsiz erişim verin.
Faturalandırma, API çağrısı başına en az bir gün ve en fazla bir yıl ertelenebilir. Faturalandırmayı daha da ertelemek için yeni faturalandırma tarihi gelmeden API'yi tekrar çağırabilirsiniz.
Örneğin, Demir'in Fishing Quarterly uygulaması için aylık bir online içeriğe aboneliği vardır. Normalde her ayın ilk gününde 1,25 İngiliz sterlini faturalandırılır. Mart ayında, uygulama yayıncısı için online bir ankete katıldı. Yayıncı, bir sonraki ödemeyi 15 Mayıs'a kadar erteleyerek onu altı hafta ücretsiz olarak ödüllendirir. Bu tarih, daha önce planlanan 1 Nisan olan faturalandırma tarihinden altı hafta sonradır. Darcy Nisan veya Mayıs başı için ücretlendirilmez ve içeriğe hâlâ erişebilir. 15 Mayıs'ta kendinden her ay için normal 1, 25 sterlin tutarındaki abonelik ücreti alınır. Bir sonraki yenileme tarihi şu anda 15 Haziran.
Erteleme sırasında, faturalandırma tarihinin değiştiğini kullanıcıya e-postayla veya uygulama içinden bildirmek isteyebilirsiniz.
Reddedilen ödemelerle ilgilenme
Faturalandırma döneminin sonunda ödeme sorunları olursa Google, iptal etmeden önce belirli aralıklarla aboneliği bir süre için yenilemeyi dener. Bu yeniden deneme süresi, 30 güne kadar ve belirtilen herhangi bir ek süre boyunca sürebilir. Google bu süre zarfında kullanıcılara e-postalar ve bildirimler göndererek ödeme yöntemlerini güncellemelerini de ister.
Ödeme reddedildikten sonra abonelik, etkinleştirilmesi durumunda öncelikle bir ek yayınlanma süresine girer. Ek süre boyunca kullanıcı aboneliğe erişmeye devam edebilir.
Ek süre sona erdiğinde abonelik 30 güne kadar hesap askıya alma sürecine girer. Hesabı askıya alma işlemi sırasında aboneliğe erişimi engelleyebilirsiniz.
Ödeme reddi sırasında aboneliğin kurtarılma olasılığını en üst düzeye çıkarmak için, kullanıcınızı ödeme sorunu konusunda bilgilendirebilir ve düzeltmesini isteyebilirsiniz.
Bu işlemi, ek yayınlanma süresi ve askıya alınmış hesap bölümlerinde açıklandığı gibi kendiniz yapabilir veya Google'ın uygulamanızdaki kullanıcılara bir mesaj gösterdiği uygulama içi mesajlaşma API'sini uygulayabilirsiniz.
Uygulama içi mesajlaşma
InAppMessageCategoryId.TRANSACTIONAL
ile uygulama içi mesajlaşmayı etkinleştirdiyseniz Google Play, kullanıcılara ek süre boyunca mesajlaşmaları ve askıya alınmış hesapları günde bir kez gösterir. Ayrıca, kullanıcılara uygulamadan çıkmadan ödemelerini düzeltme fırsatı sunar.

Mesajın gösterilip gösterilmeyeceğini belirlemek için kullanıcı uygulamayı her açtığında bu API'yi çağırmanızı öneririz.
Kullanıcı aboneliğini başarıyla kurtardıysa satın alma jetonuyla birlikte SUBSCRIPTION_STATUS_UPDATED
yanıt kodu alırsınız. Daha sonra bu satın alma jetonunu, Google Play Developer API'yi çağırmak ve uygulamanızdaki abonelik durumunu yenilemek için kullanmanız gerekir.
Uygulama içi mesajlaşmayı entegre edin
Kullanıcıya uygulama içi mesajlaşmayı göstermek için BillingClient.showInAppMessages()
değerini kullanın.
Uygulama içi mesajlaşma akışını tetiklemeye ilişkin bir örneği aşağıda görebilirsiniz:
Kotlin
val inAppMessageParams = InAppMessageParams.newBuilder() .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL) .build() billingClient.showInAppMessages(activity, inAppMessageParams, object : InAppMessageResponseListener() { override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) { if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) { // The flow has finished and there is no action needed from developers. } else if (inAppMessageResult.responseCode == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) { // The subscription status changed. For example, a subscription // has been recovered from a suspend state. Developers should // expect the purchase token to be returned with this response // code and use the purchase token with the Google Play // Developer API. } } })
Java
InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder() .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL) .build(); billingClient.showInAppMessages(activity, inAppMessageParams, new InAppMessageResponseListener() { @Override public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) { if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) { // The flow has finished and there is no action needed from developers. } else if (inAppMessageResult.responseCode == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) { // The subscription status changed. For example, a subscription // has been recovered from a suspend state. Developers should // expect the purchase token to be returned with this response // code and use the purchase token with the Google Play // Developer API. } } });