Abonelikler hakkında

Bu konuda, yenileme ve süre sonu gibi abonelik yaşam döngüsü etkinliklerinin nasıl ele alınacağı açıklanmaktadır. Promosyon sunma ve kullanıcılarınızın kendi aboneliklerini yönetmelerine izin verme gibi ek abonelik özellikleri de açıklanmaktadır.

Uygulamanız için abonelik ürünlerini yapılandırmadıysanız Ürünlerinizi oluşturma ve yapılandırma başlıklı makaleyi inceleyin.

Aboneliklere genel bakış

Abonelik, kullanıcıların belirli bir dönem boyunca erişebileceği avantajları temsil eder. Örneğin, bir abonelik kullanıcının müzik akış hizmetine erişmesine olanak tanıyabilir.

Farklı avantaj gruplarını veya tek bir avantaj grubunun farklı katmanlarını ("Gümüş" ve "Altın" katmanları gibi) temsil etmek için aynı uygulamada birden fazla aboneliğiniz olabilir.

Temel planlar ve fırsatlarla 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, zaten abone olan kullanıcılar için bir yükseltme teklifi oluşturabilirsiniz.

Abonelik ürünlerine, temel planlara ve tekliflere genel bakış için Play Console Yardım Merkezi'ndeki dokümanları inceleyin.

Ön ödemeli plan entegrasyonu

Ön ödemeli planlar, geçerlilik süresi sona erdiğinde otomatik olarak yeniden etkinleştirilmez. Abonelik hakkını kesintisiz olarak uzatmak isteyen kullanıcının, aynı abonelik için ön ödemeli plana para eklemesi gerekir.

Para ekleme işlemleri için, orijinal satın alma işleminde yaptığınız gibi faturalandırma akışını başlatın. Bir satın alma işleminin ek ödeme olduğunu belirtmeniz gerekmez.

Ön ödemeli plana yapılan eklemeler her zaman CHARGE_FULL_PRICEyerine koyma modunu kullanır ve bu modu açıkça ayarlamanıza gerek yoktur. Kullanıcıdan bir fatura döneminin tamamı için hemen ödeme alınır ve kullanıcının hakkı, ekleme işleminde belirtilen süre kadar uzatılır.

Para ekleme işleminden sonra, Purchase sonuç nesnesinde aşağıdaki alanlar en son para ekleme satın alımını yansıtacak şekilde güncellenir:

  • Sipariş kimliği
  • Satın alma zamanı
  • İmza
  • Satın alma jetonu
  • Kabul edildi

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şleminin hem de tüm para ekleme işlemlerinin onaylanması gerekir. Daha fazla bilgi için Satın alma işlemlerini işleme başlıklı makaleyi inceleyin.

Öniz ödemeli plan sürelerinin kısa olması nedeniyle, satın alma işlemini en kısa sürede onaylamak ö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 kabul edilmelidir. Örneğin, geliştiricilerin üç günlük bir ö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 olarak ödemek yerine belirli bir süre boyunca birden fazla taksitle ödeme yaptığı bir abonelik türüdür.

