Bu belgede, yenileme ve sona erme gibi abonelik yaşam döngüsü etkinliklerinin nasıl ele alınacağı açıklanmaktadır. Ayrıca, promosyon sunma ve kullanıcılarınızın kendi aboneliklerini yönetmesine izin verme gibi ek abonelik özelliklerinden de bahsedilmektedir.
Uygulamanız için abonelik ürünleri yapılandırmadıysanız Ürünlerinizi oluşturma ve yapılandırma başlıklı makaleyi inceleyin.
Aboneliklere genel bakış
Abonelik, kullanıcılara belirli haklar veren yinelenen bir işlemdir. Haklar, kullanıcıların belirli bir dönem boyunca erişebileceği avantajları ifade eder. Örneğin, bir abonelik, kullanıcıya premium erişim hakkı verebilir.
Temel planlar ve fırsatlar aracılığıyla aynı abonelik ürünü için birden fazla yapılandırma oluşturabilirsiniz. Örneğin, uygulamanıza 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 bir yükseltme teklifi oluşturabilirsiniz.
Abonelik ürünleri, temel planlar ve teklifler hakkında ayrıntılı bilgi için Play Console Yardım Merkezi'ndeki dokümanlara göz atın.
Play Faturalandırma Kitaplığı aşağıdaki abonelik türlerini destekler:
Tek öğeli abonelik: Bu türde, bir hakka karşılık gelen bir öğe bulunur. Örneğin, müzik akışı hizmetine abonelik.
Eklentili abonelik: Bu türde, tek bir satın alma işleminde bir araya getirilmiş birkaç farklı hak olabilir. Örneğin, hem müzik akışı hizmetine hem de video aboneliği. Eklenti içeren aboneliklerle ilgili bilgiler için Eklenti içeren abonelikler başlıklı makaleyi inceleyin.
Ön ödemeli plan entegrasyonu
Ön ödemeli planlar, süreleri dolduğunda otomatik olarak yenilenmez. Abonelik haklarını kesintisiz olarak uzatmak için kullanıcının aynı abonelik için ön ödemeli bir plan yüklemesi gerekir.
Yükleme işlemleri için faturalandırma sürecini orijinal satın alma işleminde olduğu gibi başlatın. Satın alma işleminin yükleme olduğunu belirtmeniz gerekmez.
Ön ödemeli planlara para eklerken her zaman CHARGE_FULL_PRICE değiştirme modu kullanılır ve bu modu açıkça ayarlamanız gerekmez. Kullanıcıdan hemen tam bir fatura dönemi için ödeme alınır ve hakkı, yüklemede belirtilen süre kadar uzatılır.
Yükleme işleminden sonra, Purchase sonuç nesnesindeki aşağıdaki alanlar, en son yükleme satın alma işlemini yansıtacak şekilde güncellenir:
- Sipariş kimliği
- Satın alma zamanı
- İmza
- Satın alma jetonu
- Onaylandı
Aşağıdaki Purchase alanlar her zaman orijinal satın alma işleminde bulunan aynı verileri içerir:
- Paket adı
- Satın alma durumu
- Ürünler
- Otomatik yenileme
Ön ödemeli satın alma onayı
Otomatik yenilenen aboneliklere benzer şekilde, ön ödemeli planları satın alma işleminden sonra onaylamanız gerekir. Hem ilk satın alma işleminin hem de tüm yüklemelerin kabul edilmesi gerekir. Daha fazla bilgi için Satın alma işlemlerini işleme başlıklı makaleyi inceleyin.
Kısa süreli ön ödemeli planlar 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ı içinde onaylanmalıdır. Örneğin, geliştiricilerin üç günlük ön ödemeli planı onaylamak için 1,5 gün süresi vardır.
Taksitli abonelik entegrasyonu
Taksitli abonelik, kullanıcıların abonelik ücretinin tamamını peşin ödemek yerine belirli bir süre boyunca birden fazla taksitte ödediği bir abonelik türüdür.
Taksitli aboneliklerle ilgili ek hususlar:
- Ülke bazında kullanılabilirlik: Taksitli abonelik özelliği yalnızca Brezilya, Fransa, İspanya ve İtalya'da kullanılabilir (en son kullanılabilirlik durumu için Console'u kontrol edin).
- Fiyatı ayarlama: Console'da taksitli ödeme aboneliğinin fiyatı ayarlanırken fiyat, aylık ödeme tutarını ifade eder. Bu değer, belirlenen taahhüt süresiyle birlikte satın alma ekranında aboneliğin toplam tutarını oluşturur.
- Taahhüt süresi: Aylık ödemelerin yapılması gereken ilk abonelik taahhüdünün toplam süresi. Örneğin, bir temel planın 15 aylık taahhüt süresi varsa kullanıcı bu süre boyunca 15 aylık ödeme yapar.
- Yenilemeler: Taksitli abonelikler bağlamında "yenileme", taahhüt döneminin (ilk taahhüt dönemi veya sonraki taahhüt dönemi) sona ermesini ifade eder. İlk kayıttan sonra, ilk taahhüt dönemi tamamlandığında ilk yenileme gerçekleşir. Sonraki yenilemeler, sonraki her taahhüt dönemi tamamlandıktan sonra gerçekleşir. Taksitli aboneliklerin yenileme türleri "aylık otomatik yenilenir" veya "aynı süre için otomatik yenilenir" olabilir. "Aylık otomatik yenilenir" seçeneğinde, sonraki taahhüt yoktur ve plan, her aylık abonelik ücretinin yenileme olarak kabul edildiği aylık abonelik gibi davranır.
- Fatura dönemi: Taksitli abonelikler bağlamında bu, temel planda belirtildiği gibi, bireysel ödemelerin yapıldığı yinelenen aralığı ifade eder.
- Plan değişikliği ve fiyat değişikliği davranışları: Fiyat değişiklikleri ve iptallerde taahhüt kesindir. Bu nedenle, kullanıcı iptal etmek veya geliştirici fiyatı değiştirmek isterse değişiklik taahhüt süresinin sonunda geçerli olur. Plan değişikliklerinde taahhüt kesin değildir. Bu nedenle, plan değişikliğinin bir taahhüt döneminin sonuna kadar beklemesi gerekmez. Ayarlanan değiştirme moduna bağlı olarak hemen veya bir sonraki ödeme tarihinde geçerli olur.
- Aynı abonelikte plan değişikliği: Taksitli temel plandan aynı abonelik ürününün taksitsiz temel planına geçişe izin verilmez.
Gerçek zamanlı geliştirici bildirimleri (RTDN'ler): Bir
SUBSCRIPTION_CANCELLATION_SCHEDULEDRTDN, ödeme dönemi boyunca ödemeler devam ederken kullanıcı tarafından başlatılan iptal işleminden hemen sonra gönderilir. İptal işlemi beklemede ve yalnızca taahhüt süresinin sonunda geçerli olacak. Ardından, kullanıcı tarafından geri yüklenmezse taahhüt döneminin sonundaSUBSCRIPTION_CANCELEDveSUBSCRIPTION_EXPIREDRTDN'ler gönderilir.Ödemeler / Gelir elde etme: Geliştirici ödemeleri, kullanıcılar aylık ödemelerini gerçekleştirdikçe yapılır. Bu ödemeler, diğer tüm aboneliklerle aynı şartlara tabidir. Kullanıcılar taksitli aboneliğe kaydolduğunda geliştiricilere önceden ödeme yapılmaz.
Ödenmeyen taksitler: Kullanıcı herhangi bir taksitli abonelik ödemesini yapmazsa Google veya Geliştirici, Google'ın normal ödeme yeniden deneme uygulamalarına uygun olarak geçerli bir ödeme süresi veya hesap askıya alma süresi boyunca ödemeyi düzenli aralıklarla yeniden denemesi dışında, kullanıcıdan bu tür ödenmemiş veya bekleyen ödemeleri tahsil etmeye çalışmaz. Google, Geliştirici'ye karşı ödenmemiş kalan taksit ödemelerinden sorumlu olmayacaktır.
Play Faturalandırma Kitaplığı'nın kullanılabilirliği:
installmentDetailsalanı yalnızca PBL 7 veya sonraki sürümlerde kullanılabilir. PBL 5 ve sonraki sürümlerde, taksitli abonelikqueryProductDetails()kullanılarak döndürülür ancak abonelik, planın taahhüt edilen ödeme sayısı gibi ayrıntılı taksit bilgilerini içermez.
Kullanıcıların abonelik yönetmesine olanak tanımak için derin bağlantıları kullanma
Uygulamanızda, kullanıcılara aboneliklerini yönetme olanağı tanıyan bir ayarlar veya tercihler ekranı bağlantısı olmalıdır. Bu bağlantıyı uygulamanızın doğal görünümüne ve tarzına uygun şekilde ekleyebilirsiniz.
Uygulamanızdan, süresi dolmamış abonelikler için Google Play abonelik merkezine yönlendiren bir derin bağlantı ekleyebilirsiniz. Bu bağlantıyı, abonelik kaynağının subscriptionState alanını kullanarak belirleyebilirsiniz. Buna göre, Play Store abonelik merkezine derin bağlantı oluşturmanın birkaç yolu vardır.
Abonelik merkezi bağlantısı
Kullanıcıları, aboneliklerinin tümünü gösteren sayfaya yönlendirmek için aşağıdaki URL'yi kullanın (Şekil 1 ve 2'de gösterildiği gibi):
https://play.google.com/store/account/subscriptions
Bu derin bağlantı, kullanıcının Play Store abonelik merkezinden iptal edilmiş bir aboneliği geri yüklemesine yardımcı olmak için kullanılabilir.
Belirli bir abonelik yönetimi sayfasına bağlantı verme (önerilir)
Süresi dolmamış bir aboneliğin yönetim sayfasına doğrudan bağlantı vermek için satın alınan abonelikle ilişkili paket adını ve productId belirtin. Mevcut bir aboneliğin productId değerini programatik olarak belirlemek için uygulamanızın arka ucunu sorgulayın veya belirli bir kullanıcıyla ilişkili aboneliklerin listesi için BillingClient.queryPurchasesAsync() işlevini çağırın. Her abonelik, abonelik durumu bilgileri kapsamında ilgili productId içerir.
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 aşağıdaki URL'yi kullanın. "your-sub-product-id" ve "your-app-package" ifadelerini sırasıyla productId ve uygulama paketi adıyla değiştirin:
https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
Kullanıcı daha sonra ödeme yöntemlerini yönetebilir ve iptal, yeniden abone olma ve duraklatma gibi özelliklere erişebilir.
Kullanıcıların aboneliklerini yükseltmesine, düşürmesine veya değiştirmesine izin verme
Mevcut abonelere, abonelik planlarını ihtiyaçlarına daha uygun olacak şekilde değiştirmeleri için çeşitli seçenekler sunabilirsiniz:
- "Temel" ve "premium" gibi birden fazla abonelik katmanı satıyorsanız kullanıcıların farklı bir aboneliğin temel planını veya teklifini satın alarak katman değiştirmesine izin verebilirsiniz.
- Kullanıcıların mevcut fatura dönemlerini değiştirmelerine (ör. aylık plandan yıllık plana geçme) izin verebilirsiniz.
- Kullanıcıların otomatik yenilenen ve ön ödemeli planlar arasında geçiş yapmasına da izin verebilirsiniz.
Uygun kullanıcılara indirim sunmak için abonelik teklifleri vererek bu değişiklikleri teşvik edebilirsiniz. Örneğin, aylık plandan yıllık plana geçiş yapan kullanıcılara ilk yıl için% 50 indirim sunan bir teklif oluşturabilir ve bu teklifi, aylık plana abone olan ancak bu teklifi satın almamış kullanıcılarla sınırlayabilirsiniz. Fırsat uygunluk ölçütleri hakkında daha fazla bilgiyi Yardım Merkezi'nde bulabilirsiniz.
Şekil 3'te üç farklı plan içeren örnek bir uygulama gösterilmektedir:
Uygulamanız, kullanıcılara aboneliklerini değiştirme seçenekleri sunan 3. şekle benzer bir ekran gösterebilir. Kullanıcılar her durumda mevcut abonelik planlarının ne olduğunu ve bunu değiştirmek için hangi seçeneklere sahip olduklarını net bir şekilde anlamalıdır.
Kullanıcılar aboneliklerini yükseltmeye, düşürmeye veya değiştirmeye karar verdiğinde, mevcut ödenmiş fatura döneminin orantılı değerinin nasıl uygulanacağını ve hak değişikliğinin ne zaman gerçekleşeceğini belirleyen bir değiştirme modu belirtirsiniz.
Değiştirme modları
Aşağıdaki tabloda, kullanılabilen değiştirme modları, örnek kullanım ve ödenmiş olarak kabul edilen ödeme sayısı listelenmiştir.
Değiştirme modu |
Açıklama |
Örnek kullanım |
Ödendi olarak kaydedilen taahhütlü ödemeler (taksitli abonelik değiştirme için) |
|
Abonelik öğesi hemen yükseltilir veya düşürülür. Kalan süre, fiyat farkına göre ayarlanır ve bir sonraki fatura tarihi ileri alınarak yeni aboneliğe eklenir. Bu, varsayılan davranıştır. |
Daha pahalı bir katmana yükseltme yapın ve hemen ek ödeme yapmayın. |
0 |
|
Abonelik öğesi hemen yükseltilir ve faturalandırma dönemi aynı kalır. Kalan süre için fiyat farkı kullanıcıdan tahsil edilir. Not: Bu seçenek yalnızca bir abonelik öğesinin yükseltilmesi durumunda kullanılabilir. Bu durumda, birim zaman başına fiyat artar. |
Faturalandırma tarihini değiştirmeden daha pahalı bir katmana yükseltme yapabilirsiniz. |
1 |
|
Abonelik öğesi hemen yükseltilir veya düşürülür ve kullanıcıdan yeni hak için hemen tam fiyat alınır. Önceki abonelikten kalan değer, aynı hak için devredilir veya farklı bir hakka geçiş yapıldığında zamanla orantılı olarak hesaplanır. Not: Yeni abonelikte ücretsiz deneme veya tanıtım teklifi varsa kullanıcıdan yükseltme ya da düşürme sırasında 0 ABD doları ya da tanıtım teklifinin fiyatı (hangisi geçerliyse) alınır. |
Daha kısa faturalandırma döneminden daha uzun faturalandırma dönemine geçiş yapma |
1 (Not: Yeni abonelikte ücretsiz deneme varsa 0.) |
|
Abonelik öğesi hemen yükseltilir veya düşürülür ve abonelik yenilendiğinde yeni fiyat üzerinden ücretlendirilirsiniz. Faturalandırma dönemi aynı kalır. |
Kalan ücretsiz dönemi koruyarak daha yüksek bir abonelik katmanına geçebilirsiniz. |
0 |
|
Abonelik öğesi yalnızca abonelik yenilendiğinde yükseltilir veya düşürülür. Ancak yeni satın alma işlemi, aşağıdaki iki öğeyle birlikte hemen gerçekleştirilir:
Not: Taksitli aboneliklerde plan değişikliği, bir sonraki ödeme tarihinin başında gerçekleşir. |
Daha ucuz bir katmana geçin. |
1 |
|
Abonelik öğesinin ödeme planı, değiştirme işleminde değişmez. |
Belirli bir öğenin değiştirilmemesi gerektiğinde, eklentili bir aboneliğe abonelik öğesi ekleme veya abonelik öğesini kaldırma |
Yok |
Yükseltme veya alt sürüme geçme tekliflerinin farklı üst satış ve geri kazanma uygulamaları hakkında daha fazla bilgi edinmek için teklifler ve promosyonlar 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şi türleri için farklı değiştirme modları kullanabilirsiniz. Bu bölümde, abonelikteki bir değişiklik için nasıl değiştirme modu ayarlanacağı ve geçerli sınırlamalar açıklanmaktadır.
Aynı abonelik kapsamında yeniden abone olma veya plan değiştirme
Google Play Console'da varsayılan bir değiştirme modu belirtebilirsiniz. Bu ayar, mevcut aboneler aynı abonelik için farklı bir temel plan veya fırsat satın aldığında ya da iptalden sonra yeniden abone olduğunda ödeme alınacak zamanı seçmenize olanak tanır. Kullanılabilir seçenekler Hemen öde (CHARGE_FULL_PRICE) ve Bir sonraki fatura tarihinde öde (WITHOUT_PRORATION) şeklindedir. Aynı abonelikteki temel planlar arasında geçiş yaparken yalnızca bu değiştirme modları kullanılabilir.
Örneğin, kullanıcı aboneliği iptal ettikten sonra ancak abonelik sona ermeden önce aynı plan için yeniden kazanma teklifi uyguluyorsanız yeni satın alma işlemini SubscriptionUpdateParams alanında herhangi bir değer belirtmeden normal satın alma işlemi olarak işleyebilirsiniz. Sistem, abonelikte yapılandırdığınız varsayılan değiştirme modunu kullanır ve plan geçişini eski satın alma işleminden yeni satın alma işlemine 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ünlerini değiştiriyorsa (farklı bir abonelik satın alıyorsa) veya herhangi bir nedenle varsayılan değiştirme modunu geçersiz kılmak istiyorsanız satın alma akışı parametrelerinin bir parçası olarak çalışma zamanında orantılı ödeme oranını belirtirsiniz.
Çalışma zamanı satın alma süreci yapılandırmanızın bir parçası olarak SubscriptionProductReplacementParams veya SubscriptionUpdateParams içinde ReplacementMode öğesini doğru şekilde sağlamak için aşağıdaki kısıtlamalara dikkat edin:
- Yükseltme, düşürme veya aynı abonelikle ilgili bir geçişi ön ödemeli plan olarak başlatırken (ön ödemeli plan, otomatik yenilenen plan veya taksitli plan), izin verilen tek değiştirme modu
CHARGE_FULL_PRICE'dir. Başka bir değiştirme modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir. - Aynı abonelikteki planlar arasında, ön ödemeli plandan veya otomatik yenilenen plandan otomatik yenilenen plana geçiş yaparken geçerli orantılı ödeme modları
CHARGE_FULL_PRICEveWITHOUT_PRORATION'dir. 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 ürününde, taksitli temel plandan taksitsiz temel plana geçişe izin verilmez.
- Bir öğenin ödemesini değiştirme sırasında aynı tutmak için
KEEP_EXISTINGiçindeSubscriptionProductReplacementParamsdeğiştirme modu kullanılırken eski ürün kimliği, yeni ürünün ürün kimliğiyle aynı olmalıdır.KEEP_EXISTINGmodu,SubscriptionUpdateParams'da desteklenmez.
Değiştirme örnekleri ve davranışları
Her orantılı ödeme modunun nasıl çalıştığını anlamak için aşağıdaki senaryoyu inceleyin:
Samwise, Country Gardener uygulamasından online içeriklere abone. İçeriğin yalnızca metin içeren 1. Katman sürümüne aylık abone. Bu aboneliğin aylık maliyeti 2 ABD dolarıdır ve her ayın başında yenilenir.
Samwise, 15 Nisan'da 2. Katman aboneliğinin yıllık sürümüne geçmeyi tercih etti. Bu sürümde video güncellemeleri yer alıyor ve yıllık 36 ABD doları tutarında bir ücret alınıyor.
Abonelik yükseltilirken geliştirici, orantılı ödeme modu seçer. Aşağıdaki listede, her bir orantılı ödeme modunun Samwise'ın aboneliğini nasıl etkilediği açıklanmaktadır:
WITH_TIME_PRORATION
Samwise'ın 1. Katman aboneliği hemen sona erer. Bir ayın tamamı (1-30 Nisan) için ödeme yaptığı ancak abonelik döneminin yarısında yükseltme yaptığı için yeni aboneliğine yarım aylık abonelik ücreti (1 TL) uygulanır. Ancak bu yeni aboneliğin yıllık maliyeti 36 ABD doları olduğundan 1 ABD doları tutarındaki kredi bakiyesi yalnızca 10 gün (16-25 Nisan) için yeterlidir. Bu nedenle, 26 Nisan'da yeni abonelik için 36 ABD doları ve sonraki her yılın 26 Nisan'ında 36 ABD doları daha ödemesi gerekir.
Satın alma işlemi başarılı olduğunda ve yeni satın alma işlemini PurchasesUpdatedListener çağrısı kapsamında alabildiğinizde uygulamanızın queryPurchasesAsync() yöntemini çağırmanız gerekir. Arka uçunuz hemen bir
SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi alır.
CHARGE_PRORATED_PRICE
Bu mod, 2. katman aboneliğinin zaman birimi başına fiyatı (36 ABD doları/yıl = 3 ABD doları/ay), 1. katman aboneliğinin zaman birimi başına fiyatından (2 ABD doları/ay) yüksek olduğu için kullanılabilir. Samwise'ın 1. Katman aboneliği hemen sona erer. Bir aylık abonelik ücretinin tamamını ödeyip yalnızca yarısını kullandığı için yeni aboneliğine yarım aylık abonelik ücreti (1 ABD doları) uygulanır. Ancak bu yeni aboneliğin yıllık maliyeti 36 TL olduğundan kalan 15 gün için 1,50 TL ödemesi gerekir. Bu nedenle, yeni aboneliği için 0,50 TL fark ücreti alınır. Samwise, 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ı daha öder.
Satın alma işlemi başarılı olduğunda ve yeni satın alma işlemini PurchasesUpdatedListener çağrısı kapsamında alabildiğinizde uygulamanızın queryPurchasesAsync() yöntemini çağırmanız gerekir. Arka uçunuz hemen bir
SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi alır.
WITHOUT_PRORATION
Samwise'ın 1. Katman aboneliği, ek ücret alınmadan 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ı daha öder.
Satın alma işlemi başarılı olduğunda ve yeni satın alma işlemini PurchasesUpdatedListener çağrısı kapsamında alabildiğinizde uygulamanızın queryPurchasesAsync() yöntemini çağırmanız gerekir. Arka uçunuz hemen bir
SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi alır.
DEFERRED
Samwise'ın 1. Katman aboneliği 30 Nisan'da sona erene kadar devam eder. 1 Mayıs'ta 2. Katman aboneliği geçerli olur ve Samwise'ın yeni abonelik katmanı için 36 ABD doları tutarında ödeme alınır.
Satın alma işlemi başarılı olduğunda ve yeni satın alma işlemini PurchasesUpdatedListener çağrısı kapsamında alabildiğinizde uygulamanızın queryPurchasesAsync() yöntemini çağırmanız gerekir. Arka uçunuz hemen bir
SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi alır. Satın alma işlemini, o noktada diğer yeni satın alma işlemlerini yaptığınız şekilde gerçekleştirmeniz gerekir. Özellikle yeni satın alma işlemini onayladığınızdan emin olun. Yeni aboneliğin startTime değerinin, eski aboneliğin süresi dolduğunda gerçekleşen ve değiştirme işleminin geçerli olduğu anda doldurulduğunu unutmayın. Bu noktada, yeni abonelik planı için bir SUBSCRIPTION_RENEWED RTDN'si alırsınız. ReplacementMode.DEFERRED davranışı hakkında daha fazla bilgiyi Ertelenmiş değiştirme işlemini yönetme başlıklı makalede bulabilirsiniz.
CHARGE_FULL_PRICE
Samwise'ın 1. Katman aboneliği hemen sona erer. 2. Katman aboneliği bugün başlıyor ve 36 ABD doları ödeme alınıyor. Bir aylık ödeme yaptığı ancak yalnızca yarısını kullandığı için yeni aboneliğine yarım aylık abonelik ücreti (1 ABD doları) uygulanır. Bu yeni aboneliğin yıllık maliyeti 36 ABD doları olduğu için abonelik süresine 1/36 yıl (~10 gün) eklenir. Bu nedenle, Samwise'ın bir sonraki ödemesi 36 ABD doları tutarında olacak ve bugünden itibaren 1 yıl 10 gün sonra alınacak. Daha sonraki her yıl 36 ABD doları ücret alınır.
Orantılı ödeme modu seçerken değiştirme önerilerimizi incelediğinizden emin olun.
KEEP_EXISTING
Samwise, Country Gardener uygulamasından online içeriklere abone. Temel içerikler için 1. Plan'a aylık abone. Bu aboneliğin tanıtım fiyatı 3 ay boyunca ayda 2 ABD doları, ardından ayda 4 ABD dolarıdır. Samwise, bu ürünü 1 Nisan'da satın aldı. Country Gardener uygulaması, 2. Planı aylık 3 ABD doları karşılığında ek özel içerik olarak sunar. 15 Nisan'da Samwise, Country Gardener uygulaması aboneliğine Plan 2'yi ekledi ve mevcut Plan 1'i korudu. Samwise'ın ödeme planı aşağıdaki gibidir:
- 15 Nisan'da ödenmesi gereken 2.Plan için 1, 50 ABD doları tutarında kullanımla orantılı fiyat.
- Sonraki 2 ay boyunca aylık 5,00 ABD doları fiyatla hem 1. Plan'ın tanıtım fiyatı hem de 2. Plan'ın normal fiyatı karşılanır.
- Sonrasında ise aylık 7, 00 ABD doları tutarında sabit bir ödeme alınır.
Uygulama içinde abonelik değişikliklerini tetikleme
Uygulamanız, satın alma akışı başlatma ile aynı adımları kullanarak kullanıcılara yükseltme veya düşürme seçeneği sunabilir. Ancak yükseltme veya düşürme işlemi yaparken mevcut abonelik, gelecekteki (yükseltilmiş veya düşürülmüş) abonelik ve kullanılacak değiştirme moduyla ilgili ayrıntıları sağlamanız gerekir.
Değiştirme için SubscriptionProductReplacementParams'i kullanın (tercih edilen yöntem).
Aşağıdaki örnekte, SubscriptionProductReplacementParams kullanılarak aboneliğin nasıl güncelleneceği gösterilmektedir.
BillingFlowParams.ProductDetailsParamsnesnesinde artık ürün düzeyinde değiştirme bilgilerini belirtmek içinsetSubscriptionProductReplacementParams()yöntemi kullanılıyor.SubscriptionProductReplacementParamsiçin iki ayarlayıcı yöntemi vardır:setOldProductId:Bu, mevcutProductDetails.ürünüyle değiştirilecek eski üründür.setReplacementMode:Bu, öğe düzeyinde değiştirme modudur. Modlar esasenSubscriptionUpdateParamsile aynıdır ancak değer eşleme güncellenmiştir.
Mevcut satın alma düzeyi güncelleme parametreleri
BillingFlowParams.setSubscriptionUpdateParams(),setOldPurchaseToken()ile oluşturulmalıdır.setSubscriptionProductReplacementParams(),ProductDetailsParamsiçin çağrıldığındaSubscriptionUpdateParams.setSubscriptionReplacementMode()'nin herhangi bir etkisi olmaz.
Aşağıdaki kod örneğinde, abonelik planının (old_product_1, old_product_2) yerine (product_1, product_2, product_3) olarak nasıl değiştirileceği gösterilmektedir. Bu senaryoda product_1, old_product_1 yerine, product_2 ise old_product_2 yerine geçer ve product_3 hemen aboneliğe eklenir.
Kotlin
val billingClient: BillingClient = ... val replacementModeForBasePlan: Int = ... val replacementModeForAddon: Int = ... val purchaseTokenOfExistingSubscription: String = "your_old_purchase_token" // ProductDetails instances obtained from queryProductDetailsAsync(); val productDetailsParams1 = ProductDetailsParams.newBuilder() .setProductDetails(productDetails1_obj) // Required: Set the ProductDetails object .setSubscriptionProductReplacementParams( SubscriptionProductReplacementParams.newBuilder() .setOldProductId("old_product_id_1") .setReplacementMode(replacementModeForBasePlan) .build() ) .build() val productDetailsParams2 = ProductDetailsParams.newBuilder() .setProductDetails(productDetails2_obj) // Required: Set the ProductDetails object .setSubscriptionProductReplacementParams( SubscriptionProductReplacementParams.newBuilder() .setOldProductId("old_product_id_2") .setReplacementMode(replacementModeForAddon) .build() ) .build() // Example for a third item without replacement params val productDetailsParams3 = ProductDetailsParams.newBuilder() .setProductDetails(productDetails3_obj) // Required: Set the ProductDetails object .build() val newProductDetailsList = listOf( productDetailsParams1, productDetailsParams2, productDetailsParams3 ) val billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) .build() ) .setProductDetailsParamsList(newProductDetailsList) .build() // To launch the billing flow: // billingClient.launchBillingFlow(activity, billingFlowParams)
Java
BillingClient billingClient = …; int replacementModeForBasePlan =…; int replacementModeForAddon =…; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ProductDetailsParams.newBuilder() .setSubscriptionProductReplacementParams( SubscriptionProductReplacementParams.newBuilder() .setOldProductId("old_product_id_1") .setReplacementMode(replacementModeForBasePlan)) .build(); ProductDetailsParams productDetails2 = ProductDetailsParams.newBuilder() .setSubscriptionProductReplacementParams( SubscriptionProductReplacementParams.newBuilder() .setOldProductId("old_product_id_2") .setReplacementMode(replacementModeForAddon)) .build(); ProductDetailsParams productDetails3 = ...; ArrayListnewProductDetailsList = new ArrayList<>(); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails2); newProductDetailsList.add(productDetails3); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) .build()) .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Değiştirme için SubscriptionUpdateParams'i ayarlama (desteği sonlandırıldı)
Aşağıdaki örnekte, SubscriptionUpdateParams kullanılarak aboneliğin nasıl güncelleneceği gösterilmektedir.
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ı orantılı ödeme senaryoları ve her senaryo için önerilerimiz gösterilmektedir:
| Senaryo | Önerilen değiştirme modu | Sonuç |
|---|---|---|
| Daha pahalı bir katmana geçme | CHARGE_PRORATED_PRICE |
Kullanıcı, aynı faturalandırma dönemini korurken erişimi hemen alır. |
| Daha ucuz bir katmana geçme | DEFERRED |
Kullanıcı, daha pahalı katman için ödeme yaptığından bir sonraki fatura tarihine kadar erişime devam eder. |
| Ücretsiz deneme süresindeyken üst sürüme geçme ve denemeyi sürdürme | WITHOUT_PRORATION |
Kullanıcı, deneme süresinin geri kalanı için ek ücret ödemeden daha yüksek bir katmana yükseltir. |
| Ücretsiz deneme süresindeyken üst sürüme geçme: Ücretsiz denemeye erişimi sonlandırma | CHARGE_PRORATED_PRICE |
Kullanıcı yeni katmana hemen erişir ve ücretsiz denemenin kalan değeri aktarılır. Devreden değer, temel plan fiyatlandırmasına göre hesaplanır. |
| Eklentili abonelikteki diğer abonelik öğelerini eklerken veya kaldırırken bazı abonelik öğelerinin ödeme planını değiştirmeme. | KEEP_EXISTING |
Kullanıcı, değişmeyen öğe için eski fiyatı ödemeye devam eder. Yeni öğeler hemen eklenir. Diğer eski öğeler, değiştirme modu belirtilerek değiştirilebilir veya kaldırılabilir. |
Abonelik değişikliği satın alma işlemlerini yönetme
Plan değişiklikleri, tüm şartlar ve amaçlar için yeni satın alma işlemleri olarak kabul edilir. Faturalandırma akışı başarıyla tamamlandıktan sonra bu şekilde işlenmeli ve onaylanmalıdır. Yeni satın alma işlemini uygun şekilde işleme koymanın yanı sıra, değiştirilen satın alma işlemini de kullanımdan kaldırmanız gerekir.
Uygulama içi davranış, yeni satın alma işlemlerinde olduğu gibidir. Uygulamanız, PurchasesUpdatedListener bölümünde yeni satın alma işleminin sonucunu alır ve yeni satın alma işlemi queryPurchasesAsync bölümünde kullanılabilir.
Google Play Developer API, satın alma işlemi mevcut bir satın alma işleminin yerini aldığında abonelik kaynağında linkedPurchaseToken değerini döndürür. Öğe düzeyinde değiştirme ayrıntılarını öğrenmek için yeni satın alma işleminde itemReplacement bölümündeki SubscriptionPurchaseLineItem seçeneğine bakabilirsiniz. Eski jetonun hizmetlerinize erişmek için kullanılmadığından emin olmak üzere linkedPurchaseToken içinde sağlanan jetonu geçersiz kıldığınızdan emin olun. Yükseltme ve alt sürüme geçiş satın alma işlemlerini yönetme hakkında bilgi edinmek için Üst sürüme geçiş, alt sürüme geçiş ve yeniden kaydolma başlıklı makaleyi inceleyin.
Yeni satın alma jetonunu aldığınızda yeni bir satın alma jetonunu doğrulama ile aynı doğrulama sürecini 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 gerçekleştirme
Ertelenmiş değiştirme modu, kullanıcının yeni plana başlamadan önce eski planındaki kalan hakkını kullanmasına olanak tanır.
Yeni bir satın alma işlemi için ReplacementMode.DEFERRED kullandığınızda, queryPurchasesAsync(), satın alma işleminden sonra yeni bir satın alma jetonu döndürür. Bu jeton, ertelenmiş değiştirme işlemi bir sonraki yenileme tarihinde gerçekleşene kadar eski ürünle ilişkilendirilmeye devam eder. Bu tarihten sonra yeni ürün döndürülür.
Geçmişte bu kullanıcı deneyimini, desteği sonlandırılan ProrationMode.DEFERRED ile sağlayabiliyordunuz ancak ProrationMode.DEFERRED, Play Faturalandırma Kitaplığı 6 ile birlikte desteği sonlandı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ı) |
ReplacementMode.DEFERRED |
Satın alma süreci başarıyla tamamlandıktan hemen sonra (uygulama) |
Eski plandan yararlanma hakkı, bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru yetkiyi verdiğinden emin olmak için Yeni satın alma jetonu gösterilmediğinden şu anda işlenemiyor. |
Yeni satın alma jetonu gösterilir. Bu nedenle, değiştirme işleminin ne zaman yapılacağı dikkate alınarak bu noktada işlenmelidir. |
Satın alma süreci başarıyla tamamlandıktan hemen sonra (arka uç) |
SUBSCRIPTION_PURCHASED RTDN, satın alma akışından sonra gönderilmez. Arka uç, yeni satın alma işleminden henüz haberdar değildir. |
Eski product_id ile SUBSCRIPTION_PURCHASED RTDN, yeni satın alma jetonu için satın alma sürecinden hemen sonra gönderilir. Yeni satın alma jetonuyla purchases.subscriptionsv2.get yöntemini çağırmak, satın alma zamanını belirten bir "startTime" değerine sahip ve 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 old satın alma jetonuyla çağrıldığında, abonelik süresi dolmuş olarak görünür (eski planın hakkı, kalan süre için yeni satın alma işlemine aktarılır). |
Değiştirme işleminde: Satın alma akışından (uygulama) sonraki ilk yenileme |
Yeni satın alma jetonu artık gösteriliyor. Bu nedenle işlenmesi gerekir. |
Satın alma süreci başarılı olduğunda yeni satın alma işlemi zaten işlenmiş olmalıdır. Bu nedenle, uygulamanın doğru yetkinin verildiğinden emin olmanın dışında herhangi bir özel işlem yapması gerekmez. |
Değiştirme işleminde: Satın alma akışından (arka uç) sonraki ilk yenileme |
Yeni satın alma işlemi, ilk SUBSCRIPTION_RENEWED RTDN gönderildiğinde işlenebilir ve onaylanabilir. Abonelik kaynağındaki |
Yeni satın alma işlemi, yeni satın alma jetonu için SUBSCRIPTION_PURCHASED RTDN gönderildiğinde işlenip onaylandı ve "startTime" olarak kaydedildi. ReplacementMode.DEFERRED ile ilk yenilemeler, diğer yenilemelerin standart davranışını izler ve bu etkinlik gerçekleştiğinde değiştirmeler için özel bir mantık uygulamanız 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:
|
Kullanımdan kaldırılan ProrationMode.DEFERRED yerine artık ReplacementMode.DEFERRED kullanılmalıdır. Bu mod, kullanım hakkı değişiklikleriyle ilgili olarak aynı davranışı sunar ancak satın alma işlemini diğer yeni satın alma işlemlerinin davranışlarıyla daha tutarlı bir şekilde yönetme olanağı sağlar.
Müşteri yönetimi
Gerçek zamanlı geliştirici bildirimlerini kullanarak, kullanıcıların iptal etmeye karar verdiği anı anında tespit edebilirsiniz. Kullanıcı aboneliğini iptal ettiğinde ancak aboneliğin süresi dolmadan önce, kullanıcıya yeniden abone olmasını isteyen push bildirimleri veya uygulama içi mesajlar gönderebilirsiniz.
Aboneliğini iptal eden kullanıcıları uygulamanızda veya Play Store'da geri kazanmayı deneyebilirsiniz. Aşağıdaki tabloda, çeşitli abonelik senaryoları, ilişkili yeniden kazanma işlemleri ve uygulama gereksinimleri açıklanmaktadır.
| Abonelik 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 olun |
| Kullanıcı, ödeme adımlarını tamamlar | Evet | Hayır | Evet | Evet |
| Kullanıcı aboneliği aynı SKU ile ilişkilendirilmeye devam eder | Kullanıcı aynı veya farklı SKU'ya kaydolabilir | Evet | Kullanıcı aynı veya farklı 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 gerekir | Hayır |
Faturalandırma Kitaplığı 2.0 veya sonraki sürümlerin kullanılmadığı uygulamalar: Hayır Faturalandırma Kitaplığı 2.0 veya daha yeni bir sürümünü kullanan uygulamalar: Evet. Geliştiriciler Console'da bu özelliği devre dışı bırakabilir. |
| Kullanıcıdan ödeme alındığında |
Aynı SKU kullanılıyorsa: geçerli fatura döneminin sonu. Farklı SKU kullanılıyorsa: Orantılı ödeme moduna bağlıdır. |
Geçerli fatura döneminin sonu | Hemen | Hemen |
| Uygulama gerekli | Uygulamanızda yeniden kaydolma kullanıcı arayüzü sağlama |
Abonelik durumundaki değişikliği algılama Play Store'a derin bağlantı |
Uygulamanızda yeniden kaydolma kullanıcı arayüzü sağlama | Uygulama dışı satın alma işlemlerini yönetme |
Abonelik sona ermeden önce (uygulama içi)
İptal edilmiş ancak henüz süresi dolmamış aboneliklerde, yeni aboneler için geçerli olan uygulama içi ürün satın alma akışını uygulayarak abonelerin aboneliklerini uygulamanızda geri yüklemelerine izin verebilirsiniz. Kullanıcı arayüzünüzde kullanıcının mevcut bir aboneliği olduğunu gösterin. Örneğin, kullanıcının mevcut son kullanma tarihini ve yinelenen fiyatını Yeniden etkinleştir düğmesiyle birlikte göstermek isteyebilirsiniz.
Çoğu zaman, kullanıcıya zaten abone olduğu fiyatı ve SKU'yu aşağıdaki şekilde sunmak isteyeceksiniz:
- 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 dolmuş olarak işaretlenir.
- Örneğin, Akhilleus, Örnek Müzik Uygulaması'na abone ve aboneliğin süresi 1 Ağustos'ta dolacak. 10 Temmuz'da aylık aboneliğe aynı aylık fiyatla yeniden abone oluyor. Yeni abonelik, kalan krediyle orantılı olarak ücretlendirilir, hemen etkinleştirilir ve 1 Ağustos'ta yenilenmeye devam eder.
Farklı bir fiyat (ör. yeni bir ücretsiz deneme veya geri kazanma indirimi) sunmak isterseniz kullanıcıya farklı bir SKU sunabilirsiniz:
- Değiştirme modunu
WITHOUT_PRORATIONkullanarak farklı bir SKU ile üst veya alt sürüme geçiş başlatın. - Yeni abonelik, eski aboneliğin yerini alır ve aynı son kullanma tarihinde yenilenir. Kullanıcıdan, orijinal son kullanma tarihinde yeni SKU'nun fiyatı (tanıtım fiyatları dahil) tahsil edilir. Eski abonelik, kimliği belirsizleştirilmiş bir hesap kimliği kullanılarak oluşturulduysa yükseltme ve düşürme işlemleri için aynı kimliğin
BillingFlowParams'ye iletilmesi gerekir. - Örneğin, Akhilleus, Örnek Müzik Uygulaması'na abone ve aboneliğin süresi 1 Ağustos'ta dolacak. 10 Temmuz'da tanıtım fiyatlı bir yıllık aboneliğe yeniden abone oluyor. 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'da 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ı kısıtlar.
Satın alma jetonunu aldığınızda satın alma işlemini yeni bir abonelikle aynı şekilde işleyin. Ayrıca, Google Play Developer API, abonelik kaynağında linkedPurchaseToken döndürür. Eski jetonun hizmetlerinize erişmek için kullanılmadığından emin olmak üzere linkedPurchaseToken içinde sağlanan jetonu geçersiz kıldığınızdan emin olun.
Abonelik süresi dolmadan önce (Play Store'da)
Abonelik iptal edilmiş ancak hâlâ etkin durumdayken kullanıcılar, Google Play abonelik merkezinde Yeniden abone ol'u (eski adıyla Geri yükle) tıklayarak aboneliği geri yükleyebilir. Bu durumda aynı abonelik ve satın alma jetonu korunur.
Abonelikleri geri yükleme hakkında daha fazla bilgi için Geri yüklemeler başlıklı makaleyi inceleyin.
Abonelik süresi dolduktan sonra - uygulama içi
Yeni aboneler için geçerli olan uygulama içi ürün satın alma akışını uygulayarak süresi dolmuş abonelerin uygulamanızda yeniden abone olmalarına izin verebilirsiniz. Aşağıdakileri göz önünde bulundurun:
- Kullanıcılara indirim sunmak için aboneliğinizde özel fiyatlandırma uygulanan bir ürün kimliği (geri kazanma SKU'su olarak da bilinir) sunabilirsiniz. Teklifi uygulamanızda sunabilir veya kullanıcıyı tekliften uygulamanın dışında (ör. e-posta yoluyla) haberdar edebilirsiniz.
- Kullanıcıları geri kazanmaya yönelik abonelik başlatmak için Google Play Faturalandırma Kitaplığı'nı kullanarak Android uygulamanızda satın alma akışını başlatın. Bu işlem, yeni abonelikle 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'da 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ı kısıtlar.
- Kullanıcı aynı SKU'ya yeniden abone olursa ücretsiz deneme veya tanıtım fiyatı için uygunluk koşullarını karşılamaz. Kullanıcı arayüzünüzün bunu yansıttığından emin olun.
Satın alma jetonunu aldığınızda satın alma işlemini yeni bir abonelikle aynı şekilde işleyin. Abonelik kaynağında 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 aynı SKU'ya aboneliklerini, süresi dolduktan sonraki bir yıl içinde yeniden başlatabilirler. Bu işlem sonucunda yeni bir abonelik ve satın alma jetonu oluşturulur.
Yeniden abone olma, uygulama dışı satın alma işlemi olarak kabul edilir. Bu nedenle, arka uçtan uygun şekilde onaylamak için en iyi uygulamaları izlediğinizden emin olun.
Aboneliğinizi tanıtma
Belirli kullanıcılara mevcut bir aboneliğin ücretsiz deneme süresini uzatmak için promosyon kodları oluşturabilirsiniz. Daha fazla bilgi edinmek için Promosyon kodları başlıklı makaleyi inceleyin.
Google Play, ücretsiz denemelerde ücretsiz deneme başlatılmadan önce kullanıcının geçerli bir ödeme yöntemi olduğunu doğrular. Bazı kullanıcılar bu doğrulamayı ödeme yöntemlerinde bekletme veya ödeme olarak görebilir. Bu provizyon veya ödeme geçicidir ve daha sonra geri alınır ya da iade edilir.
Deneme süresi sona erdikten sonra kullanıcının ödeme yönteminden tam abonelik tutarı alınır.
Kullanıcının ücretsiz deneme süresinin herhangi bir noktasında aboneliği iptal etmesi halinde abonelik, denemenin sonuna kadar etkin kalır ve ücretsiz deneme süresi sona erdiğinde kullanıcıdan ücret alınmaz.
İptal etme veya geri alma
Aboneliği iptal etmek veya geri almak için Google Play Developer API'yi kullanabilirsiniz. Bu işlev Google Play Console'da da kullanılabilir.
İptal: Kullanıcılar, Google Play'de abonelikleri iptal edebilir. Ayrıca, uygulamanızda veya web sitenizde kullanıcıların aboneliği iptal etmesine olanak tanıyan bir seçenek de sunabilirsiniz. Uygulamanız, bu iptalleri İptaller bölümünde açıklandığı şekilde işlemelidir.
İptal etme: İptal ettiğinizde kullanıcı, aboneliğe erişimi hemen kaybeder. Örneğin, kullanıcının ürününüze erişmesini engelleyen teknik bir hata oluştuysa ve kullanıcı ürünü kullanmaya devam etmek istemiyorsa bu seçenek kullanılabilir. Uygulamanız, bu iptalleri İptaller bölümünde açıklandığı şekilde işlemelidir.
Aşağıdaki tabloda iptal etme ve geri alma arasındaki farklar gösterilmektedir.
| Yenilemeyi durdurma | Erişimi iptal etme | |
| İptal | Evet | Hayır |
| İptal et | Evet | Evet |
Bir abone için faturalandırmayı erteleme
Google Play Developer API'den Purchases.subscriptions:defer kullanarak otomatik yenileme özelliğini etkinleştirmiş bir abonenin bir sonraki faturalandırma tarihini öne alabilirsiniz. Erteleme süresi boyunca kullanıcı, içeriğinize tam erişimle abone olur ancak kendisinden ödeme alınmaz. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.
Ön ödemeli planlarda, son kullanma süresini ertelemek için faturalandırmayı erteleme API'sini kullanabilirsiniz.
Ertelenmiş faturalandırma, aşağıdakileri yapmanıza olanak tanır:
- Kullanıcılara özel teklif kapsamında ücretsiz erişim verin. Örneğin, film satın alan kullanıcılara bir hafta ücretsiz erişim verin.
- Müşterilere iyi niyetinizin göstergesi olarak ücretsiz erişim hakkı tanıyabilirsiniz.
Faturalandırma, API çağrısı başına en az bir gün, en fazla bir yıl ertelenebilir. Faturalandırmayı daha da ertelemek için yeni fatura tarihi gelmeden önce API'yi tekrar çağırabilirsiniz.
Örneğin, Deniz, Fishing Quarterly uygulaması için aylık online içerik aboneliğine sahiptir. Normalde her ayın ilk günü 1,25 GBP faturalandırılır. Mart ayında, uygulama yayıncısı için bir online ankete katıldı. Yayıncı, bir sonraki ödemeyi 15 Mayıs'a (önceden planlanan faturalandırma tarihi olan 1 Nisan'dan altı hafta sonra) erteleyerek aboneyi altı haftalık ücretsiz abonelikle ödüllendiriyor.
- Darcy'den Nisan ayı veya Mayıs ayının başı için ödeme alınmaz ve içeriğe erişimi devam eder. 15 Mayıs'ta, o ay için normal 1,25 sterlinlik abonelik ücreti alınır. Bir sonraki yenileme tarihi 15 Haziran olarak güncellendi.
Erteleme işlemi yaparken, fatura tarihinin değiştiğini bildirmek için kullanıcıyı e-postayla veya uygulama içinde bilgilendirebilirsiniz.
Reddedilen ödemeleri işleme
Abonelik yenileme ile ilgili ödeme sorunları varsa Google, aboneliği iptal etmeden önce bir süre boyunca düzenli aralıklarla yenilemeyi dener. Kurtarma döneminde verilen ek süreyi takiben hesap askıya alınabilir. Google, bu süre zarfında kullanıcıya ödeme yöntemini güncellemesini isteyen e-postalar ve bildirimler gönderir.
Ödeme reddedildiğinde, yapılandırılmışsa abonelik ek süreye girer. Ek süre boyunca kullanıcının abonelik haklarına erişmeye devam etmesini sağlamalısınız.
Ek süre sona erdiğinde abonelik hesabı askıya alma dönemine girer. Hesap askıya alındığı sırada kullanıcının abonelikten yararlanma haklarına erişemediğinden emin olmalısınız.
Google Play Console'da her otomatik yenilenen temel planın ek süresinin ve hesap askıya alma süresinin uzunluğunu belirleyebilirsiniz. Uzunluğun varsayılan değerden daha kısa belirlenmesi, reddedilen ödeme durumlarında kurtarılan abonelik sayısını azaltabilir.
Ödeme reddedildiğinde aboneliğin kurtarılma olasılığını en üst düzeye çıkarmak için kullanıcınızı ödeme sorunu hakkında bilgilendirebilir ve sorunu düzeltmesini isteyebilirsiniz.
Bu işlemi, ek süre ve hesabı bekletme bölümlerinde açıklandığı gibi kendiniz yapabilir veya Google'ın uygulamanızdaki kullanıcılara 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, ödeme süresi ve hesap askıya alma döneminde kullanıcılara günde bir kez mesajlaşma gösterir ve 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 kurtarırsa satın alma jetonuyla birlikte SUBSCRIPTION_STATUS_UPDATED yanıt kodunu alırsınız. Ardından, Google Play Developer API'yi çağırmak ve uygulamanızdaki abonelik durumunu yenilemek için bu satın alma jetonunu kullanmanız gerekir.
Uygulama içi mesajlaşmayı entegre etme
Kullanıcıya uygulama içi mesajlaşmayı göstermek için
BillingClient.showInAppMessages() kullanın.
Aşağıda, uygulama içi mesajlaşma akışını tetikleme örneği verilmiştir:
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. } } });
Beklemedeki abonelik işlemlerini yönetme
Beklemede olan işlemler ilk satın alma, yükleme, yükseltme veya düşürme işlemlerinde gerçekleşebilir. Abonelik satın alma işlemi, SUBSCRIPTION_STATE_ACTIVE durumuna geçmeden önce SUBSCRIPTION_STATE_PENDING durumuyla başlar. İşlemin süresi dolmuşsa veya kullanıcı tarafından iptal edilmişse SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED'ya gider. Kullanıcının hakkını yalnızca işlem tamamlandıktan sonra güncellemeniz gerekir.
Bekleyen işlemleri olan ilk satın alma işleminde abonelik durumu değişikliği kolayca yapılabilir. Kullanıcı bekleyen bir işlem başlattığında uygulamanız Purchase durumunda PENDING alır. İşlem tamamlandığında uygulamanız, durumu PURCHASED olarak güncellenmiş Purchase değerini tekrar alır. RTDN istemcinize SUBSCRIPTION_PURCHASED türünde bir SubscriptionNotification mesajı gönderilir. Satın alma işlemini doğrulama, kullanıcıya içeriğe erişim izni verme ve satın alma işlemini onaylama için normal süreci takip edin. İşlem sona ererse veya iptal edilirse RTDN istemcinize türü SubscriptionNotification olan bir SUBSCRIPTION_PENDING_PURCHASE_CANCELED mesajı gönderilir. Bu gibi durumlarda kullanıcı, içeriğe hiçbir zaman erişememiş olmalıdır.
Bekleyen işlemleri kullanarak yükleme yapma, üst sürüme geçme veya alt sürüme geçme, hem eski hem de yeni aboneliklerde durum değişiklikleri içerir. Kullanıcı, bekleyen bir üst pakete geçme veya alt pakete geçme işlemi başlattığında uygulamanız, PendingPurchaseUpdate nesnesiyle eski abonelik için Purchase alır. Bu durumda kullanıcı, eski aboneliğe sahip olmaya devam eder ve henüz yeni aboneliği almamıştır. getProducts() ve getPurchaseToken(), PendingPurchaseUpdate nesnesinde çağrıldığında yeni aboneliğin ürün kimlikleri ve satın alma jetonu döndürülür. İşlem tamamlandığında uygulamanız, yeni abonelik için üst düzey satın alma jetonu ayarlanmış ve durumu PURCHASED olarak belirlenmiş bir Purchase alır. RTDN istemcinize, türü SUBSCRIPTION_PURCHASED olan bir SubscriptionNotification mesajı gönderilir. Yalnızca bu durumda eski satın alma jetonunu yeni satın alma jetonuyla değiştirmeniz ve kullanıcının içeriğe erişimini güncellemeniz gerekir. İşlemin süresi dolarsa veya işlem iptal edilirse RTDN istemcinize türü SUBSCRIPTION_PENDING_PURCHASE_CANCELED olan bir SubscriptionNotification mesajı gönderilir. Bu gibi durumlarda kullanıcı, eski aboneliğin içeriğine erişmeye devam edebilir.