Bu konuda, yenilemeler ve geçerlilik süreleri gibi abonelik yaşam döngüsü olaylarının nasıl ele alınacağı açıklanmaktadır. Ayrıca, promosyon sunma ve kullanıcılarınızın kendi aboneliklerini yönetmelerine olanak tanıma gibi ek abonelik özellikleri de açıklanmaktadır.
Uygulamanız için abonelik ürünleri yapılandırmadıysanız Ürünlerinizi oluşturma ve yapılandırma bölümüne bakın.
Aboneliklere genel bakış
Abonelik, kullanıcıların belirli bir dönem boyunca erişebileceği avantajları ifade eder. Örneğin, bir abonelik kullanıcıya bir müzik akış hizmetine erişme hakkı verebilir.
Farklı avantaj gruplarını veya tek bir avantaj grubunun farklı katmanlarını ("Gümüş" ve "Altın" katmanları) temsil etmek için aynı uygulama içinde birden fazla aboneliğiniz olabilir.
Temel planlar ve teklifler aracılığıyla aynı abonelik ürünü için birden fazla yapılandırma oluşturabilirsiniz. Örneğin, uygulamanıza daha önce hiç abone olmamış kullanıcılar için tanıtım teklifi oluşturabilirsiniz. Benzer şekilde, halihazırda abone olan kullanıcılar için yükseltme teklifi de oluşturabilirsiniz.
Abonelik ürünleri, temel planlar ve fırsatlar hakkında ayrıntılı genel bakış için Play Console Yardım Merkezi'ndeki dokümanlara bakın.
Ön ödemeli plan entegrasyonu
Ön ödemeli planlar, geçerlilik süresi sona erdiğinde otomatik olarak yenilenmez. Abonelikten yararlanma hakkını kesintiye uğramadan uzatmak için kullanıcının aynı abonelik için ön ödemeli bir plana para eklemesi gerekir.
Para ekleme işlemlerinde, ilk satın alma işleminde olduğu gibi faturalandırma akışını başlatın. Satın alma işleminin para ekleme olduğunu belirtmeniz gerekmez.
Ön ödemeli plan para ekleme işlemlerinde her zaman CHARGE_FULL_PRICE
değiştirme modu kullanılır ve bu modu açıkça ayarlamanız gerekmez.
Kullanıcıdan tam fatura dönemi için hemen ödeme alınır ve yararlanma hakkı, para eklemede belirtilen süre boyunca uzatılır.
Ekleme işleminden sonra, Purchase
sonuç nesnesindeki aşağıdaki alanlar en son para ekleme satın alma işlemini yansıtacak şekilde güncellenir:
- Sipariş kimliği
- Satın alma zamanı
- İmza
- Satın alma jetonu
- Alınan
Aşağıdaki Purchase
alanları her zaman orijinal satın almada bulunan verileri içerir:
- Paket adı
- Satın alma durumu
- Ürünler
- Otomatik yenileme
Ön ödemeli satın alma onayı
Otomatik yenilenen aboneliklere benzer şekilde, satın aldıktan sonra ön ödemeli planları onaylamanız gerekir. Hem ilk satın almanın hem de para ekleme işlemlerinin onaylanması gerekir. Daha fazla bilgi için Satın alma işlemlerini işleme bölümüne bakın.
Ön ödemeli plan süreleri kısa olabileceğinden, satın alma işlemini mümkün olan en kısa sürede onaylamanız önemlidir.
Süresi bir hafta veya daha uzun olan ö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ında onaylanmalıdır. Örneğin, geliştiricilerin üç günlük ön ödemeli planı onaylamak için 1,5 gün süreleri vardır.
Taksit aboneliği entegrasyonu
Taksitli abonelik, kullanıcıların abonelik ücretinin tamamını önceden ödemek yerine belirli bir süre içinde taksitler halinde ödeme yaptıkları bir abonelik türüdür.
Taksitli abonelikler için dikkat edilmesi gereken diğer noktalar:
- Kullanılabildiği ülkeler: Taksitli abonelikler özelliği yalnızca Brezilya, Fransa, İtalya ve İspanya'da kullanılabilir (en son özellikler için Console'a bakın).
- Fiyatı ayarlama: Console'da taksitli aboneliğin fiyatını ayarlarken fiyat, aylık ödeme tutarını temsil eder. Bu tutar, ayarlanan taahhüt süresiyle birlikte satın alma ekranında abonelik için toplam tutarı oluşturur.
- Taahhüt süresi: Aylık ödemelerin gerekli olduğu ilk abonelik taahhüdünün toplam süresi. Örneğin, temel planın taahhüt süresi 15 aylıksa kullanıcı bu süre boyunca 15 aylık ödeme yapar.
- Yenilemeler: Taksitli aboneliklerde "yenileme" ifadesi bir taahhüt süresinin (ilk taahhüt dönemi veya sonraki taahhüt dönemi) sona erdiğini ifade eder. İlk kayıt işleminin ardından, ilk yenileme, ilk taahhüt döneminin tamamı tamamlandıktan sonra gerçekleşir. Sonraki yenilemeler, takip eden her taahhüt dönemi karşılandıktan sonra gerçekleşir. Taksitli abonelikler için yenileme türleri "aylık otomatik yenilenir" veya "aynı süre için otomatik yenilenir" olabilir. "Aylık otomatik yenilenir" için daha sonra herhangi bir taahhüt yoktur ve plan, her aylık abonelik ücretinin yenileme anlamına geldiği aylık bir abonelik gibi davranır.
- Fatura dönemi: Taksitli aboneliklerde bu, temel planda belirtilen şekilde bireysel ödemelerin yapıldığı yinelenen aralığı ifade eder.
- Plan değişikliği ve fiyat değişikliği davranışları: Fiyat değişiklikleri ve iptaller için taahhütte bulunursunuz. Yani, kullanıcı iptal etmek veya geliştirici fiyatı değiştirmek isterse bu değişiklik taahhüt süresinin sonunda geçerlilik kazanır. Plan değişiklikleri söz konusu olduğunda taahhüt kesin değildir. Yani plan değişikliği, taahhüt döneminin sonuna kadar beklemek zorunda değildir. Değişiklik, belirlenen değişim moduna göre hemen veya bir sonraki ödeme tarihinde geçerlilik kazanır.
- Aynı abonelik planı değişikliği: Planın, aynı abonelik ürününün taksitli temel planından taksitli olmayan bir temel planına geçirilmesine izin verilmez.
Gerçek zamanlı geliştirici bildirimleri (RTDN): Ödemeler taahhüt süresi boyunca kaldığında, kullanıcı tarafından iptal edildikten hemen sonra
SUBSCRIPTION_CANCELLATION_SCHEDULED
RTDN gönderilir. İptal işlemi şu anda beklemede ve yalnızca taahhüt döneminin sonunda geçerli olacak. Ardından, kullanıcı tarafından geri yüklenmezse taahhüt süresinin sonundaSUBSCRIPTION_CANCELED
veSUBSCRIPTION_EXPIRED
RTDN gönderilir.Ödemeler / Gelir gerçekleştirme: Geliştirici ödemeleri, kullanıcılar diğer tüm aboneliklerle aynı şartlara tabi olarak aylık ödemelerini yaptığında yapılır. Kullanıcı taksitli aboneliğe kaydolduğunda geliştiricilere önceden ödeme yapılmaz.
Kaçırılan ödeme tahsilatları: Kullanıcı, taksitli abonelik ödemesi yapamazsa Google veya Geliştirici, kullanıcıdan eksik veya bekleyen ödemeleri tahsil etmeye çalışmaz. Ancak Google, normal ödeme yeniden deneme uygulamalarına uygun olarak geçerli herhangi bir Ek Süre veya Hesap Askıya Alma dönemi boyunca ödemeyi belirli aralıklarla tekrar deneyebilir. Google, ödenmemiş taksitli ödemelerden 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ümler için taksitli abonelik,queryProductDetails()
kullanılarak iade edilir 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ız, bir ayarlar veya tercihler ekranında kullanıcıların aboneliklerini yönetmelerine olanak tanıyan bir bağlantı içermelidir. Bu bağlantıyı uygulamanızın doğal görünümüne ve tarzına dahil edebilirsiniz.
Süresi dolmamış abonelikler için uygulamanızdan Google Play abonelik merkezine yönlendiren bir derin bağlantı ekleyebilirsiniz. Bu bağlantıyı, abonelik kaynağının subscriptionState
alanını kullanarak belirleyebilirsiniz.
Bu bilgiler ışığında Play Store abonelik merkezine derin bağlantı oluşturmanın birkaç yolu vardır.
Abonelik merkezi bağlantısı
Kullanıcıları şekil 1 ve 2'de 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ıların Google Play tarafından faturalandırılan tüm aboneliklerinin durumu gösterilir.](https://developer.android.com/static/images/google/play/billing/sub_center_general.png?authuser=6&hl=tr)
![Diğer ayrıntıları görmek için bir aboneliğe dokunun.](https://developer.android.com/static/images/google/play/billing/sub_management_mock_general.png?authuser=6&hl=tr)
Bu derin bağlantı, kullanıcının iptal edilmiş bir aboneliği Play Store abonelik merkezinden geri yüklemesine yardımcı olabilir.
Belirli bir abonelik yönetimi sayfasına bağlantı (önerilir)
Süresi dolmamış bir aboneliğin yönetim sayfasına doğrudan bağlantı vermek için satın alınan abonelikle ilişkili paket adını ve productId
değerini belirtin. Mevcut bir abonelik için productId
öğesini programatik olarak belirlemek amacıyla uygulamanızın arka ucunu sorgulayın veya belirli bir kullanıcıyla ilişkili aboneliklerin listesi için BillingClient.queryPurchasesAsync()
numaralı telefonu çağırın. Her abonelik, abonelik durumu bilgilerinin bir parçası olarak karşılık gelen productId
değerini içerir.
Abonelik satın alma işlemiyle ilişkili her SubscriptionPurchaseLineItem
nesnesi, kullanıcının bu 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. Bunun için "alt-ürün-kimliğiniz" ve "uygulama-paketiniz" 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
Kullanıcı daha sonra ödeme yöntemlerini yönetebilir ve iptal, yeniden abonelik 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ını daha iyi karşılayacak şekilde değiştirmeleri için çeşitli seçenekler sunabilirsiniz:
- "Temel" ve "premium" abonelikler 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ş yapmalarına izin verebilirsiniz.
- Kullanıcıların mevcut fatura dönemlerini değiştirmelerine (ör. aylık plandan yıllık plana geçme) izin verebilirsiniz.
- Ayrıca, kullanıcıların otomatik yenilenen ve ön ödemeli planlar arasında geçiş yapmasına da izin verebilirsiniz.
Uygun kullanıcılara indirim sağlamak için abonelik teklifleri sunarak bu değişikliklerden herhangi birini teşvik edebilirsiniz. Örneğin, aylık plandan yıllık plana geçerken ilk yıl için% 50 indirim sunan bir teklif oluşturabilir ve bu teklifi yalnızca bu teklifi satın almamış aylık plana abone olan kullanıcılarla sınırlandırabilirsiniz. Fırsata uygunluk ölçütleriyle ilgili 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ı var.](https://developer.android.com/static/images/google/play/billing/plan_change_inapp.png?authuser=6&hl=tr)
Uygulamanız, kullanıcılara aboneliklerini değiştirme seçenekleri sunan Şekil 3'e benzer bir ekran gösterebilir. Her durumda, kullanıcılar mevcut abonelik planlarının ne olduğu ve bunu değiştirmek için ne gibi seçeneklere sahip oldukları açıkça anlaşılmalıdır.
Kullanıcılar aboneliklerini yükseltmeye, düşürmeye veya değiştirmeye karar verdiğinde, geçerli ücretli fatura döneminin orantılı değerinin nasıl uygulanacağını ve herhangi bir yararlanma hakkı değişikliğinin ne zaman gerçekleşeceğini belirleyen bir değiştirme modu belirtirsiniz.
Değiştirme modları
Aşağıdaki tabloda mevcut değişim modları, örnek kullanımlar ve ödenmiş olarak kabul edilen ödemelerin sayısı listelenmiştir.
Değiştirme modu |
Açıklama |
Örnek kullanım |
Ödenmiş olarak kaydedilen taahhüt edilen ödemeler (Taksitli abonelik değişimi için) |
|
Abonelik hemen yükseltilir veya düşürülür. Kalan süre, fiyat farkına göre ayarlanır ve bir sonraki faturalandırma tarihine kadar yeni aboneliğe aktarılır. Bu, varsayılan davranıştır. |
Hemen ek ücret ödemeden daha pahalı bir katmana geçin. |
0 |
|
Abonelik hemen yeni sürüme geçirilir ve faturalandırma döngüsü aynı kalır. Ardından kalan dönemin fiyat farkı kullanıcıdan tahsil edilir. Not: Bu seçenek yalnızca zaman birimi başına fiyatın arttığı abonelik yükseltmeleri için kullanılabilir. |
Fatura tarihini değiştirmeden daha pahalı bir katmana geçin. |
1 |
|
Abonelik hemen yükseltilir veya düşürülür ve kullanıcıdan yeni yararlanma hakkı için tam fiyat hemen alınır. Önceki abonelikten kalan değer ya aynı yararlanma hakkı için aktarılır ya da farklı bir yararlanma hakkına geçiş yapılırken süre için orantılı olarak dağıtılır. Not: Yeni abonelikte ücretsiz deneme veya tanıtım teklifi varsa yükseltme ya da düşürme sırasında kullanıcıdan 0 ABD doları veya tanıtım teklifinin fiyatı (hangisi geçerliyse) alınır. |
Kısa fatura dönemlerinden daha uzun fatura dönemlerine geçin. |
1 (Not: Yeni abonelikte ücretsiz deneme varsa 0 değerini girin.) |
|
Abonelik hemen yükseltilir veya düşürülür ve abonelik yenilendiğinde yeni fiyat tahsil edilir. Faturalandırma döngüsü aynı kalır. |
Kalan ücretsiz süreyi kaybetmeden daha yüksek bir abonelik katmanına geçin. |
0 |
|
Abonelik yalnızca abonelik yenilendiğinde yükseltilir veya düşürülür. Ancak yeni satın alma işlemi, yeni yararlanma hakkı için gelecekte bir başlangıç tarihiyle birlikte hemen yapılır. Böylece geliştirici isterlerse kullanıcıların ek değişiklikler yapmasına izin verebilir. Örneğin, orijinal plana geri dönebilir veya yeni bir ertelenmiş plan değişikliği başlatabilirler. Not: Taksitli aboneliklerde plan değişikliği bir sonraki ödeme tarihinin başında gerçekleşir. |
Daha düşük fiyatlı bir katmana geçin. |
1 |
Yükseltme veya düşürme tekliflerinin farklı upsell 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ş türleri için farklı değiştirme modları kullanabilirsiniz. Bu bölümde, abonelikteki bir değişiklik için değiştirme modunun nasıl ayarlanacağı ve geçerli sınırlamalar açıklanmaktadır.
Aynı abonelik içinde yeniden abone olma veya plan değiştirme
Google Play Console'da varsayılan bir değiştirme modu belirtebilirsiniz. Bu ayar, aynı abonelik için farklı bir temel plan veya teklif satın alan ya da iptal sonrasında yeniden abone olan mevcut abonelerden ne zaman ödeme alacağınızı seçmenize olanak tanır. Şu seçenekler kullanılabilir: CHARGE_FULL_PRICE
ile eşdeğer olan Hemen tahsil et ve WITHOUT_PRORATION
ile eşdeğer olan Bir sonraki faturalandırma tarihinde tahsil et. Aynı abonelik içinde temel planlar arasında geçiş yaparken kullanabileceğiniz alternatif modlar yalnızca bunlardır.
Örneğin, kullanıcı iptal ettikten sonra ancak abonelik sona ermeden önce aynı plan için bir geri kazanma fırsatı uyguluyorsanız yeni satın alma işlemini SubscriptionUpdateParams
içinde herhangi bir değer belirtmeden normal bir satın alma işlemi olarak işleyebilirsiniz. Sistem, abonelikte yapılandırdığınız varsayılan değiştirme modunu kullanır ve planın eski satın alma işleminden yeni satın almaya geçişini otomatik olarak gerçekleştirir.
Abonelikler arasında plan değiştirme veya varsayılan değiştirme modunu geçersiz kılma
Kullanıcı, abonelik ürünleri (farklı bir abonelik satın alıyor satın alıyor) değiştiriyorsa 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 kullanıma oranlı kullanım oranını belirtirsiniz.
Çalışma zamanı satın alma akışı yapılandırmanızın bir parçası olarak SubscriptionUpdateParams
öğesini doğru şekilde sağlamak için aşağıdaki kısıtlamalara dikkat edin:
- Ön ödemeli plan, otomatik yenilenen plan veya taksit planından ön ödemeli plana yükseltme, düşürme veya aynı abonelik geçişini başlatma işlemi sırasında izin verilen tek değişim modu
CHARGE_FULL_PRICE
'dir. Başka bir değiştirme modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir. - Aynı abonelikteki planlardan ön ödemeli plan veya otomatik yenilenen planlardan otomatik yenilenen planlara geçerken geçerli eşit oranlı lisans modları
CHARGE_FULL_PRICE
veWITHOUT_PRORATION
şeklindedir. Başka bir oranlama modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir. - Aynı abonelik ürünündeki planların, taksitli temel plandan taksitli olmayan bir temel plana geçirilmesine izin verilmez.
Değiştirme örnekleri ve davranışları
Bölüştürme modunun işleyiş şeklini anlamak için aşağıdaki senaryoyu inceleyin:
Samwise'ın Country Gardener uygulamasından online içeriğe aboneliği var. İçeriğin yalnızca metin içeren Tier 1 sürümüne aylık aboneliği var. Bu aboneliğin fiyatı aylık 2 ABD dolarıdır ve abonelik ayın ilk günü yenilenir.
Samwise 15 Nisan'da, video güncellemelerini ve yıllık 36 ABD doları maliyeti içeren Katman 2 aboneliğinin yıllık sürümüne geçmeyi seçti.
Geliştirici, aboneliği yükseltirken bir bölüşme modu seçer. Aşağıdaki listede her bir oranlama modunun Samwise'ın aboneliğini nasıl etkilediği açıklanmaktadır:
WITH_TIME_PRORATION
Sami'nin 1. Katman aboneliği hemen sona erer. Tam bir ay için ödeme yaptığı (1-30 Nisan) ancak abonelik döneminin ortasında yükseltme yaptığından, yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Bununla birlikte, yeni aboneliğin yıllık ücreti 36 ABD doları olduğundan, 1 ABD doları tutarındaki kredi bakiyesi yalnızca 10 gün (16-25 Nisan) için ödeme yapar. Bu nedenle, 26 Nisan'da yeni bir abonelik için 36 ABD doları ve sonraki her yılın 26 Nisan'ında 36 ABD doları daha alınır.
Satın alma işleminin başarılı olduğu anda uygulamanızın PurchasesUpdatedListener
çağrısı yapmanız gerekir ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilirsiniz. Arka ucunuz hemen bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır.
CHARGE_PRORATED_PRICE
Bu mod, zaman birimi başına Katman 2 abonelik fiyatının (36 ABD doları/yıl = 3 ABD doları/ay), zaman birimi başına Katman 1 abonelik fiyatından (2 ABD doları/ay) daha yüksek olması nedeniyle kullanılabilir. Sami'nin 1. Katman aboneliği hemen sona erer. Can, bir ayın tamamını ödemiş ancak yalnızca yarısını kullanmış olduğundan, yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Ancak, bu yeni aboneliğin ücreti yılda 36 ABD doları olduğundan, kalan 15 günün maliyeti 1,50 ABD dolarıdır. Bu nedenle yeni aboneliği için 0,50 ABD doları ücret alınır. Samwise, 1 Mayıs'ta yeni abonelik katmanı için 36 ABD doları ve sonraki her yıl 1 Mayıs'ta 36 ABD doları daha ödeme alır.
Satın alma işleminin başarılı olduğu anda uygulamanızın PurchasesUpdatedListener
çağrısı yapmanız gerekir ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilirsiniz. Arka ucunuz hemen bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır.
WITHOUT_PRORATION
Samwise'ın 1. Katman aboneliği, ücretsiz olarak hemen 2. Katman'a yükseltilir. 1 Mayıs'ta yeni abonelik katmanı için 36 ABD doları ve sonraki her yılın 1 Mayıs'ında 36 ABD doları daha ödeme alınır.
Satın alma işleminin başarılı olduğu anda uygulamanızın PurchasesUpdatedListener
çağrısı yapmanız gerekir ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilirsiniz. Arka ucunuz hemen bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır.
DEFERRED
Sami'nin 1. Katman aboneliği, 30 Nisan'da sona erene kadar devam ediyor. 2. Katman aboneliği 1 Mayıs'ta yürürlüğe girer ve Samwise yeni abonelik katmanı için 36 ABD doları ücret alır.
Satın alma işleminin başarılı olduğu anda uygulamanızın PurchasesUpdatedListener
çağrısı yapmanız gerekir ve yeni satın alma işlemini bir queryPurchasesAsync()
çağrısının parçası olarak alabilirsiniz. Arka ucunuz hemen bir
SUBSCRIPTION_PURCHASED
Gerçek Zamanlı Geliştirici Bildirimi alır. Satın alma işlemini, diğer yeni satın alma işlemlerinde olduğu gibi işlemeniz gerekir. Özellikle, yeni satın alma işlemini onayladığınızdan emin olun. Yeni abonelik startTime
alanının, değiştirme işleminin geçerli olduğu anda (eski aboneliğin süresi dolduğunda) doldurulduğunu unutmayın. Bu noktada, yeni abonelik planı için bir SUBSCRIPTION_RENEWED
RTDN alırsınız. Ertelenen değişimi işleme bölümünde ReplacementMode.DEFERRED
davranışı hakkında daha fazla bilgi edinin.
CHARGE_FULL_PRICE
Sami'nin 1. Katman aboneliği hemen sona erer. Ali'nin 2. Katman aboneliği bugün başlar ve 36 ABD doları ücret alınır. Bir ayın tamamı için ödeme yaptığı halde yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Bu yeni aboneliğin ücreti 36 ABD doları olduğu için yılın 1/36'sında abonelik süresine (yaklaşık 10 gün) eklenir. Bu durumda Samwise'ın bir sonraki ödemesi 1 yıl 10 gün sonra 36 ABD doları olur. Sonrasında her yıl 36 ABD doları ücret alınır.
Kullanıma oranlı bir mod seçerken değişimle ilgili önerilerimizi incelemeyi unutmayın.
Uygulama içi abonelik değişikliklerini tetikleyin
Uygulamanız, satın alma akışını başlatma adımlarını uygulayarak kullanıcılara yeni veya eski sürüme geçme olanağı sunabilir. Ancak yeni sürüme geçerken veya eski sürüme geçerken mevcut abonelik, gelecekteki (yükseltilmiş veya eski sürüme geçirilmiş) abonelik ve kullanılacak değişim moduyla ilgili ayrıntıları aşağıdaki örnekte gösterildiği gibi sağlamanız gerekir:
Kotlin
val offerToken = productDetails .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken() val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(offerToken) .build() ) ).setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken("old_purchase_token") .setSubscriptionReplacementMode( BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE ) .build() ).build() billingClient.launchBillingFlow( activity, billingParams ) // ...
Java
String offerToken = productDetails .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken(); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmuableList.of( ProductDetailsParams.newBuilder() // fetched via queryProductDetailsAsync .setProductDetails(productDetails) // offerToken can be found in // ProductDetails=>SubscriptionOfferDetails .setOfferToken(offerToken) .build())) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in Purchase#getPurchaseToken .setOldPurchaseToken("old_purchase_token") .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE) .build()) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams); // ...
Değiştirme önerileri
Aşağıdaki tabloda, farklı oranlama senaryoları ve her senaryo için önerdiklerimiz gösterilmektedir:
Senaryo | Önerilen değişim modu | Sonuç |
---|---|---|
Daha pahalı bir katmana geçme | CHARGE_PRORATED_PRICE |
Kullanıcıya aynı fatura dönemi korunurken hemen erişim sağlanır. |
Daha ucuz bir katmana geçme | DEFERRED |
Kullanıcı daha pahalı olan katman için zaten ödeme yaptığından bir sonraki faturalandırma tarihine kadar erişmeye devam edebilir. |
Ücretsiz deneme sırasında yeni sürüme geçme, denemeyi sürdürme | WITHOUT_PRORATION |
Kullanıcı ücretsiz deneme erişimini korur ancak denemenin geri kalanında daha yüksek bir katmana geçer. |
Ücretsiz deneme süresinde yeni sürüme geçme - ücretsiz deneme erişimini sona erdirme | CHARGE_PRORATED_PRICE |
Kullanıcı yeni katmana hemen erişebilir ancak artık ücretsiz denemeden yararlanamaz. |
Abonelik değişikliği satın alma işlemlerini yönetme
Plan değişiklikleri, tüm şartlar ve amaçlar için yapılan yeni satın almalardır ve faturalandırma akışı başarıyla tamamlandıktan sonra bu şekilde işlenip onaylanmalıdır. Yeni satın alma işlemini uygun bir şekilde işlemenin yanı sıra, değiştirilen satın alma işlemini de iptal etmeniz gerekir.
Uygulama içi davranış, tüm yeni satın alma işlemleriyle aynıdır. Uygulamanız, yeni satın alma işleminin sonucunu PurchasesUpdatedListener
üzerinden alır ve yeni satın alma işlemi queryPurchasesAsync
üzerinden kullanılabilir.
Bir satın alma işlemi mevcut bir kaynağın yerine geçtiğinde Google Play Geliştirici API'si abonelik kaynağında bir linkedPurchaseToken
döndürür. Eski jetonun hizmetlerinize erişim elde etmek amacıyla kullanılmadığından emin olmak için linkedPurchaseToken
içinde sağlanan jetonu geçersiz kıldığınızdan emin olun. Sürüm yükseltme ve düşürme satın alma işlemlerinin ele alınması hakkında bilgi için Yeni sürüme geçme, eski sürüme geçme ve yeniden kaydolma işlemleri bölümüne bakın.
Yeni satın alma jetonunu aldığınızda, yeni satın alma jetonunu doğrulama işleminin aynısını uygulayın. Bu satın alma işlemlerini, Google Play Faturalandırma Kitaplığı'ndan BillingClient.acknowledgePurchase()
veya Google Play Developer API'den Purchases.subscriptions:acknowledge
ile onayladığınızdan emin olun.
Ertelenen değiştirme işlemini gerçekleştirme
Ertelenen değiştirme modu, yeni planı kullanmaya başlamadan önce kullanıcının eski planında kalan yararlanma hakkını kullanmasına olanak tanır.
Yeni bir satın alma işlemi için ChangementMode.DEFERRED öğesini kullandığınızda,
queryPurchasesAsync()
satın alma akışından sonra yeni bir satın alma jetonu döndürülür. Bu jeton, yenilemenin sonraki yenileme tarihi olana kadar eski ürünle ilişkili olarak kalır.
Geçmişte, bu kullanıcı deneyimini kullanımdan kaldırılan ProrationMode.DEFERRED
ile elde edebiliyordunuz ancak ProrationMode.DEFERRED
, Play Faturalandırma Kitaplığı 6 ile 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 (kullanımdan kaldırıldı) |
DeğiştirmeModu.DEFERRED |
Satın alma akışı başarılı olduktan hemen sonra (uygulama) |
Satın alma işleminden sonra, yükseltme veya düşürme işleminin başarılı olup olmadığıyla birlikte Eski plandan yararlanma hakkı bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru yetkiyi verdiğinden emin olmak için Yeni satın alma jetonu gösterilmediğinden şu anda işlenemez. |
Satın alma işleminden sonra, yükseltme veya düşürme işleminin başarılı olup olmadığıyla birlikte
Yeni satın alma jetonu gösterildiğinden, değiştirme işleminin zamanı dikkate alınarak bu aşamada işlenmelidir. |
Satın alma akışı başarılı olduktan hemen sonra (arka uç) |
SUBSCRIPTION_PURCHASED RTDN, satın alma akışından sonra gönderilmez. Arka uçta yeni satın alma işleminden henüz haberdar olunmadı. |
Eski product_id değerine sahip SUBSCRIPTION_PURCHASED RTDN, yeni satın alma jetonu için satın alma akışından hemen sonra gönderilir. purchases.subscriptionsv2.get yöntemi yeni satın alma jetonuyla çağrıldığında, iki satır öğesiyle satın alma zamanını belirten "startTime" içeren bir satın alma işlemi döndürülür:
Eski satın alma jetonu için SUBSCRIPTION_EXPIRED gönderildi. purchases.subscriptionsv2.get yöntemi eski satın alma jetonuyla çağrıldığında, kodun süresi dolmuş görünür (eski planın yararlanma hakkı, kalan süre boyunca yeni satın alma işlemine aktarılır). |
Değişim işleminde: Satın alma akışından sonra ilk yenileme (uygulama) |
Yeni satın alma jetonu kullanıma sunulduğundan işlenmesi gerekir. |
Satın alma akışı başarılı olduğunda, yeni satın alma işleminin zaten işlenmiş olması gerekir. Bu nedenle uygulama, doğru yararlanma hakkının verildiğinden emin olmak dışında özel bir işlem yapmamalıdır. |
Değişim işleminde - satın alma akışından sonraki ilk yenileme (arka uç) |
Yeni satın alma işleminiz artık ilk SUBSCRIPTION_RENEWED RTDN gönderildiğinde işlenebilir ve onaylanabilir. Abonelik kaynağındaki |
Yeni satın alma işlemi, yeni satın alma jetonu için SUBSCRIPTION_PURCHASED RTDN gönderilip "startTime" olarak kaydedildiğinde işlendi ve onaylandı. ReplacementMode.DEFERRED ile ilk yenilemeler, diğer tüm yenilemelerde olduğu gibi standart bir davranış temel alınarak yapılır ve bu etkinlik gerçekleştiğinde değiştirme için özel bir mantık işlemeniz gerekmez. Yeni satın alma jetonuyla purchases.subscriptionsv2.get yöntemi çağrıldığında, iki satır öğesi içeren bir satın alma işlemi döndürülür:
|
Yararlanma hakkı değişiklikleri konusunda aynı davranışı sergilediği, ancak satın alma işlemini diğer yeni satın almaların davranışlarıyla daha tutarlı bir şekilde yönetebileceğiniz bir yöntem sunduğundan artık kullanımdan kaldırılan ProrationMode.DEFERRED yerine ReplacementMode.DEFERRED kullanılmalıdır.
Müşteri yönetimi
Gerçek zamanlı geliştirici bildirimlerini kullanarak, bir kullanıcının ne zaman iptal etmeye karar verdiğini gerçek zamanlı olarak tespit edebilirsiniz. Bir kullanıcı aboneliğini iptal ettiğinde, ancak aboneliği sona ermeden önce, yeniden abone olmalarını istemek için onlara push bildirimleri veya uygulama içi mesajlar gönderebilirsiniz.
Bir kullanıcı, aboneliğini iptal ettikten sonra bu kullanıcıyı uygulamanızdan veya Play Store üzerinden geri kazanmayı deneyebilirsiniz. Aşağıdaki tabloda çeşitli abonelik senaryoları, ilişkili geri kazanma işlemleri ve uygulama gereksinimleri açıklanmaktadır.
Aboneliğin süresi dolmadan önce | Abonelik süresi dolduktan sonra | |||
Uygulama içi | Play Store'da | Uygulama içi | Play Store'da | |
Kazanma özelliği | Uygulama içi abonelik | Geri yükle | Uygulama içi abonelik | Yeniden abone olun |
Kullanıcı ödeme akışından geçer | Evet | Hayır | Evet | Evet |
Kullanıcı aboneliği aynı SKU ile ilişkili kalmaya devam eder | Kullanıcı aynı veya farklı bir SKU'ya kaydolabilir | Evet | Kullanıcı aynı veya farklı bir SKU'ya kaydolabilir | Evet |
Yeni satın alma jetonu oluşturur | Evet | Hayır | Evet | Evet |
Varsayılan olarak etkindir | Hayır | Evet, tüm geliştiriciler için destek gerekiyor | Hayır |
Faturalandırma Kitaplığı 2.0+ olmayan uygulamalar: Hayır Faturalandırma Kitaplığı 2.0 ve sonraki sürümleri olan 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ıyorsanız: Orantılı şekilde paylaşım moduna bağlıdır. |
Geçerli fatura döneminin sonu | Hemen | Hemen |
Uygulama gerekli | Uygulamanızda yeniden kayıt için bir kullanıcı arayüzü sağlayın |
Abonelik durumundaki değişikliği algılama Play Store ile derin bağlantı |
Uygulamanızda yeniden kaydolma için bir kullanıcı arayüzü sağlayın | Uygulama dışı satın alma işlemlerini yönetme |
Aboneliğin süresi dolmadan önce - uygulama içi
İptal edilmiş ancak henüz süresi dolmamış aboneliklerde, yeni abonelere yönelik uygulama içi ürün satın alma akışının aynısını uygulayarak abonelerin uygulamanızdan aboneliklerini eski durumuna getirmelerine izin verebilirsiniz. Kullanıcı arayüzünüzde, kullanıcının mevcut bir aboneliğinin olduğundan emin olun. Örneğin, kullanıcının mevcut son kullanma tarihini ve yinelenen fiyatı Yeniden etkinleştir düğmesiyle göstermek isteyebilirsiniz.
Çoğu zaman, kullanıcıya daha önce abone olduğu fiyat ve SKU'yu aşağıdaki şekilde sunmak istersiniz:
- Aynı SKU ile yeni bir abonelik satın alma işlemi başlatın.
- Yeni abonelik, eski aboneliğin yerini alır ve aynı sona erme tarihinde yenilenir. Eski abonelik hemen süresi doldu olarak işaretlenir.
- Örneğin, Achilles'ın Örnek Müzik Uygulaması aboneliği var ve aboneliğin süresi 1 Ağustos'ta sona erecek. 10 Temmuz'da, her ay aynı fiyatla bir aylık aboneliğe yeniden abone oluyor. Yeni abonelik kalan krediyle eşit olarak dağıtılır, hemen etkin olur ve 1 Ağustos'ta yenilenmeye devam eder.
Farklı bir fiyat (örneğin, yeni bir ücretsiz deneme veya geri kazanma indirimi) sunmak isterseniz bunun yerine kullanıcıya farklı bir SKU sunabilirsiniz:
- Değiştirme modunu
WITHOUT_PRORATION
kullanarak farklı SKU'yla yeni sürüme veya eski sürüme geçiş başlatın. - Yeni abonelik, eski aboneliğin yerini alır ve aynı sona erme tarihinde yenilenir. İlk geçerlilik bitiş tarihinde kullanıcıdan yeni SKU'nun fiyatı (tanıtım fiyatları dahil) alınır. Eski abonelik kod karartma uygulanmış bir hesap kimliği kullanılarak oluşturulmuşsa üst ve alt sürüme geçme işlemleri için aynı kimlik
BillingFlowParams
'ye de iletilmelidir. - Örneğin, Achilles'ın Örnek Müzik Uygulaması aboneliği var ve aboneliğin süresi 1 Ağustos'ta sona erecek. 10 Temmuz'da tanıtım fiyatıyla yıllık aboneliğe yeniden abone olur. Yeni abonelik hemen etkinleşir ve kullanıcıdan 1 Ağustos'ta tanıtım fiyatından ödeme alınır.
- Geri kazanma SKU'nuza ücretsiz deneme veya tanıtım fiyatı eklemeye karar verirseniz Google Play Console'daki Uygulama başına bir ücretsiz denemeye izin ver kutusunun işaretini kaldırarak kullanıcının uygun olduğundan emin olun. Bu kutu, kullanıcıyı uygulama başına bir ücretsiz denemeyle sınırlandırır.
Satın alma jetonunu aldığınızda, satın alma işlemini yeni bir abonelikte yaptığınız gibi yapın. Buna ek olarak, Google Play Geliştirici API'si abonelik kaynağında bir linkedPurchaseToken
döndürür. Eski jetonun hizmetlerinize erişim elde etmek amacıyla kullanılmadığından emin olmak için linkedPurchaseToken
içinde sağlanan jetonu geçersiz kıldığınızdan emin olun.
Aboneliğin süresi dolmadan önce - Play Store'da
Abonelik iptal edilmiş ancak 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ükleyebilirler. Bu durumda aynı abonelik ve satın alma jetonu kullanılır.
![google Play Store uygulamasında, iptal edilmiş bir aboneliği gösteren ve yeniden abone ol düğmesi bulunan abonelikler bölümü](https://developer.android.com/static/images/google/play/billing/resubscribe.jpg?authuser=6&hl=tr)
Abonelikleri geri yükleme hakkında daha fazla bilgi için Geri yükleme başlıklı makaleyi inceleyin.
Abonelik süresi dolduktan sonra - uygulama içi
Yeni abonelerle aynı uygulama içi ürün satın alma akışını uygulayarak süresi dolmuş abonelerin uygulamanızda yeniden abone olmalarını sağlayabilirsiniz. Aşağıdakileri göz önünde bulundurun:
- Kullanıcılara indirim sunmak amacıyla aboneliğiniz için özel fiyatlandırmaya sahip bir ürün kimliği sunmak isteyebilirsiniz. Bu ürün kimliği, geri kazanma SKU'su olarak da adlandırılır. Teklifi uygulamanızda sunabilir veya kullanıcıya teklifi uygulama dışında (ör. e-posta) bildirebilirsiniz.
- Geri kazanma aboneliği başlatmak için Google Play Faturalandırma Kitaplığı'nı kullanarak Android uygulamanızda satın alma akışını başlatın. Bu süreç yeni aboneliktekiyle aynıdır ancak kullanıcının kullanabileceği SKU'yu belirleyebilirsiniz.
- Geri kazanma SKU'nuza ücretsiz deneme veya tanıtım fiyatı eklemeye karar verirseniz Google Play Console'daki Uygulama başına bir ücretsiz denemeye izin ver kutusunun işaretini kaldırarak kullanıcının uygun olduğundan emin olun. Bu kutu, kullanıcıyı uygulama başına bir ücretsiz denemeyle sınırlandırır.
- Kullanıcı aynı SKU'ya yeniden abone olursa ücretsiz denemelerden veya tanıtım fiyatından yararlanamaz. Kullanıcı arayüzünüzün bunu yansıttığından emin olun.
Satın alma jetonunu aldığınızda, satın alma işlemini yeni bir abonelikte yaptığınız gibi yapın. Abonelik kaynağında bir linkedPurchaseToken
almazsınız.
Abonelik süresi dolduktan sonra - Play Store'da
Bu özellik etkinleştirilirse kullanıcılar Google Play abonelik merkezinde Yeniden abone ol'u tıklayarak süre dolduktan sonra bir yıla kadar aynı SKU'ya yeniden abone olabilirler. Bu işlem yeni bir abonelik ve satın alma jetonu oluşturur.
![google Play Store uygulamasında, iptal edilmiş veya süresi dolmuş bir aboneliği gösteren, yeniden abone ol ve kaldır düğmelerinin bulunduğu abonelikler bölümü](https://developer.android.com/static/images/google/play/billing/resubscribe-remove.jpg?authuser=6&hl=tr)
Yeniden abonelik, uygulama dışı satın alma işlemi olarak kabul edilir. Bu nedenle, uygulamanızın dışından yapılan satın alma işlemlerini ele alma ile ilgili en iyi uygulamaları takip ettiğinizden emin olun.
Aboneliğinizi tanıtın
Seçili kullanıcılara mevcut bir abonelik için uzatılmış ücretsiz deneme süresi vermek için promosyon kodları oluşturabilirsiniz. Daha fazla bilgi edinmek için Promosyon kodları bölümünü inceleyin.
Google Play, ücretsiz denemelere başlamadan önce kullanıcının geçerli bir ödeme yöntemine sahip olduğunu doğrular. Bazı kullanıcılar bu doğrulamayı ödeme yöntemlerinde bekletme veya ödeme olarak görebilirler. Bu bloke işlemi veya ödeme geçici olup daha sonra geri alınır ya da geri ödenir.
Deneme süresi sona erdikten sonra, abonelik tutarının tamamı kullanıcının ödeme yönteminden alınır.
Bir kullanıcı ücretsiz deneme süresinin herhangi bir noktasında aboneliği iptal ederse abonelik denemenin sonuna kadar etkin kalır ve ücretsiz deneme süresi sona erdiğinde kullanıcıdan ücret alınmaz.
İptal etme, geri ödeme veya iptal etme
Bir aboneliği iptal etmek, geri ödeme yapmak veya iptal etmek için Google Play Geliştirici API'sini kullanabilirsiniz. Bu işlev Google Play Console'da da kullanıma sunulmuştur.
- İptal: Kullanıcılar Google Play'de bir aboneliği iptal edebilir. Ayrıca, kullanıcılara uygulamanızdan veya web sitenizden iptal etme seçeneği de sunabilirsiniz. Uygulamanız bu iptal işlemlerini İptaller bölümünde açıklandığı gibi işlemelidir.
- 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 hata giderilmişse geri ödeme yapılabilir. En son yapılan ödemeden daha yüksek bir geri ödeme yapmak veya kısmi bir geri ödeme yapmak istiyorsanız Google Play Console'u kullanmanız gerektiğini unutmayın.
- İptal et: İptal ettiğinizde kullanıcı, aboneliğe erişimini hemen kaybeder. Örneğin, kullanıcının ürününüze erişmesini engelleyen teknik bir hata varsa ve kullanıcı ürünü kullanmaya devam etmek istemiyorsa bu seçeneği kullanabilirsiniz. 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 | Parayı geri öde | Erişimi iptal etme | |
İptal | Evet | Hayır | Hayır |
Geri ödeme | Hayır | Evet | Hayır |
İptal et | Evet | Evet | Evet |
Abonenin faturalandırmayı erteleme
Otomatik yenilenen abonelerin bir sonraki faturalandırma tarihini, Google Play Developer API'de Purchases.subscriptions:defer
kullanarak ileri bir tarihe taşıyabilirsiniz. Erteleme süresi boyunca kullanıcı, içeriğinize tam erişimle abone olur ancak ücretlendirilmez. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.
Ön ödemeli planlarda geçerlilik bitiş süresini ertelemek için faturalandırma API'sini kullanabilirsiniz.
Ertelenen faturalandırma aşağıdakileri yapmanıza olanak sağlar:
- Özel bir teklif olarak kullanıcılara ücretsiz erişim verin (ör. bir filmi satın almaları için bir hafta ücretsiz verme).
- Müşterilere iyi niyetinizin göstergesi olarak ücretsiz erişim sunun.
Faturalandırma, API çağrısı başına bir gün ile bir yıla kadar ertelenebilir. Faturalandırmayı daha da ertelemek için yeni faturalandırma tarihi gelmeden API'yi tekrar çağırabilirsiniz.
Örneğin, Darcy'nin Fishing Quarterly uygulaması için aylık online içerik aboneliği vardır. Normalde her ayın ilk gününde 1,25 İngiliz sterlini tutarında faturalandırılırsınız. Mart ayında, uygulama yayıncısı için online bir ankete katıldı. Yayıncı, bir sonraki ödemeyi 15 Mayıs'a kadar, yani daha önce planladığı 1 Nisan olan faturalandırma tarihinden altı hafta sonraya erteleyerek kızını altı hafta ücretsiz olarak ödüllendirir. Nisan veya Mayıs başı için ücret alınmaz ve Darcy hâlâ içeriğe erişimi vardır. 15 Mayıs'ta aylık abonelik ücreti olarak 1, 25 İngiliz sterlini alınır. Bir sonraki yenileme tarihi 15 Haziran'dır.
Erteleme sırasında, faturalandırma tarihinin değiştiğini bildirmek için kullanıcıya e-postayla veya uygulama içinden bildirim gönderebilirsiniz.
Reddedilen ödemelerle ilgilenme
Abonelik yenileme işlemlerinde ödeme sorunları varsa Google, iptal etmeden önce düzenli aralıklarla aboneliği bir süre daha yenilemeyi dener. Bu kurtarma süresi, bir ek süreden ve ardından hesabı askıya alma süresinden oluşabilir. Bu süre zarfında Google, kullanıcıya e-postalar ve bildirimler göndererek ödeme yöntemlerini güncellemesini ister.
Ödeme reddedildikten sonra abonelik, yapılandırılmışsa ek yayınlanma süresi başlar. Ek süre boyunca kullanıcının abonelikten yararlanma haklarına hâlâ erişimi olduğundan emin olmanız gerekir.
Ek süre sona erdiğinde abonelik bir hesap askıya alma süresine girer. Hesabı askıya alındığı sırada, kullanıcının abonelikten yararlanma haklarına erişimi olmadığından emin olmanız gerekir.
Otomatik yenilenen temel planların ek sürelerinin ve askıya alma işlemlerinin uzunluğunu Google Play Console'da belirtebilirsiniz. Varsayılan değerlerden daha kısa uzunluklar belirtmek, ödeme retlerinden kurtarılan aboneliklerin sayısını azaltabilir.
Ödemenin reddedilmesi durumunda aboneliğin kurtarılma olasılığını en üst düzeye çıkarmak için, kullanıcınızı ödeme sorunuyla ilgili bilgilendirip sorunu düzeltmesini isteyebilirsiniz.
Bu işlemi ek yayınlanma süresi ve hesabı askıya alma bölümlerinde açıklandığı gibi kendiniz yapabilir veya Google'ın uygulamanızda kullanıcılara bir mesaj gösterdiği uygulama içi mesajlaşma API'sini uygulayabilirsiniz.
Uygulama içi mesajlaşma
InAppMessageCategoryId.TRANSACTIONAL
ile uygulama içi mesajlaşmayı etkinleştirdiyseniz Google Play, kullanıcılara ek süre boyunca mesaj gösterir ve hesapları günde bir kez askıya alır. Bu sayede kullanıcılara uygulamadan ayrılmadan ödemelerini düzeltme fırsatı sunar.
![Kullanıcıyı ödemeyi düzeltmesi için bilgilendiren Snackbar](https://developer.android.com/static/images/google/play/billing/subscriptions-in-app-messaging-snackbar.png?authuser=6&hl=tr)
Kullanıcı uygulamayı her açtığında mesajın gösterilip gösterilmeyeceğini belirlemek için bu API'yi çağırmanızı öneririz.
Kullanıcı, aboneliğini başarıyla kurtardıysa satın alma jetonuyla birlikte SUBSCRIPTION_STATUS_UPDATED
yanıt kodu alırsınız. Daha sonra bu satın alma jetonunu, Google Play Geliştirici API'sini çağırmak ve uygulamanızdaki abonelik durumunu yenilemek için kullanmanız gerekir.
Uygulama içi mesajlaşmayı entegre edin
Kullanıcıya uygulama içi mesajlaşmayı göstermek için BillingClient.showInAppMessages()
simgesini kullanın.
Uygulama içi mesajlaşma akışını tetiklemeye ilişkin bir örneği burada 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. } } });
Bekleyen abonelik işlemlerini yönetme
Bekleyen işlemler; ilk satın alma, para ekleme, yükseltme veya düşürme sırasında gerçekleşebilir. Abonelik satın alma işlemi SUBSCRIPTION_STATE_ACTIVE
'e geçmeden önce SUBSCRIPTION_STATE_PENDING
durumunda başlar. İşlem süresi dolduysa veya kullanıcı tarafından iptal edilirse SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED
adlı eve aktarılır. Kullanıcının yararlanma hakkını yalnızca işlem tamamlandıktan sonra güncellemelisiniz ve güncellemelisiniz.
Bekleyen işlemleri olan ilk satın alma işlemleri için abonelik durumu değişikliği çok kolaydır. Kullanıcı bekleyen bir işlem başlattığında uygulamanız PENDING
durumunda bir Purchase
alır. İşlem tamamlandığında uygulamanız Purchase
değerini PURCHASED
olarak güncellenmiş şekilde tekrar alır. RTDN istemcinize SUBSCRIPTION_PURCHASED
türünde bir SubscriptionNotification
mesajı gönderilir. Satın alma işlemini doğrulamak için normal süreci izleyin, kullanıcının içeriğe erişmesine izin verin ve satın alma işlemini onaylayın. İşlemin süresi dolarsa veya iptal edilirse RTDN istemcinize SUBSCRIPTION_PENDING_PURCHASE_CANCELED
türünde bir SubscriptionNotification
mesajı gönderilir. Bu gibi durumlarda, kullanıcı içeriğe hiçbir zaman erişim elde etmemiş olmalıdır.
Bekleyen işlemlerle para ekleme, yükseltme veya düşürme işlemleri hem eski hem de yeni abonelikler için durum değişiklikleri içerir. Kullanıcı beklemede olan bir para ekleme, yeni sürüme geçme veya düşürme işlemi başlattığında uygulamanız, eski abonelik için PendingPurchaseUpdate
nesnesine sahip bir Purchase
alır. Bu aşamada kullanıcı eski aboneliği kullanmaya devam etmektedir ve yeni aboneliği henüz almamıştır. 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 jetonu ve durumu PURCHASED
olarak ayarlanmış bir Purchase
alır. RTDN istemcinize SUBSCRIPTION_PURCHASED
türünde bir SubscriptionNotification
mesajı gönderilir. Şu an için 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ünde bir SubscriptionNotification
mesajı gönderilir. Bu gibi durumlarda, kullanıcı eski aboneliğin içeriğine hâlâ erişebilir.