Taksitli aboneliklerle ilgili diğer önemli noktalar:

  • Kullanılabilir olduğu ülkeler: Taksitli abonelik özelliği yalnızca Brezilya, Fransa, İspanya ve İtalya'da kullanılabilir (Kullanılabilirlik durumu için Console'u kontrol edin).
  • Fiyatı ayarlama: Console'da taksit aboneliğinin fiyatı belirlenirken bu fiyat, aylık ödeme tutarını temsil eder. Bu değer, ayarlanan taahhüt süresiyle birlikte satın alma ekranındaki abonelik için toplam tutarı oluşturur.
  • Taahhüt süresi: İlk abonelik taahhütünün toplam süresidir. Bu süre boyunca aylık ödeme yapılması gerekir. Örneğin, bir temel planın taahhüt süresi 15 ay ise kullanıcı bu süre boyunca 15 aylık ödeme yapar.
  • Yenilemeler: Taksitli abonelikler bağlamında "yenileme", ilk taahhüt döneminin veya sonraki taahhüt döneminin sona ermesini ifade eder. İlk kayıttan sonra ilk yenileme, ilk taahhüt döneminin tamamı tamamlandığında gerçekleşir. Sonraki yenilemeler, her bir sonraki 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 olarak yenilenir" seçeneği için sonraki bir taahhüt yoktur ve plan, her aylık abonelik ücretinin yenileme oluşturduğu aylık bir abonelik gibi davranı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, kullanıcı iptal etmek isterse veya geliştirici fiyatı değiştirmek isterse değişikliğin taahhüt süresinin sonunda geçerli olacağı anlamına gelir. Plan değişikliklerinde taahhüt kesin değildir. Bu, plan değişikliğinin taahhüt döneminin sonuna kadar beklemesi gerekmediği anlamına gelir. Plan değişikliği, ayarlanan değişim moduna bağlı olarak hemen veya bir sonraki ödeme tarihinde geçerlilik kazanır.
  • Aynı abonelikteki plan değişikliği: Aynı abonelik ürününün taksitli ödeme temel planından taksitli ödeme olmayan temel planına geçişe izin verilmez.
  • Gerçek zamanlı geliştirici bildirimleri (RTDN'ler): Kullanıcı tarafından başlatılan iptal işleminin ardından, taahhüt süresi boyunca ödeme yapılması gerektiğinde hemen bir SUBSCRIPTION_CANCELLATION_SCHEDULED RTDN gönderilir. İptal işlemi beklemededir ve yalnızca taahhüt döneminin sonunda geçerli olur. 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 elde etme: Geliştirici ödemeleri, kullanıcılar aylık ödemelerini yaptığında yapılır ve diğer tüm aboneliklerle aynı şartlara tabidir. Kullanıcılar taksitli aboneliğe kaydolduğunda geliştiricilere önceden ödeme yapılmaz.

  • Ödenmemiş ödemelerin tahsilatı: Bir kullanıcı abonelik ödemelerini taksitle yapmazsa Google veya Geliştirici, bu tür ödenmemiş veya ödenmemiş ödemeleri kullanıcıdan tahsil etmeye çalışmaz. Bununla birlikte, Google normal ödeme tekrar deneme uygulamalarına uygun olarak geçerli ek süre veya hesap bekleme süresi boyunca ödemeyi düzenli aralıklarla tekrar deneyebilir. Google, ödenmemiş kalan taksit ödemeleri için 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 taksit aboneliği queryProductDetails() 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 abonelikleri yönetmesine izin vermek için derin bağlantılar kullanma

Uygulamanızda, kullanıcıların aboneliklerini yönetmelerine olanak tanıyan bir ayar 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 dahil edebilirsiniz.

Süresi dolmamış abonelikler için uygulamanızdan Google Play abonelik merkezine bir derin bağlantı ekleyebilirsiniz. Bu bağlantıyı, abonelik kaynağının subscriptionState alanını kullanarak belirleyebilirsiniz. Bu nedenle, Play Store abonelik merkezine derin bağlantı oluşturmanın birkaç yolu vardır.

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


Diğer ayrıntıları görmek için bir aboneliğe dokunun.
Şekil 2. Daha fazla ayrıntı görmek için bir aboneliğe dokunun.

Bu derin bağlantı, kullanıcıların Play Store abonelik merkezinden iptal edilmiş bir aboneliği geri yüklemelerine yardımcı olabilir.

Süresi dolmamış bir aboneliğin yönetim sayfasına doğrudan bağlantı oluşturmak için satın alınan abonelikle ilişkili paket adını ve productId değerini belirtin. Mevcut bir 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 listesini almak için BillingClient.queryPurchasesAsync() işlevini çağırın. Her abonelik, abonelik durumu bilgilerinin bir parçası olarak ilgili productId değerini 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" değerlerini 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

Ardından kullanıcı, ödeme yöntemlerini yönetebilir ve iptal, yeniden abone olma ve duraklatma gibi özelliklere erişebilir.

Kullanıcıların aboneliklerini yükseltmelerine, düşürmelerine veya değiştirmelerine izin verin.

Mevcut abonelere, ihtiyaçlarını daha iyi karşılamak için abonelik planlarını değiştirmeleri amacıyla çeşitli seçenekler sunabilirsiniz:

  • "Temel" ve "ücretli" abonelikler gibi birden fazla abonelik katmanı satıyorsanız kullanıcıların farklı bir aboneliğin temel planını veya fırsatını satın alarak katman değiştirmelerine izin verebilirsiniz.
  • Kullanıcıların mevcut faturalandırma dönemlerini değiştirmelerine izin verebilirsiniz (ör. aylık plandan yıllık plana geçme).
  • Kullanıcıların otomatik yenilenen ve ön ödemeli planlar arasında geçiş yapmasına da izin verebilirsiniz.

Uygun kullanıcılara indirim sunan abonelik teklifleri sunarak bu değişikliklerden herhangi birini 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 sağlayan bir teklif oluşturabilir ve bu teklifi aylık plana abone olan ancak teklifi satın almayan kullanıcılarla sınırlandırabilirsiniz. Teklif uygunluk ölçütleri hakkında daha fazla bilgiyi Yardım Merkezi'nde bulabilirsiniz.

Şekil 3'te, üç farklı plana sahip örnek bir uygulama gösterilmektedir:

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

Uygulamanız, kullanıcılara aboneliklerini değiştirme seçenekleri sunan, 3. resme benzer bir ekran gösterebilir. Kullanıcıların mevcut abonelik planlarının ne olduğu ve bu planı değiştirmek için hangi seçeneklere sahip oldukları her durumda net bir şekilde anlaşılmalıdır.

Kullanıcılar aboneliklerini yükseltmeye, düşürmeye veya değiştirmeye karar verdiğinde, mevcut ücretli faturalandırma döneminin oransal değerinin nasıl uygulanacağını ve ne zaman hak değişikliği olacağını belirleyen bir değişim modu belirtirsiniz.

Değişim modları

Aşağıdaki tabloda, kullanılabilen değişim modları ve örnek kullanımlar ile ödenmiş olarak kabul edilen ödemelerin sayısı listelenmiştir.

Değişim modu

Açıklama

Örnek kullanım

Ödenmiş olarak kaydedilen taahhüt edilen ödemeler (taksitli abonelik değişimi 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 faturalandırma tarihi ileri çekilerek yeni aboneliğe kredi olarak eklenir. Bu varsayılan davranıştır.

Ek ücret ödemeden daha pahalı bir plana geçebilirsiniz.

0

CHARGE_PRORATED_PRICE

Abonelik 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 süre birimi başına fiyatın arttığı abonelik yükseltmelerinde kullanılabilir.

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

1

CHARGE_FULL_PRICE

Abonelik hemen yükseltilir veya düşürülür ve kullanıcıdan yeni hak için tam fiyat hemen alınır. Önceki abonelikten kalan değer, aynı avantaj için devredilir veya farklı bir avantaja geçiş yapıldığında kalan süreye göre oranlanır.

Not: Yeni abonelikte ücretsiz deneme veya tanıtım fırsatı varsa kullanıcıdan, yükseltme veya düşürme işlemi sırasında geçerli olan tutar (0 TL veya tanıtım fırsatının fiyatı) alınır.

Daha kısa bir faturalandırma döneminden daha uzun bir faturalandırma dönemine geçme.

1 (Not: Yeni abonelikte ücretsiz deneme varsa 0 değerini alır.)

WITHOUT_PRORATION

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

Ücretsiz deneme sürenizin kalanını kullanmaya devam ederek daha yüksek bir abonelik katmanına yükseltme yapın.

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 yapılır:

  • Otomatik yenileme devre dışı bırakılmış ve geçerli faturalandırma döneminin sonuna ayarlanmış süresi dolan mevcut öğe.
  • Mevcut öğenin süresi dolduktan sonra başlayan yeni hak. İsteyen kullanıcıların ek değişiklikler yapmasına izin verebilirsiniz. Örneğin, kullanıcılar orijinal plana geri dönebilir veya ertelenen yeni bir 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 uygun fiyatlı bir katmana geçin.

1

Yükseltme veya düşürme tekliflerinin farklı upsell ve yeniden kazanma uygulamaları hakkında daha fazla bilgi edinmek için teklifler ve promosyonlar kılavuzunu okuyun.

Bir satın alma işlemi için değişim modunu ayarlama

Tercihlerinize ve iş mantığınıza bağlı olarak farklı abonelik geçiş türleri için farklı değiştirme modları kullanabilirsiniz. Bu bölümde, abonelik değişikliği için değişim modunun nasıl ayarlanacağı ve geçerli olan sınırlamalar açıklanmaktadır.

Yeniden abone olma veya aynı abonelik kapsamında plan değiştirme

Google Play Console'da varsayılan bir değişim modu belirtebilirsiniz. Bu ayar, aynı abonelik için farklı bir temel plan veya fırsat satın alan veya iptalden sonra yeniden abone olan mevcut abonelerden ne zaman ödeme alınacağını seçmenize olanak tanır. Mevcut seçenekler CHARGE_FULL_PRICE ile eşdeğer olan Hemen ücretlendir ve WITHOUT_PRORATION ile eşdeğer olan Bir sonraki fatura tarihinde ücretlendir'dir. Aynı abonelikteki temel planlar arasında geçiş yaparken yalnızca bu değişim modları geçerlidir.

Örneğin, kullanıcı iptal ettikten sonra ancak abonelik sona ermeden önce aynı plan için yeniden kazanma teklifi uyguluyorsanız yeni satın alma işlemini SubscriptionUpdateParams parametresinde herhangi bir değer belirtmeden normal bir satın alma işlemi olarak işleyebilirsiniz. Sistem, abonelikte yapılandırdığınız varsayılan değişim modunu kullanır ve eski satın alma işleminden yeni satın alma işlemine plan geçişini otomatik olarak yönetir.

Abonelikler arasında plan değiştirme veya varsayılan değişim 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şim modunu geçersiz kılmak istiyorsanız satın alma akışı parametrelerinin bir parçası olarak çalışma zamanında oransal azaltma oranını belirtirsiniz.

Çalışma zamanında 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:

  • Ön ödemeli plandan, otomatik yenilenen plandan veya taksit planından ön ödemeli plana geçerken, aynı abonelik için yükseltme, düşürme veya geçiş işlemi başlatırken izin verilen tek değişim modu CHARGE_FULL_PRICE'dir. Başka bir değişim modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir.
  • Aynı abonelik içinde ön ödemeli plandan veya otomatik yenilenen plandan otomatik yenilenen plana geçerken geçerli prorasyon modları CHARGE_FULL_PRICE ve WITHOUT_PRORATION'dır. Başka bir prorasyon modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir.
  • Aynı abonelik ürünündeki taksitli temel plandan taksitsiz temel plana geçişe izin verilmez.

Değişim örnekleri ve davranışları

Her prorasyon modunun nasıl çalıştığını anlamak için aşağıdaki senaryoyu inceleyin:

Samwise, Country Gardener uygulamasındaki online içeriğe abonedir. İçeriğin yalnızca metin olan 1. Katman sürümüne aylık aboneliği vardır. Bu abonelik ayda 2 ABD doları tutarındadır ve ayın ilk günü yenilenir.

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

Geliştirici, aboneliği yükseltirken prorata modu seçer. Aşağıdaki listede, her eşit oranlı ö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. Tam bir ay (1-30 Nisan) için ödeme yaptığı ancak abonelik döneminin yarısında yükseltme yaptığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 TL) uygulanır. Ancak bu yeni abonelik yıllık 36 ABD doları olduğundan 1 ABD doları kredi bakiyesi yalnızca 10 gün (16-25 Nisan) için ödeme yapar. Bu nedenle, 26 Nisan'da yeni abonelik için 36 ABD doları, sonraki her yılın 26 Nisan'ında da 36 ABD doları daha tahsil edilir.

Satın alma işlemi başarılı olduğu anda uygulamanızın PurchasesUpdatedListener yöntemini çağırmanız gerekir. Yeni satın alma işlemini queryPurchasesAsync() çağrısı kapsamında alabilirsiniz. Arka uçunuza hemen bir SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi gönderilir.

CHARGE_PRORATED_PRICE

Bu mod, zaman birimi başına 2. Katman abonelik fiyatı (yılda 36 ABD doları = ayda 3 ABD doları) zaman birimi başına 1. Katman abonelik fiyatından (ayda 2 ABD doları) daha yüksek olduğu için kullanılabilir. Samwise'ın 1. Katman aboneliği hemen sona erer. Tam bir ay için ödeme yaptığı ancak yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Ancak yeni abonelik yıllık 36 ABD doları olduğundan kalan 15 gün için 1,50 ABD doları ödemesi gerekir. Bu nedenle, yeni aboneliği için 0,50 ABD doları tutarında fark ödemesi gerekir. Samwise'tan 1 Mayıs'ta yeni abonelik katmanı için 36 TL, sonraki her yılın 1 Mayıs'ında da 36 TL alınır.

Satın alma işlemi başarılı olduğu anda uygulamanızın PurchasesUpdatedListener çağrısını yapmalısınız. Yeni satın alma işlemini queryPurchasesAsync() çağrısının bir parçası olarak alabilirsiniz. Arka uçunuza hemen bir SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi gönderilir.

WITHOUT_PRORATION

Samwise'ın Katman 1 aboneliği, ek ücret yansıtılmaksızın hemen Katman 2'ye yükseltilir. 1 Mayıs'ta yeni abonelik katmanı için 36 ABD doları, sonraki her yılın 1 Mayıs'ında da 36 ABD doları daha öder.

Satın alma işlemi başarılı olduğu anda uygulamanızın PurchasesUpdatedListener çağrısını yapmalısınız. Yeni satın alma işlemini queryPurchasesAsync() çağrısının bir parçası olarak alabilirsiniz. Arka uçunuza hemen bir SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi gönderilir.

DEFERRED

Samwise'ın 1. Katman aboneliği, 30 Nisan'da sona erene kadar devam eder. 1 Mayıs'ta 2. Katman aboneliği yürürlüğe girer ve Samwise'den yeni abonelik katmanı için 36 ABD doları tahsil edilir.

Satın alma işlemi başarılı olduğu anda uygulamanızın PurchasesUpdatedListener çağrısını yapmalısınız. Yeni satın alma işlemini queryPurchasesAsync() çağrısının bir parçası olarak alabilirsiniz. Arka uçunuza hemen bir SUBSCRIPTION_PURCHASED gerçek zamanlı geliştirici bildirimi gönderilir. Bu noktada, diğer yeni satın alma işlemlerini işlediğiniz şekilde satın alma işlemini işlemeniz 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 değişimin geçerli olduğu anda doldurulduğunu unutmayın. Bu noktada, yeni abonelik planı için bir SUBSCRIPTION_RENEWED RTDN alırsınız. ReplacementMode.DEFERRED davranışı hakkında daha fazla bilgiyi Ertelenen değişimi işleme 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 kullanıcıdan 36 ABD doları tahsil ediliyor. Tam bir ay için ödeme yaptığı ancak aboneliğini yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 TL) uygulanır. Yeni abonelik yıllık 36 ABD doları olduğu için abonelik süresine 1/36 yıl eklenir (~10 gün). Bu nedenle, Samwise'ın sonraki ödemesi bugünden 1 yıl 10 gün sonra 36 ABD doları olacaktır. Ardından, her yıl 36 ABD doları öder.

