Abonelikler hakkında

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 de 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 bakı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 birden fazla farklı hak bir arada sunulabilir. Örneğin, hem müzik akışı hizmetine hem de video aboneliği. Eklenti içeren aboneliklerle ilgili özel 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 ilk satın alma işleminde olduğu gibi başlatın. Satın alma işleminin yükleme olduğunu belirtmeniz gerekmez.

Ön ödemeli plan yüklemelerinde 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 hakları, ekleme işleminde belirtilen süre kadar uzatılır.

Ek yapıldıktan sonra, Purchase sonuç nesnesindeki aşağıdaki alanlar, en son ek 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 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 aldıktan sonra onaylamanız gerekir. Hem ilk satın alma işlemi hem de tüm yüklemeler onaylanmalıdır. 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 onaylamak önemlidir.

Bir hafta veya daha uzun süreli ön ödemeli planlar üç gün içinde onaylanmalıdır.

Süresi bir haftadan kısa olan ö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ü 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:

  • Ülkelerdeki kullanım durumu: Taksitli abonelik özelliği yalnızca Brezilya, Fransa, İspanya ve İtalya'da kullanılabilir (en son kullanım durumu için Console'u kontrol edin).
  • Fiyatı ayarlama: Console'da taksitli aboneliğin fiyatı belirlenirken fiyat, aylık ödeme tutarını ifade eder. Bu değer, belirlenen taahhüt dönemiyle 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 sonraki ilk yenileme, ilk taahhüt döneminin tamamlanmasıyla 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 çalışır.
  • Fatura dönemi: Taksitli abonelikler bağlamında bu, temel planda belirtildiği şekilde, tek tek ö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 ödeme temel planından aynı abonelik ürününün taksitli ödeme içermeyen temel planına geçişe izin verilmez.
  • Gerçek zamanlı geliştirici bildirimleri (RTDN'ler): Bir RTDN, ödeme dönemi boyunca ödeme yapılmaya devam edildiği durumlarda kullanıcı tarafından başlatılan iptal işleminden hemen sonra gönderilir.SUBSCRIPTION_CANCELLATION_SCHEDULED İ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 sonunda SUBSCRIPTION_CANCELED ve SUBSCRIPTION_EXPIRED RTDN'leri gönderilir.

  • Ödemeler / Gelir gerçekleştirme: 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: Bir kullanıcı taksitli abonelik ödemelerini yapmazsa Google veya Geliştirici, bu tür ödenmeyen veya bekleyen ödemeleri kullanıcıdan tahsil etmeye çalışmaz. Ancak Google, 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 deneyebilir. Google, ödenmemiş kalan taksit ödemeleri konusunda Geliştirici'ye karşı sorumlu olmayacaktır.

  • Play Faturalandırma Kitaplığı'nın kullanılabilirliği: installmentDetails alanı yalnızca PBL 7 veya sonraki sürümlerde kullanılabilir. PBL 5 ve sonraki sürümlerde, taksitli abonelik queryProductDetails() kullanılarak iade edilir ancak abonelikte, planın taahhüt edilen ödeme sayısı gibi ayrıntılı taksit bilgileri yer almaz.

Kullanıcıların abonelik yönetmesine izin vermek 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ı bulunmalı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.

Kullanıcıları, 1. ve 2. şekillerde gösterildiği gibi 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
Play Store abonelikleri ekranında, kullanıcının Google Play üzerinden faturalandırılan tüm aboneliklerinin durumu gösterilir.
1. Şekil. Play Store abonelikleri ekranında, kullanıcının Google Play üzerinden faturalandırılan tüm aboneliklerinin durumu gösterilir.


Ek ayrıntıları görmek için bir aboneliğe dokunun.
Şekil 2. Ek ayrıntıları görmek için bir aboneliğe dokunun.

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.

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" bölümlerini 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 katmanlar arasında geçiş yapmasına izin verebilirsiniz.
  • Kullanıcıların mevcut fatura dönemlerini değiştirmelerine (ör. aylık plandan yıllık plana geçmelerine) 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şte 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. Tekliflere 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:

Bu uygulamanın üç abonelik katmanı vardır.
3.şekil Bu uygulamanın üç abonelik katmanı vardır.

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)

