Eklentili abonelik, birlikte satın alınabilen, faturalandırılabilen ve yönetilebilen birden fazla abonelik ürününü bir araya getirmenize olanak tanır. Mevcut ürün kataloğu abonelikleriniz, önceden belirtme veya ek yapılandırma gerektirmeden sorunsuz bir şekilde eklenti olarak sunulabilir. Mevcut birden fazla abonelik ürünüyle bir satın alma süreci başlatabilir ve bunları eklenti olarak satabilirsiniz.
Dikkat edilmesi gereken noktalar
Eklentili abonelik özelliğini kullanırken aşağıdaki noktaları göz önünde bulundurun:
Eklentili abonelik yalnızca otomatik yenilenen temel planlarda desteklenir.
Satın alma işlemindeki tüm öğeler aynı yinelenen faturalandırma dönemine sahip olmalıdır. Örneğin, yıllık faturalandırılan bir aboneliğiniz varsa aylık faturalandırılan eklentiler kullanamazsınız.
Ek özellikler satın alınmış bir abonelikte en fazla 50 öğe olabilir.
Bu özellik Güney Kore'de (KR) kullanılamaz.
Play Faturalandırma Kitaplığı ile entegrasyon
Bu bölümde, eklentilerle birlikte abonelik özelliğinin Play Faturalandırma Kitaplığı (PBL) ile nasıl entegre edileceği açıklanmaktadır. Bu dokümanda, PBL bağımlılığını uygulamanıza ekleme, BillingClient'ı başlatma ve Google Play'e bağlanma gibi ilk PBL entegrasyonu adımlarına aşina olduğunuz varsayılır. Bu bölümde, eklentilerle birlikte aboneliklere özel olan PBL entegrasyonu yönlerine odaklanılır.
Satın alma süreci başlatma
Eklentiler içeren bir abonelik için satın alma akışı başlatmak üzere aşağıdaki adımları uygulayın:
BillingClient.queryProductDetailsAsyncyöntemini kullanarak tüm abonelik öğelerinizi getirin.Her öğe için
ProductDetailsParamsnesnesini ayarlayın.ProductDetailsParamsnesnesiyle temsil edilen öğe, hem abonelik öğesini belirtenProductDetailshem de belirli bir aboneliğibase planveyaofferseçenofferTokenöğesini belirtir.Öğe ayrıntılarını
BillingFlowParams.Builder.setProductDetailsParamsListyönteminde belirtin.BillingFlowParamssınıfı, satın alma sürecinin ayrıntılarını belirtir.Aşağıdaki örnekte, birden fazla öğe içeren bir abonelik satın alma işlemi için faturalandırma akışının nasıl başlatılacağı gösterilmektedir:
Java
BillingClient billingClient = …; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ArrayList
productDetailsList = new ArrayList<>(); productDetailsList.add(productDetails1); productDetailsList.add(productDetails2); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Satın alma işlemindeki öğeler için geçerli kurallar
- Eklenti yenileme tarihlerinin temel öğeyle uyumlu olması için Google Play, deneme veya tanıtım fiyatı aşamalarından sonra orantılı bir ücret ekleyebilir.
- Teklif uygunluğu her öğe için ayrı ayrı değerlendirilir.
Satın alma işlemlerini işleme
Eklentilerle abonelik işleme, Google Play Faturalandırma Kitaplığı'nı uygulamanıza entegre etme bölümünde açıklandığı gibi tek bir abonelik satın alma işleminin işlenmesiyle aynıdır. Tek fark, kullanıcının tek bir satın alma işlemiyle birden fazla hak alabilmesidir. Eklentilerle birlikte abonelik satın alındığında, Google Play Faturalandırma Kitaplığı'nda Purchase.getProducts() kullanılarak alınabilen birden fazla öğe döndürülür. Bu öğeler, Google Play Developer API'nin purchases.subscriptionsv2.get bölümündeki lineItems listesinde yer alır.
Eklenti içeren abonelikleri değiştirme
Eklentilerle birlikte aboneliğinizde yapılan değişiklikler, yükseltme veya alt sürüme geçme ile sonuçlanır. Daha fazla bilgi için Abonelikleri yükseltme veya düşürme başlıklı makaleyi inceleyin.
Uygulamanızda eklentiler içeren mevcut bir abonelik satın alma işlemini değiştirmek veya geri yüklemek için ek parametrelerle launchBillingFlow API'sini çağırmanız ve aşağıdakileri sağlamanız gerekir:
- Her zaman geçerli abonelik satın alma işleminin satın alma jetonuyla
setOldPurchaseTokennumarası aranır. - Bir öğeyi yükseltmek, düşürmek veya çapraz yükseltmek için
SubscriptionProductReplacementParams.setReplacementModenumaralı telefonu arayarak plan değişikliğinin eski ve yeni satın alma öğesi arasında nasıl ele alınması gerektiğini belirtin. Aksi takdirdeSubscriptionProductReplacementParamsdeğerini ayarlamanıza gerek yoktur. - Temel öğe değiştirilmediğinde, belirli bir değiştirme davranışı uygulamak için
SubscriptionProductReplacementParams.setSubscriptionReplacementModeişlevini çağırabilirsiniz. Bu durumda geçerli olan kurallar için Aynı abonelik içinde yeniden abone olma veya plan değiştirme başlıklı makaleye bakın. - Yeni eklentiler, bir sonraki yenileme tarihinin abonelikteki temel öğeyle uyumlu olması için orantılı bir ücretle birlikte hemen uygulanır.
- Kaldırılan eklentilerin geçerlilik süresi, mevcut fatura dönemlerinin sonunda dolar.
- Faturalandırma akışını başlatırken, kaldırılacak olanlar hariç olmak üzere eklentili abonelikteki tüm etkin öğeleri ve yeni eklentileri belirtmeniz gerekir.
Aşağıdaki örnekte, eklentilerle birlikte abonelik satın alma işlemini değiştirirken launchBillingFlow API'sinin nasıl çağrılacağı gösterilmektedir:
Java
BillingClient billingClient = …; int replacementMode =…; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ProductDetailsParams productDetails3 = ...; ArrayListnewProductDetailsList = new ArrayList<>(); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) // No need to set if change does not affect the base item. .setSubscriptionReplacementMode(replacementMode) .build()) .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Abonelik değişikliği senaryoları
Aşağıdaki tabloda, eklentili abonelikle ilgili çeşitli değişiklik senaryoları ve bunlara karşılık gelen davranışlar listelenmiştir.
SubscriptionProductReplacementParams kullanılırken
| Mevcut öğeler | Değiştirilen öğeler | SubscriptionProductReplacementParams içinde değiştirme modunu ayarlamanız gerekiyor mu? | Davranış |
|---|---|---|---|
| A (temel öğe), B | A (temel öğe) | Evet (KEEP_EXISTING kullanın) |
|
| A | A (temel öğe), B | Evet (A için KEEP_EXISTING kullanın) |
|
| A (temel öğe), B | A (temel öğe), C | Evet (A için KEEP_EXISTING kullanın) |
|
| A (temel öğe), B | B (temel öğe) | Hayır | A, ertelenmiş kaldırma işlemi için planlandı. |
| A (temel öğe), B | C (temel öğe) | Evet |
|
| A (temel öğe), B | C (temel öğe), B | Evet |
|
| A (temel öğe), B | C (temel öğe), D | Evet |
|
| A (temel öğe), B | A (temel öğe), C | Evet |
|
| A (temel öğe), B, C | D (temel öğe), B, C | Evet |
|
SubscriptionUpdateParams kullanılırken
| Mevcut öğeler | Değiştirilen öğeler | Değiştirme bilgilerini ayarlamanız mı gerekiyor? | Davranış |
|---|---|---|---|
| A (temel öğe), B | A (temel öğe) | Hayır |
|
| A | A (temel öğe), B | Hayır |
|
| A (temel öğe), B | A (temel öğe), C | Hayır |
|
| A (temel öğe), B | B (temel öğe) | Hayır | A, ertelenmiş kaldırma işlemi için planlandı. |
| A (temel öğe), B | C (temel öğe) | Evet |
|
| A (temel öğe), B | C (temel öğe), B | Evet | A -> C yerine kullanılan, setSubscriptionReplacementMode'ya bağlıdır (PBL 8.1'de kullanımdan kaldırılmıştır). |
| A (temel öğe), B | C (temel öğe), D | Evet |
|
Gerçek zamanlı geliştirici bildirimleri
subscriptionId alanı, birden fazla öğe hakkı içeren eklentili abonelik satın alma işlemleri için RTDN'de sağlanmaz.
Bunun yerine, satın alma işlemini almak ve ilişkili öğe haklarını görmek için Play Developer API'lerini kullanabilirsiniz.
Mevcut aboneler için fiyat değişiklikleri
Eklenti satın alma özelliği olan bir aboneliğin mevcut aboneleri için abonelik fiyatlarını değiştirmek, Abonelik fiyatlarını değiştirme başlıklı makalede açıklandığı gibi tek bir aboneliğin fiyatlarını değiştirmeye benzer. Ancak bu bölümde açıklandığı gibi bazı sınırlamalar ve işlevsel farklılıklar vardır.
Eski fiyat grubunu sonlandırma
Eski bir grubu sonlandırmak, eklenti satın alma işlemleri içeren abonelikleri de etkiler. Aşağıdaki kurallar geçerlidir:
Tüm bekleyen kullanıcı onayı istenen fiyat artışları, yeni fiyatla aynı yenileme zamanına sahip olmalıdır. Ek içerik satın alma işlemi içeren bir abonelikteki öğelerden birinde, kullanıcı tarafından henüz onaylanmamış bir kullanıcı onayı istenen fiyat artışı varsa satın alma işlemindeki diğer öğeler için yeni kullanıcı onayı istenen fiyat artışları, BEKLEMEDE durumundaki mevcut fiyat artışıyla aynı yenileme zamanına neden olmadığı sürece yoksayılır. Kullanıcı fiyat artışını onayladıktan sonra daha yeni fiyat değişiklikleri kaydedilir. Kullanıcılar, onaylanmamış tüm fiyat artışlarını yalnızca tek seferde kabul edebilir.
Örnek:
- Eklentiler içeren bir aboneliğiniz (A ve B öğeleri) olduğunu ve aboneliğin her ayın 7'sinde yenilendiğini varsayalım.
- A öğesinin fiyatı 7 ABD dolarından 10 ABD dolarına yükseltiliyor ve fiyat artışının 7 Temmuz'da geçerli olması bekleniyor.
- B öğesi için 2 Haziran'da 5 ABD dolarından 6 ABD dolarına yeni bir fiyat taşıma işlemi başlatılır. Kullanıcı onayı istenen fiyat artışı, taşıma işleminden 37 gün sonra başlayacağından B öğesinin fiyatı en erken 7 Ağustos'ta artırılabilir.
Bu senaryoda, kullanıcı A öğesinin fiyat değişikliğini kabul edene kadar (CONFIRMED durumuna gelene kadar) B öğesinin fiyat değişikliği bu abonelik satın alma işlemi için kaydedilmez ve SubscriptionPurchaseV2, B öğesinin fiyat değişikliği ayrıntılarını döndürmez. Kullanıcı A öğesinin fiyat değişikliğini onayladıktan sonra B öğesinin fiyat değişikliği başlar. Kullanıcı, B öğesi için kullanıcı onayı istenen fiyat artışını yalnızca A öğesi için kullanıcı onayı istenen artışı kabul ettikten sonra alır.
Google Play'in e-postasında, aynı gün geçerli olacak fiyat artışları veya düşüşleri olan tüm öğelerin listesi yer alır.
Eklenti içeren aboneliği iptal etme
Kullanıcılar, eklenti içeren bir aboneliğin satın alma işleminin tamamını Play abonelik merkezinden iptal edebilir. Siz ise eklenti içeren bir aboneliğin satın alma işleminin tamamını yalnızca Google Play Developer API'yi kullanarak iptal edebilirsiniz.
Abonelik satın alma işlemi iptal edildiğinde ancak geri alınmadığında satın alma işlemindeki öğelerin hiçbiri otomatik olarak yenilenmez. Ancak kullanıcı, ilgili fatura dönemleri sona erene kadar ücretsiz denemeler de dahil olmak üzere hak kazandığı öğelere erişmeye devam eder.
Eklenti içeren abonelikleri iptal etme ve geri ödeme yapma
Aboneliklerin iptali ve geri ödemesiyle ilgili bazı kurallar aşağıda verilmiştir:
Play Console'u kullanarak, aboneliğe erişimi iptal etmeden belirli bir sipariş için tutara dayalı geri ödeme yapın.
Kullanıcının aboneliğe erişimini iptal etmeden yaptığı belirli abonelik ödemelerini tam olarak geri ödemek için
orders.refundnumaralı telefonu arayın.Tüm abonelik öğelerine erişimi anında iptal etmek için
purchases.subscriptionsv2.revokenumaralı telefonu arayın. Bu API ile şunları yapabilirsiniz:Tüm öğelere erişimi iptal edin ve orantılı geri ödeme yapın.
Ek özellikler içeren bir abonelik, orantılı geri ödemeler kullanılarak iptal edildiğinde her öğenin en son siparişi için geri ödeme yapılır. Geri ödeme tutarı, bir sonraki yenilemeye kadar kalan süreye göre orantılı olarak hesaplanır.
Tüm öğeler için erişimi iptal edin ve FullRefund (Tam Geri Ödeme) sağlayın.
Öğenin tam geri ödemesini yaparak öğeye erişimi iptal edin.
Eklentileri olan bir abonelikteki öğeleri tek tek iptal etme
Tüm satın alma işlemini iptal etmeden, eklentiler içeren bir abonelikteki tek tek abonelik öğelerini iptal etmek için RevocationContext içinde ItemBasedRefund alanı ayarlanmış olarak purchases.subscriptionsv2.revoke işlevini çağırın. İptal edilip geri ödemesi yapılacak öğenin productId, ItemBasedRefund alanında ayarlanabilir.
ItemBasedRefund alanı, otomatik yenilenen bir veya daha fazla abonelik öğesi içeren satın alma işlemleri için ayarlanabilir.
ItemBasedRefundiçinde belirtilen öğe iptal edildikten sonra abonelik satın alma işleminde hâlâ etkin öğeler varsa yalnızca bu öğe iptal edilir ve abonelik durumu kesintiye uğramadan tam olarak geri ödenir.ItemBasedRefundiçinde belirtilen öğe iptal edildikten sonra abonelik satın alma işleminde etkin öğe kalmazsa öğe iptal edilir, tam geri ödeme yapılır ve abonelik iptal edilir.
Dikkat edilmesi gereken noktalar
ItemBasedRefundkullanılırken tek seferde yalnızca bir öğe iptal edilebilir. Farklı öğelerin iptal edilmesi gerekiyorsa istek birden çok kez çağrılabilir.- Abonelik satın alma işlemi ödemenin reddedildiği durumlardan birindeyse veya
ItemBasedRefundiçinde belirtilen öğe, kullanıcının mülkiyetinde değilse ya da süresi dolmuşsa öğe kapatma işlemi engellenir. - Ön ödemeli abonelikte öğe devre dışı bırakma desteklenmez.
Faturalandırmayı erteleme
Eklentili bir aboneliğin bir sonraki fatura tarihini Purchases.subscriptionsv2:defer yöntemini kullanarak öne alabilirsiniz.
Eklenti içeren bir aboneliği ertelediğinizde, abonelikteki tüm öğeler aynı süreyle ertelenir. Kullanıcı, erteleme süresince tüm öğelere tam erişim hakkını korur ancak kendisinden ödeme alınmaz. Tüm öğelerin yenileme tarihi yeni tarihle güncellenir.
Bu özellik, promosyonlar veya müşteri memnuniyetine yönelik jestler için yararlı olabilir. Faturalandırma, API çağrısı başına en az bir gün ve en fazla bir yıl ertelenebilir. Yeni fatura tarihi gelmeden önce ertelemeyi uzatmak için API'yi birden çok kez çağırabilirsiniz.
Bu işlem yapıldığında SUBSCRIPTION_DEFERRED gerçek zamanlı geliştirici bildirimi tetiklenir.
Ödeme reddedildiğinde öğenin geçerlilik bitiş tarihi
Eklentili abonelik satın alımlarında, belirli yenilemelerde yalnızca öğe haklarının bir alt kümesinin uzatılması gerekebilir. Bu durumda, geçerlilik tarihi gelecekte olan öğeler etkilenmez.
Yenilemeye hangi öğelerin dahil olduğundan bağımsız olarak, yenileme ödemesi reddedilirse abonelik satın alma işlemi, aşağıdaki belgede açıklandığı gibi ek süreye girer ve hesap bekletilir.
Toparlanma dönemi seçimi
Ek süre, kullanıcıya hak vermeye devam ettiğinden eklentili bir abonelik satın alındığında yenileme ödemesi reddedilir. Bu durumda, tüm etkin öğeler arasında en kısa ek süreye sahip öğe seçilir ve bu yenileme için kurtarma süresi olarak bu öğenin ek süresi ve hesabı askıya alma süresi uygulanır.
Etkin öğeler, yenileme denemesinden hemen önce eklentilerle birlikte abonelik satın alma işleminde etkin olan öğeleri içerir. Yeni eklenen öğeler (kurtarma işleminden sonra hak kazanılacak) ve kaldırma veya kapatma nedeniyle artık etkin olmayan öğeler hariçtir.
Seçilen minimum ek sürenin bulunduğu öğenin hesabı askıya alma ayarı uygulanır. Minimum ek süresi aynı ancak hesabı askıya alma süresi farklı olan birden fazla öğe varsa en uzun hesabı askıya alma süresi uygulanır.
Ek süre
Abonelik yenileme ödemesi reddedildiğinde abonelik satın alma işlemi ek süre durumuna girer. Ek süre boyunca kullanıcı, önceki yenileme dönemindeki tüm etkin öğelere erişmeye devam eder. Ek sürenin sonunda ödeme yöntemi düzeltilmezse abonelik satın alma işleminin tamamı askıya alınır. Ek süre içinde başka öğelerin yenileme tarihi gelirse abonelik ödeme reddinden kurtulduktan sonra bu öğeler için yeni bir ödeme denemesi başlatılır.
Hesabı askıya alma
Abonelik satın alma işlemi hesap askıya alınmış durumdayken, ödeme alınana kadar tüm abonelik öğelerine erişim askıya alınır.
Hesabın askıya alınması durumunda abonelik kurtarılırsa abonelik satın alma işlemi olduğu gibi devam eder. Abonelik kurtarılmazsa ödeme reddiyle ilgili öğelerin süresi dolar ve diğer öğelere erişim, fatura dönemlerinin geri kalanında devam eder.
Örnek:
Bir kullanıcının her ayın 1'inde yenilenen Temel Planım aboneliği var. Ardından 15 Ağustos'ta yedi günlük ücretsiz deneme süresiyle aylık 10 ABD doları tutarında Eklenti planı ekliyor. Öğelerin ikisinde de ek süre ayarlanmamış ve her ikisinde de 30 günlük askıya alınmış hesap süresi var.
Kullanıcıdan 22 Ağustos'ta 31 Ağustos'a kadar olan süre için orantılı olarak 2,90 ABD doları (10*9/31) ödeme alınır ancak kullanıcının ödeme yönteminin geçerliliği bu tarihten önce sona erer ve abonelik 22 Ağustos'ta ödeme reddi durumuna düşer.
Ödeme reddedildiği için abonelik askıya alındığında kullanıcı, eklentiler içeren abonelikteki öğelerin hiçbirine erişemez. Yenilenmeyen öğelerin kalan süresi, ödeme kurtarıldığı veya iptal edildiği için abonelik hesap askıya alma durumundan çıktığında kullanıcılara geri verilir.
Önceki örnekte, bir abonelik 22 Ağustos'ta hesap bekletmeye alınır.
Hesap, 1 Eylül'deki genel yenileme tarihinden önce, 25 Ağustos'ta kurtarılırsa kullanıcı aynı gün hem Base Plan'im hem de ek plan'a erişimini yeniden kazanır. Sonraki fatura tarihi 4 Eylül olarak değiştirildi.
Hesap 30 gün içinde kurtarılmazsa abonelik 21 Eylül'de iptal edilir ve kullanıcı, 30 Eylül'e kadar ek plan erişimini kaybeder ve temel planıma erişimi devam eder.
Bu örnekte, ek süre ve hesap askıya alma döneminden sonra bazı öğelerin hakları devam edebileceğinden, eklentili abonelikteki TÜM öğeler için güncellenmiş expiryTime almanız gerekir.
Finansal raporlama ve mutabakat
Etkin aboneliklerinizi Play'deki işlemlerle uzlaştırmak için kazanç raporunu kullanın. Her işlem satır öğesinin bir sipariş kimliği vardır. Birden fazla öğenin satın alındığı durumlarda, Kazanç ve Tahmini Satış raporları, her işlem için ayrı satırlar (ör. ücret, vergi ve geri ödeme) içerir.
Play Console'daki kontrol panelleri için:
Konsolun Finansal raporlama bölümünde sunulan gelir istatistikleri öğelere göre ayrılır.
Sipariş yönetimi, eklentilerle birlikte abonelik satın alımını yansıtır ve satın alınan öğelerin ayrıntılı listelerini gösterir. Sipariş yönetiminden kullanıcının satın alma işlemini iptal edebilir, geri çekebilir veya tam olarak geri ödeyebilirsiniz.