Prorata modu seçerken değişim önerilerimizi inceleyin.

Uygulama içinde abonelik değişikliklerini tetikleme

Uygulamanız, satın alma akışı başlatma ile aynı adımları uygulayarak kullanıcılara yükseltme veya düşürme seçeneği sunabilir. Ancak yükseltme veya düşürme işlemi sırasında mevcut abonelik, gelecekteki (yükseltilmiş veya düşürülmüş) abonelik ve kullanılacak değişim modu ile ilgili ayrıntıları sağlamanız gerekir. Aşağıdaki örnekte gösterildiği gibi:

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şim önerileri

Aşağıdaki tabloda, her senaryo için önerilenlerle birlikte farklı prorasyon senaryoları gösterilmektedir:

Senaryo Önerilen değişim modu Sonuç
Daha pahalı bir katmana geçme CHARGE_PRORATED_PRICE Kullanıcı, aynı faturalandırma dönemini koruyarak hemen erişim elde eder.
Daha düşük maliyetli bir katmana geçme DEFERRED Kullanıcı daha pahalı katman için ödeme yaptığından bir sonraki fatura tarihine kadar erişmeye devam eder.
Ücretsiz deneme süreniz devam ederken deneme sürümünü koruyarak yükseltme WITHOUT_PRORATION Kullanıcı, ücretsiz deneme erişimini korur ancak denemenin geri kalanı için daha yüksek bir katmana yükselir.
Ücretsiz deneme süreniz devam ederken yükseltme yapma - Ücretsiz deneme erişimini sonlandırma CHARGE_PRORATED_PRICE Kullanıcı yeni katmana hemen erişebilir ancak ücretsiz deneme süresinden yararlanamaz.