WITH_TIME_PRORATION

Abonelik 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 plana geçiş yaptığınızda hemen ek ödeme yapmanız gerekmez.

0

CHARGE_PRORATED_PRICE

Abonelik hemen yükseltilir ve faturalandırma dönemi aynı kalır. Kalan dönem için fiyat farkı kullanıcıdan tahsil edilir.

Not: Bu seçenek yalnızca birim zaman başına fiyatın arttığı abonelik yükseltmeleri için kullanılabilir.

Faturalandırma tarihini değiştirmeden daha pahalı bir katmana yükseltme

1

CHARGE_FULL_PRICE

Abonelik hemen üst veya alt sürüme geçirilir 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ı veya 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)

WITHOUT_PRORATION

Abonelik hemen yükseltilir veya düşürülür ve abonelik yenilendiğinde yeni fiyat üzerinden ücretlendirilir. Faturalandırma dönemi aynı kalır.

Kalan ücretsiz dönemi koruyarak daha yüksek bir abonelik katmanına geçebilirsiniz.

0

DEFERRED

Abonelik yalnızca 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:

  • Otomatik yenileme devre dışı bırakılmış ve geçerlilik süresi geçerli faturalandırma döneminin sonuna ayarlanmış mevcut öğe.
  • Mevcut öğenin süresi dolduktan sonra başlayan yeni hak. İsterseniz kullanıcıların ek değişiklikler yapmasına izin verebilirsiniz. Örneğin, kullanıcılar orijinal plana geri dönebilir veya yeni bir ertelenmiş plan değişikliği başlatabilir.

Not: Taksitli aboneliklerde plan değişikliği, bir sonraki ödeme tarihinin başında gerçekleşir.

Daha ucuz bir katmana geçin.

1

Yükseltme veya düşürme 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, aynı abonelik için farklı bir temel plan veya fırsat satın alan ya da iptalden sonra yeniden abone olan mevcut abonelerden ö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ı geçerlidir.

Ö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 varsayılan değiştirme modunu herhangi bir nedenle 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 SubscriptionUpdateParams değerini doğru şekilde sağlamak için aşağıdaki kısıtlamalara dikkat edin:

  • Abonelik yükseltme, abonelik düşürme veya aynı abonelikler arasında geçiş yapma işlemleri sırasında ön ödemeli plan, otomatik yenilenen plan ya da taksitli plan yerine ön ödemeli plan kullanılıyorsa izin verilen tek değiştirme modu CHARGE_FULL_PRICE olur. 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_PRICE ve WITHOUT_PRORATION'dür. Başka bir oranlı ödeme 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.

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ının online içeriklerine 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ı ve her ayın ilk günü yenileniyor.