Abonelik değişikliği satın alma işlemlerini yönetme

Plan değişiklikleri, tüm şartlar ve amaçlar açısından yeni satın alma işlemleridir ve faturalandırma akışı başarıyla tamamlandıktan sonra bu şekilde işlenip kabul edilmelidir. Yeni satın alma işlemini uygun şekilde işlemeye ek olarak, değiştirilen satın alma işlemini de kullanımdan kaldırmanız gerekir.

Uygulama içi davranış, yeni satın alma işlemlerindekiyle aynıdır. Uygulamanız, PurchasesUpdatedListener alanında yeni satın alma işleminin sonucunu alır ve yeni satın alma işlemi queryPurchasesAsync'te 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 döndürür. Eski jetonun hizmetlerinize erişim elde etmek için kullanılmadığından emin olmak üzere linkedPurchaseToken içinde sağlanan jetonu geçersiz kılın. Üst ve alt sürüme geçiş satın alma işlemlerini yönetme hakkında bilgi edinmek için Yükseltme, alt sürüme geçme 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'sinden Purchases.subscriptions:acknowledge ile onayladığınızdan emin olun.

Ertelenen değişimi işleme

Ertelenen değişim modu, kullanıcının yeni plana başlamadan önce eski planındaki kalan hakkı kullanmasına olanak tanır.

Yeni bir satın alma işlemi için ReplacementMode.DEFERRED'i kullandığınızda queryPurchasesAsync(), satın alma akışında yeni bir satın alma jetonu döndürür. Bu jeton, sonraki yenileme tarihinde ertelenen değişim işlemi gerçekleşene kadar eski ürünle ilişkili kalır. Ardından yeni ürün iade edilir.

Geçmişte desteği sonlandırılan ProrationMode.DEFERRED ile bu kullanıcı deneyimini elde edebiliyordunuz ancak Play Faturalandırma Kitaplığı 6 ile ProrationMode.DEFERRED desteği sonlandırıldı. Davranıştaki farklılıkları 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 düşürme işleminin başarılı olup olmadığıyla ilgili bir durum bilgisiyle çağrılır.

Eski plana erişim hakkı, bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru hakkı vermesini sağlamak için queryPurchasesAsync(), değişim gerçekleşene kadar orijinal satın alma jetonunu ve orijinal hakkı içeren bir Purchase nesnesi döndürür.

Yeni satın alma jetonu gösterilmediğinden bu aşamada işleme alınamıyor.

PurchasesUpdatedListener, satın alma işleminden sonra yükseltme veya düşürme işleminin başarılı olup olmadığıyla ilgili bir durumla çağrılır.

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

Yeni satın alma jetonu gösterilir. Bu nedenle, değişimin ne zaman gerçekleşeceği 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ışında gönderilmez. Arka uç henüz yeni satın alma işleminden haberdar değildir.

Eski product_id ile SUBSCRIPTION_PURCHASED RTDN, yeni satın alma jetonu için satın alma akışında hemen sonra gönderilir.

purchases.subscriptionsv2.get yöntemini yeni satın alma jetonuyla çağırmak, satın alma zamanını belirten bir "startTime" içeren bir satın alma işlemi döndürür. Bu satın alma işleminde iki satır öğesi bulunur:

  • Eski hakkı temsil eden ve gelecekte bir "expiryTime" değeri olan. Eski yararlanma hakkı yenilenmez ve yeni yararlanma hakkının ürününü içeren bir DeferredItemReplacement öğesi vardır. Bu, eski hak talebinin süresi dolduktan sonra bekleyen bir değişim olduğunu gösterir.
  • Yeni satın alınan hakkı temsil eden bir tane. "expiryTime" için ayarlanmış bir değer yok.

Eski satın alma jetonu için SUBSCRIPTION_EXPIRED gönderildi. purchases.subscriptionsv2.get yöntemi, eski satın alma jetonuyla çağrıldığında 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şimde: satın alma akışında (uygulama) sonraki ilk yenileme

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

Yeni satın alma jetonu artık gösterildiğinden işlenmelidir.

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

Satın alma akışı başarılı olduğunda yeni satın alma işlemi zaten işlenmiş olmalıdır. Bu nedenle, uygulamanın doğru hakkın verildiğinden emin olmak dışında herhangi bir özel işlem yapması gerekmez.

Değişimde: satın alma akışında sonraki ilk yenileme (arka uç)

İlk SUBSCRIPTION_RENEWED RTDN gönderildiğinde yeni satın alma işlemi artık işlenebilir ve onaylanabilir.

Abonelik kaynağındaki linkedPurchaseToken, varsa abonelik arka uçunuzdaki hangi kullanıcının 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şlendi 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şimler için özel mantık kullanmanız gerekmez.

purchases.subscriptionsv2.get yöntemi yeni satın alma jetonuyla ç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ğeri ve DeferredItemReplacement için ayarlanmış bir değer olmayan eski hakkı temsil eden bir öğe.
  • Gelecekte bir "expiryTime" değeri ve auto_renewing_enabled işareti etkin olan yeni hakkı temsil eden bir tane.

Kullanımı sonlandırılan ProrationMode.DEFERRED yerine artık ReplacementMode.DEFERRED kullanılmalıdır. Bu yöntem, hak değişiklikleriyle ilgili olarak aynı davranışı sunar ancak satın alma işlemini yönetmenin diğer yeni satın alma işlemlerindeki davranışlarla daha tutarlı bir yolunu sunar.

Müşteri yönetimi