Samwise, 15 Nisan'da video güncellemelerini içeren ve yıllık 36 ABD doları olan 2. Katman aboneliğinin yıllık sürümüne geçmeyi tercih etti.

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 TL olduğundan 1 TL kredi bakiyesi yalnızca 10 gün (16-25 Nisan) için yeterlidir. Bu nedenle, 26 Nisan'da yeni abonelik için 36 TL ve sonraki her yılın 26 Nisan'ında 36 TL daha ö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ının bir parçası olarak 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/yıl = $3/ay), 1. katman aboneliğinin zaman birimi başına fiyatından ($2/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 queryPurchasesAsync() çağrısının bir parçası olarak alabildiğinizde uygulamanızın PurchasesUpdatedListener yöntemini çağırmalısınız. 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 queryPurchasesAsync() çağrısının bir parçası olarak alabildiğinizde uygulamanızın PurchasesUpdatedListener yöntemini çağırmalısınız. 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'dan 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 queryPurchasesAsync() çağrısının bir parçası olarak alabildiğinizde uygulamanızın PurchasesUpdatedListener yöntemini çağırmalısınız. Arka uçunuz hemen 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 yapmalısınız. Ö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 değiştirme işlemiyle birlikte doldurulduğunu unutmayın. Bu noktada, yeni abonelik planı için SUBSCRIPTION_RENEWED RTDN alırsınız. ReplacementMode.DEFERRED davranışı hakkında daha fazla bilgiyi Ertelenen değiştirme işlemini gerçekleştirme 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. 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 TL tutarında olacak ve bugünden itibaren 1 yıl 10 gün sonra alınacak. Sonrasında, her yıl 36 ABD doları ücret alınır.

Orantılı ödeme modu seçerken değiştirme önerilerimizi incelediğinizden emin olun.

Uygulama içinde abonelik değişikliklerini tetikleme

Uygulamanız, satın alma akışı başlatma işleminde kullanılan adımları uygulayarak kullanıcılara yükseltme veya düşürme seçeneği sunabilir. Ancak plan yükseltirken veya düşürürken aşağıdaki örnekte gösterildiği gibi 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:

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çiş DEFERRED Kullanıcı, daha pahalı katman için ödeme yaptığından bir sonraki fatura tarihine kadar erişmeye 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 plana yükseltir.
Ücretsiz deneme süresinde plan yükseltme: Ü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.

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 ve faturalandırma akışı başarıyla tamamlandıktan sonra bu şekilde işlenip onaylanmalıdır. Yeni satın alma işlemini uygun şekilde işleme almanı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 içinde yeni satın alma işleminin sonucunu alır ve yeni satın alma işlemi queryPurchasesAsync içinde kullanılabilir.

Google Play Developer API, bir 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. Eski jetonun hizmetlerinize erişmek için kullanılmaması amacıyla 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 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 hakları kullanmasına olanak tanır.

Yeni bir satın alma işleminde 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 kullanımdan kaldırılan ProrationMode.DEFERRED ile sağlayabiliyordunuz ancak ProrationMode.DEFERRED, Play Faturalandırma Kitaplığı 6 ile birlikte 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ı)

ReplacementMode.DEFERRED

Satın alma süreci başarıyla tamamlandıktan hemen sonra (uygulama)

PurchasesUpdatedListener, satın alma işleminden sonra yükseltme veya eski sürüme geçirme işleminin başarılı olup olmadığına dair bir durumla birlikte çağrılır.

Eski planın hakları, bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru yetkiyi verdiğinden emin olmak için queryPurchasesAsync(), değiştirme işlemi gerçekleşene kadar orijinal satın alma jetonu ve orijinal yetkiyle birlikte bir satın alma nesnesi döndürür.

Yeni satın alma jetonu gösterilmediğinden şu anda işlenemiyor.

PurchasesUpdatedListener, satın alma işleminden sonra yükseltme veya eski sürüme geçirme işleminin başarılı olup olmadığına dair bir durumla birlikte çağrılır.

queryPurchasesAsync(), yeni satın alma jetonu ve bununla ilişkili orijinal hak ile birlikte satın alma işlemini hemen iade eder.

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 yetkilendirmeyi temsil eden ve gelecekte bir "expiryTime" değeri olan. Eski kazanılmış hak yenilenmez ve yeni kazanılmış hakkın ürününü içeren bir DeferredItemReplacement'a sahiptir. Bu, eski hak süresi dolduğunda yerine yenisinin atanacağını gösterir.
  • Yeni satın alınan hakkı temsil eden bir öğe. "expiryTime" için değer ayarlanmamış.

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, 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 sonraki ilk yenileme (uygulama)

queryPurchasesAsync(), yeni satın alma jetonu ve yetkilendirmeyle yeni bir Purchase nesnesi döndürür.

Yeni satın alma jetonu artık gösteriliyor. Bu nedenle işlenmesi gerekir.