Gerçek zamanlı geliştirici bildirimlerini kullanarak, bir kullanıcının iptal etmeye karar verdiğini anlık olarak algılayabilirsiniz. Bir kullanıcı aboneliğini iptal ettiğinde ancak aboneliğinin süresi dolmadan önce, kullanıcıya yeniden abone olmasını istemek için push bildirimleri veya uygulama içi mesajlar gönderebilirsiniz.

Aboneliğini iptal eden kullanıcıları uygulamanızda veya Play Store üzerinden geri kazanmaya çalışabilirsiniz. Aşağıdaki tabloda, çeşitli abonelik senaryoları ile ilişkili yeniden kazanma işlemleri ve uygulama şartları açıklanmaktadır.

Abonelik süresi dolmadan önce Abonelik sona erdikten sonra
Uygulama içi Play Store'da Uygulama içi Play Store'da
Yeniden 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şkili kalır Kullanıcı aynı veya farklı bir SKU'ya kaydolabilir Evet Kullanıcı aynı veya farklı bir SKU'ya kaydolabilir Evet
Yeni satın alma jetonu oluşturur Evet Hayır Evet Evet
Varsayılan olarak etkindir Hayır Evet, tüm geliştiriciler için destek gerekli Hayır

Faturalandırma Kitaplığı 2.0 ve sonraki sürümleri olmayan uygulamalar: Hayır

Faturalandırma Kitaplığı 2.0 ve sonraki sürümleri 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ı bir SKU kullanılıyorsa: Prorasyon moduna bağlıdır.

Geçerli fatura döneminin sonu Hemen Hemen
Uygulama gerekli Uygulamanızda yeniden kaydolmaya yönelik bir kullanıcı arayüzü sağlayın

Abonelik durumundaki değişikliği algılama

Play Store'a derin bağlantı

Uygulamanızda yeniden kaydolma kullanıcı arayüzü sağlayın Uygulama dışı satın alma işlemlerini yönetme

Abonelik sona ermeden önce - uygulama içi

İptal edilmiş ancak henüz süresi dolmamış abonelikler için yeni abonelere uygulanan uygulama içi ürün satın alma akışını uygulayarak abonelerin uygulamanızda aboneliklerini yenilemelerine izin verebilirsiniz. Kullanıcı arayüzünüzde kullanıcının mevcut bir aboneliği olduğunu belirtin. Örneğin, kullanıcının mevcut geçerlilik bitiş tarihini ve yinelenen fiyatı Yeniden etkinleştir düğmesiyle birlikte göstermek isteyebilirsiniz.

Çoğu zaman, kullanıcıya halihazırda abone olduğu fiyat ve SKU'yu sunmak istersiniz. Bunun için aşağıdaki adımları uygulayın:

  • Aynı SKU ile yeni bir abonelik satın alma işlemi başlatın.
  • Yeni abonelik eskisinin yerini alır ve aynı son kullanma tarihinde yenilenir. Eski abonelik hemen süresi dolmuş olarak işaretlenir.
  • Örneğin, Achilles'in Örnek Müzik Uygulaması'na aboneliği vardır ve aboneliğin süresi 1 Ağustos'ta dolacak. 10 Temmuz'da kullanıcı, aylık aynı fiyat üzerinden bir aylık aboneliğe yeniden kaydolur. Yeni abonelik, kalan krediye göre oranlanır, hemen etkinleştirilir ve 1 Ağustos'ta yenilenir.

Farklı bir fiyat (ör. yeni bir ücretsiz deneme veya geri kazanma indirimi) sunmak istiyorsanız kullanıcıya farklı bir SKU sunabilirsiniz:

  • Değişim modunu WITHOUT_PRORATION kullanarak farklı bir SKU ile üst veya alt plana geçiş yapın.
  • Yeni abonelik eskisinin yerini alır ve aynı son kullanma tarihinde yenilenir. Kullanıcıdan, orijinal süre sonu tarihinde tanıtım fiyatları da dahil olmak üzere yeni SKU'nun fiyatı alınır. Eski abonelik, karartılmış bir hesap kimliği kullanılarak oluşturulduysa yükseltme ve düşürme işlemleri için aynı kimlik BillingFlowParams'e iletilmelidir.
  • Örneğin, Achilles'in Örnek Müzik Uygulaması'na aboneliği vardır 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 olur. Yeni abonelik hemen etkinleştirilir ve kullanıcıdan 1 Ağustos'ta tanıtım fiyatı alınır.
  • Geri kazanma SKU'nuza ücretsiz deneme veya tanıtım fiyatı eklemeye karar verirseniz Google Play Console'da Uygulama başına bir ücretsiz deneme izni 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, yeni bir abonelikte yaptığınız gibi satın alma işlemini gerçekleştirin. Ayrıca Google Play Developer API, abonelik kaynağında bir linkedPurchaseToken döndürür. Eski jetonun hizmetlerinize erişim elde etmek için kullanılmadığından emin olmak 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ş olsa bile 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ı abonelik ve satın alma jetonunu korur.

Google Play Store uygulamasındaki abonelikler bölümünde, iptal edilmiş bir aboneliği ve yeniden abone olma düğmesini gösteren resim
Şekil 8. Google Play Store uygulamasında, iptal edilmiş bir aboneliği gösteren ve Yeniden abone ol düğmesi bulunan Hesap > Abonelikler bölümü.

Abonelikleri geri yükleme hakkında daha fazla bilgi için Geri yüklemeler başlıklı makaleyi inceleyin.

Abonelik süresi sona erdikten sonra - uygulama içi

Süresi dolan abonelerin uygulamanızda tekrar abone olmasına izin vermek için yeni aboneler için kullanılan uygulama içi ürün satın alma akışını uygulayabilirsiniz. Aşağıdakileri göz önünde bulundurun:

  • Kullanıcılara indirim sunmak için aboneliğiniz için özel fiyatlandırma içeren bir ürün kimliği (yeniden kazanma SKU'su olarak da bilinir) sunabilirsiniz. Teklifi uygulamanızda sunabilir veya kullanıcıyı uygulama dışında (ör. e-posta) teklif hakkında bilgilendirebilirsiniz.
  • Yeniden kazanma aboneliği başlatmak için Google Play Faturalandırma Kitaplığı'nı kullanarak Android uygulamanızda satın alma akışını başlatın. Bu, yeni abonelikle aynı işlemdir ancak kullanıcının kullanabileceği 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 deneme izni 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, yeni bir abonelikte yaptığınız gibi satın alma işlemini gerçekleştirin. 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 süresi dolduktan sonra bir yıla kadar aynı SKU'ya yeniden abone olabilirler. Bu işlem yeni bir abonelik ve satın alma jetonu oluşturur.

Google Play Store uygulamasındaki abonelikler bölümünde, iptal edilmiş ve süresi dolmuş bir aboneliği gösteren, yeniden abone ol ve kaldır düğmeleri
Şekil 9. Google Play Store uygulamasında Hesap > Abonelikler bölümünde, Yeniden abone ol ve Kaldır düğmeleriyle birlikte iptal edilmiş ve süresi dolmuş bir aboneliği gösteren resim.

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

Aboneliğinizi tanıtma

Belirli kullanıcılara mevcut bir abonelik için daha uzun bir ücretsiz deneme süresi sunmak üzere promosyon kodları oluşturabilirsiniz. Daha fazla bilgi için Promosyon kodları başlıklı makaleyi inceleyin.

Google Play, ücretsiz denemeyi başlatmadan önce kullanıcının geçerli bir ödeme yöntemine sahip olup olmadığını doğrular. Bazı kullanıcılar bu doğrulamayı ödeme yöntemlerinde provizyon veya ödeme olarak görebilir. Bu provizyon veya ödeme geçicidir ve daha sonra geri alınır ya da geri ödenir.

Deneme süresi sona erdiğinde 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 kullanıcıdan ücret alınmaz.

İptal etme, geri ödeme yapma veya iptal etme

Google Play Developer API'yi kullanarak abonelikleri iptal edebilir, geri ödeme yapabilir veya feshedebilirsiniz. Bu işlev Google Play Console'da da kullanılabilir.

  • İptal: Kullanıcılar Google Play'de abonelikleri iptal edebilir. Ayrıca, kullanıcıların uygulamanızda veya web sitenizde iptal etme seçeneği sunabilirsiniz. Uygulamanız, bu iptalleri İptaller bölümünde açıklandığı şekilde ele almalıdır.
  • Geri ödeme: Geri ödeme yaptığınızda kullanıcı aboneliği kullanmaya devam edebilir. Örneğin, kullanıcının ürününüze erişmesini engelleyen teknik bir hata varsa ancak bu hata düzeltildiyse geri ödeme yapılabilir. En son ödemeden daha fazla geri ödeme yapmak veya kısmi geri ödeme yapmak istiyorsanız Google Play Console'u kullanmanız gerektiğini unutmayın.
  • İptal etme: İptal ettiğinizde kullanıcı aboneliğe eriş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 İptaller bölümünde açıklandığı şekilde işlemelidir.

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

Yenilemeyi durdurur Para iadesi Erişimi iptal etme
İptal Evet Hayır Hayır
Geri ödeme Hayır Evet Hayır
İptal et Evet Evet Evet

Abonenin faturalandırmasını erteleme

Google Play Developer API'den Purchases.subscriptions:defer kullanarak otomatik olarak yenilenen bir abonenin bir sonraki faturalandırma tarihini öne alabilirsiniz. Kullanıcı, erteleme süresi boyunca içeriğinize tam erişim hakkına sahip olarak abone olur ancak kendisinden ödeme alınmaz. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.

Ön ödemeli planlarda, geçerlilik bitiş süresini ertelemek için ertelenmiş faturalandırma API'sini kullanabilirsiniz.

Ertelenen faturalandırma, aşağıdakileri yapmanıza olanak tanır:

  • Kullanıcılara özel teklif olarak ücretsiz erişim verin (ör. bir film satın alan kullanıcılara bir haftalık ücretsiz erişim).
  • İyi niyet göstergesi olarak müşterilere ücretsiz erişim izni verin.

Faturalandırma, API çağrısı başına en az bir gün ve en fazla bir yıl ertelenebilir. Faturalandırmayı daha da ertelemek için yeni faturalandırma tarihi gelmeden önce API'yi tekrar çağırabilirsiniz.

Örneğin, Derya'nın Balıkçılık Üç Aylık uygulamasının online içeriğine aylık aboneliği var. Normalde her ayın ilk gününde 1,25 sterlin faturalandırılıyor. Mart ayında, uygulama yayıncısı için bir online ankete katıldı. Yayıncı, bir sonraki ödemeyi 15 Mayıs'a erteleyerek (önceden planlanan faturalandırma tarihi olan 1 Nisan'dan altı hafta sonra) kullanıcıya altı haftalık ücretsiz kullanım süresi öder. Darcy, Nisan veya Mayıs ayının başıyla ilgili ödeme yapmaz ve içeriğe erişmeye devam eder. 15 Mayıs'ta, abonelik için normal aylık 1,25 sterlinlik ücret alınır. Bir sonraki yenileme tarihi 15 Haziran olarak belirlendi.

Erteleme yaparken, faturalandırma tarihlerinin değiştiğini kullanıcıya e-posta veya uygulama üzerinden bildirebilirsiniz.

Ödeme reddi sorununu ele alma

Abonelik yenilemeyle ilgili ödeme sorunları varsa Google, aboneliği iptal etmeden önce belirli bir süre boyunca düzenli olarak yenilemeyi dener. Bu kurtarma döneminde, ek sürenin ardından hesap askıya alınır. Bu süre zarfında Google, kullanıcıya ödeme yöntemini güncellemesi için e-postalar ve bildirimler gönderir.

Ödeme reddedildikten sonra, 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 abonelik hesap askıya alma süresine girer. Hesap askıya alındığı sırada kullanıcının abonelikten yararlanma haklarına erişemediğinden emin olun.

Otomatik yenilenen her temel planın ek süresini ve hesabı askıya alma süresini Google Play Console'da belirtebilirsiniz. Uzunlukların varsayılan değerden daha kısa belirlenmesi, reddedilen ödeme durumlarında kurtarılan abonelik sayısını azaltabilir.

Ödeme reddi sırasında aboneliğin kurtarılma olasılığını en üst düzeye çıkarmak için kullanıcınızı ödeme sorunu hakkında bilgilendirebilir ve sorunu düzeltmesini isteyebilirsiniz.

Bunu ek süre ve hesabın askıya alınması 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, kullanıcılara ek süre ve hesap askıya alma sırasında günde bir kez mesajlaşma seçeneği sunar ve uygulamadan ayrılmadan ödemelerini düzeltme fırsatı tanır.

Kullanıcıyı ödemesini düzeltmesi konusunda bilgilendiren küçük bilgi kutusu
Şekil 20. Kullanıcıyı ödemesini düzeltmesi konusunda bilgilendiren küçük bildirim.

Mesajın gösterilip gösterilmeyeceğini belirlemek için kullanıcı uygulamayı her açtığında bu API'yi çağırmanızı öneririz.

Kullanıcı aboneliğini başarıyla kurtardıysa satın alma jetonuyla birlikte SUBSCRIPTION_STATUS_UPDATED yanıt kodu alırsınız. Ardından, Google Play Geliştirici 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 mesaj göstermek için BillingClient.showInAppMessages() öğesini kullanın.

Uygulama içi mesajlaşma akışını tetiklemeye dair bir örnek aşağıda 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.
                }
            }
        });