queryPurchasesAsync(), yeni satın alma jetonu ve bununla ilişkili yeni hak ile birlikte satın alma işlemini hemen döndürür.

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'si gönderildiğinde işlenip onaylanabilir.

Abonelik kaynağındaki linkedPurchaseToken, abonelik arka ucunuzda hangi kullanıcının (varsa) yeni hakla güncellenmesi gerektiğini belirlemek için kullanılabilir.

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:

  • Geçmişte bir "expiryTime" değerine sahip olan ve DeferredItemReplacement için ayarlanmış bir değeri olmayan eski hak.
  • Gelecekteki bir "expiryTime" ile yeni hakları temsil eden ve auto_renewing_enabled işareti etkinleştirilmiş bir öğe.

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. Bir kullanıcı aboneliğini iptal ettiğinde ancak aboneliğinin 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 bir kullanıcıyı 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 koşulları 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 aynı 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 geçerlilik bitiş tarihini ve yinelenen fiyatını Yeniden etkinleştir düğmesiyle birlikte göstermek isteyebilirsiniz.

Çoğu zaman, kullanıcıya daha önce 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 yeniden kazanma indirimi) sunmak isterseniz kullanıcıya farklı bir SKU sunabilirsiniz:

  • Değiştirme modunu WITHOUT_PRORATION kullanarak farklı bir SKU ile üst veya alt plana 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ı kimlik BillingFlowParams parametresine iletilmelidir.
  • Ö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ı 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 abonelikte olduğu gibi işleyin. Ayrıca, Google Play Developer API, abonelik kaynağında linkedPurchaseToken döndürür. Eski jetonun hizmetlerinize erişmek için kullanılmaması amacıyla 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 işlem, aynı aboneliği ve satın alma jetonunu korur.

Google Play Store uygulamasındaki abonelikler bölümünde, yeniden abone ol düğmesiyle birlikte iptal edilmiş bir abonelik gösteriliyor.
8. şekil. Google Play Store uygulamasındaki Hesap > Abonelikler bölümünde, iptal edilmiş bir abonelik ve Yeniden abone ol düğmesi gösteriliyor.

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 uyguladığınız uygulama içi ürün satın alma akışını kullanarak 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ı teklif hakkında uygulama dışında (ör. e-posta yoluyla) bilgilendirebilirsiniz.
  • 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 uygun olmaz. 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 abonelikte olduğu gibi 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 aboneliklerinin süresi dolduktan sonraki bir yıl içinde aynı SKU'ya yeniden abone olabilirler. Bu işlem sonucunda yeni bir abonelik ve satın alma jetonu oluşturulur.

Google Play Store uygulamasındaki abonelikler bölümünde, yeniden abone olma ve kaldırma düğmelerinin bulunduğu iptal edilmiş ve süresi dolmuş bir abonelik gösteriliyor.
9.şekil Google Play Store uygulamasındaki Hesap > Abonelikler bölümünde, iptal edilmiş ve süresi dolmuş bir abonelik ile Yeniden abone ol ve Kaldır düğmeleri gösteriliyor.

Yeniden abone olma işlemi, uygulama dışı satın alma işlemi olarak kabul edilir. Bu nedenle, uygulamanızın dışında yapılan satın alma işlemlerini yönetmeyle ilgili en iyi uygulamaları takip ettiğinizden emin olun.

Aboneliğinizi tanıtma

Belirli kullanıcılara mevcut bir abonelikte daha uzun ücretsiz deneme süresi sunmak 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 bekletme veya ödeme geçicidir ve daha sonra geri alınır ya da geri ödenir.

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 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 varsa ve kullanıcı ürünü kullanmaya devam etmek istemiyorsa bu seçenek kullanılabilir. Uygulamanız, bu iptalleri Geri Alma bölümünde açıklandığı şekilde işlemelidir.

Aşağıdaki tabloda iptal etme ve geri alma arasındaki farklar gösterilmektedir.