Abonelik beklemedeki işlemleri işleme

Beklemede işlemler ilk satın alma, para ekleme, yükseltme veya düşürme işlemlerinde gerçekleşebilir. Abonelik satın alma işlemi SUBSCRIPTION_STATE_PENDING durumunda başlar ve SUBSCRIPTION_STATE_ACTIVE durumuna geçer. İşlemin süresi dolarsa veya kullanıcı tarafından iptal edilirse SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED durumuna geçer. 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şlemi için abonelik durumu değişikliği basittir. Kullanıcı bekleyen bir işlem başlattığında uygulamanız PENDING durumuyla birlikte bir Purchase alır. İşlem tamamlandığında uygulamanız, durumun PURCHASED olarak güncellendiği Purchase öğesini tekrar alır. RTDN istemcinize SUBSCRIPTION_PURCHASED türüne sahip bir SubscriptionNotification mesajı gönderilir. Satın alma işlemini doğrulamak, kullanıcıya içeriğe erişim vermek ve satın alma işlemini onaylamak için normal süreci uygulayın. İşlemin süresi dolarsa veya iptal edilirse RTDN istemcinize SUBSCRIPTION_PENDING_PURCHASE_CANCELED türüne sahip bir SubscriptionNotification mesaj gönderilir. Bu tür durumlarda, kullanıcı içeriğe hiçbir zaman erişmemiş olmalıdır.

Beklemede olan işlemlerle para ekleme, yükseltme veya düşürme işlemi hem eski hem de yeni abonelikler için durum değişiklikleri içerir. Kullanıcı beklemede olan bir para ekleme, yükseltme veya düşürme işlemi başlattığında uygulamanız, eski abonelik için PendingPurchaseUpdate nesnesini içeren bir Purchase alır. Bu sırada kullanıcı hâlâ eski aboneliğe sahip ve yeni aboneliği henüz edinmemiştir. PendingPurchaseUpdate nesnesinde getProducts() ve getPurchaseToken() ç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 jetonunun ayarlandığı ve durumun PURCHASED olarak ayarlandığı bir Purchase alır. RTDN istemcinize SUBSCRIPTION_PURCHASED türüne sahip bir SubscriptionNotification mesajı gönderilir. Yalnızca bu aşamada 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 iptal edilirse RTDN istemcinize SUBSCRIPTION_PENDING_PURCHASE_CANCELED türüne sahip bir SubscriptionNotification mesaj gönderilir. Bu gibi durumlarda, kullanıcı eski aboneliğin içeriğine erişmeye devam edebilir.