Yenilemeyi durdurur Erişimi iptal etme
İptal Evet Hayır
İptal et Evet Evet

Bir abone için faturalandırmayı erteleme

Google Play Developer API'deki Purchases.subscriptions:defer yöntemini kullanarak otomatik yenilenen aboneliklerde bir sonraki faturalandırma tarihini öne çekebilirsiniz. Erteleme süresi boyunca kullanıcı, içeriğinize tam erişimle abone olur ancak ödeme yapmaz. 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 ve 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ında online içeriklere aylık abone. Normalde her ayın başında 1,25 GBP faturalandırılıyor. Mart ayında, uygulama yayıncısı için bir online ankete katıldı. Yayıncı, bir sonraki ödemeyi 1 Nisan olan daha önce planlanmış faturalandırma tarihinden altı hafta sonraki 15 Mayıs'a erteleyerek aboneyi altı hafta ücretsiz üyelikle ödüllendirir. Darcy'den Nisan ayı veya Mayıs ayının başı için ödeme alınmaz ve içeriğe erişmeye devam eder. 15 Mayıs'ta, o aya ait normal 1,25 £ abonelik ücreti alınır. Bir sonraki yenileme tarihi 15 Haziran olarak belirlendi.

Ötelediğinizde, fatura tarihinin değiştiğini kullanıcıya e-posta veya uygulama içi bildirimle bildirmek isteyebilirsiniz.

Reddedilen ödemeleri işleme

Abonelik yenileme ile ilgili ödeme sorunları varsa Google, iptal etmeden önce bir süre boyunca aboneliği yenilemeyi düzenli aralıklarla dener. Kurtarma döneminde varsayılan olarak verilen ek süreyi takiben hesap askıya alınır. 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 abonelikten yararlanma haklarına erişmeye devam etmesini sağlamalısınız.

Ek süre sona erdiğinde abonelikte hesap askıya alınır. 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 hesabı askıya alma süresinin uzunluğunu belirleyebilirsiniz. Uzunlukların varsayılan değerlerden 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.

Bunu, ek süre ve hesabı askıya alma 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.

Kullanıcıya ödemesini düzeltmesini bildiren snackbar
20. şekil. Kullanıcıya ödemesini düzeltmesini bildiren snackbar.

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 kodunu alırsınız. Ardından, Google Play Geliştirici API'sini ç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.

Uygulama içi mesajlaşma akışını tetikleme örneğini 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.
                }
            }
        });

Beklemedeki abonelik işlemlerini yönetme

Beklemede olan işlemler, ilk satın alma, yükleme, yükseltme veya sürüm 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. SUBSCRIPTION_PURCHASED türünde bir SubscriptionNotification mesajı, RTDN istemcinize 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 uygulanan normal süreci takip edin. İşlem sona ererse veya iptal edilirse RTDN istemcinize SubscriptionNotification türünde bir SUBSCRIPTION_PENDING_PURCHASE_CANCELED mesajı gönderilir. Bu gibi durumlarda kullanıcı, içeriğe hiçbir zaman erişmemelidir.

Bekleyen işlemleri kullanarak yükleme yapma, üst sürüme geçme veya alt sürüme geçme işlemleri hem eski hem de yeni aboneliklerde durum değişiklikleri içerir. Kullanıcı, bekleyen bir üst pakete geçme, yükseltme veya düşürme işlemi başlattığında uygulamanız, PendingPurchaseUpdate nesnesiyle eski abonelik için bir Purchase alır. Bu durumda kullanıcı, eski aboneliğin sahibi olmaya devam eder ve henüz yeni aboneliği almamıştır. getProducts() ve getPurchaseToken() yöntemlerini PendingPurchaseUpdate nesnesinde çağırmak, yeni aboneliğin ürün kimliklerini ve satın alma jetonunu döndürü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ü SubscriptionNotification olan bir SUBSCRIPTION_PURCHASED 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.