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 satın alma akışı 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.
Eklenti satın alınan bir abonelikte en fazla 50 öğe olabilir.
Bu özellik Hindistan (IN) ve Güney Kore (KR) bölgelerinde 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ını bildiğiniz varsayılır. Bu bölümde, eklentilerle birlikte aboneliklere özel olan PBL entegrasyonu yönlerine odaklanılmaktadır.
Satın alma akışı 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 akışının 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 aynı olmasını sağlamak 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 öğeli satın alma işlemlerinin 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. Ardından, Google Play Developer API'nin purchases.subscriptionsv2.get bölümündeki lineItems listesi döndürülür.
Eklenti içeren abonelikleri değiştirme
Eklentilerle birlikte aboneliğinizde yapılan değişiklikler, aboneliğinizi yükseltmenize veya düşürmenize neden olur. Daha fazla bilgi için Abonelikleri yükseltme veya düşürme başlıklı makaleyi inceleyin.
Uygulamanızda eklentilerle birlikte mevcut bir abonelik satın alma işlemini değiştirmek veya geri yüklemek için ek parametrelerle launchBillingFlow API'yi ç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 takdirde, bu parametrenin ayarlanmasına gerek yoktur. - Temel öğe değiştirilmediğinde, belirli bir değiştirme davranışını 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çerli fatura dönemlerinin sonunda süresi 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ştirilmiş öğeler | SubscriptionProductReplacementParams içinde değiştirme modunu ayarlamanız mı gerekiyor? | 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ştirilmiş öğ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 desteği sonlandırılmıştır). |
| A (temel öğe), B | C (temel öğe), D | Evet |
|
Gerçek zamanlı geliştirici bildirimleri
subscriptionId alanı, birden fazla öğe yetkisi 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 öğeli aboneliklerin 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 özellikler satın alma işlemi içeren bir abonelikteki öğe için 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:
- Eklentileri (A ve B öğeleri) olan ve her ayın 7'sinde yenilenen bir aboneliğiniz olduğunu 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ıyor. Kullanıcı onayı istenen fiyat artışı, taşıma işleminden 37 gün sonra başladığı için 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 fiyat artışını 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. 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 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 ödemelerinin tamamını iade etmek 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.
Orantılı geri ödemeler kullanılarak eklentili bir abonelik iptal edildiğinde, her öğenin en son siparişi için bir geri ödeme yapılır. Bu geri ödeme, bir sonraki yenilemeye kadar kalan süreye göre orantılı bir tutar üzerinden yapılı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
Eklentiler içeren bir abonelikteki tek tek abonelik öğelerini, satın alma işleminin tamamını iptal etmeden iptal etmek için RevocationContext içinde ItemBasedRefund alanı ayarlanmış olarak purchases.subscriptionsv2.revoke işlevini çağırın. İptal edilmesi ve geri ödenmesi gereken öğenin productId, ItemBasedRefund alanında ayarlanabilir.
ItemBasedRefund alanı, bir veya daha fazla otomatik yenilenen 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 satın alınmamışsa ya da süresi dolmuşsa öğe kapatma işlemi engellenir. - Öğeyi devre dışı bırakma, ön ödemeli aboneliklerde desteklenmez.
Ödeme reddedildiğinde öğenin geçerlilik bitiş tarihi
Eklentili abonelik satın alımlarında, belirli yenilemelerde öğe haklarının yalnızca 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.
Kurtarma dönemi seçimi
Ek süre, kullanıcıya hak vermeye devam ettiğinden eklentili abonelik satın alındığında yenileme ödemesi reddedilir. 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 etkinleştirilir) ve kaldırılma veya kapatılma nedeniyle artık etkin olmayan öğeler bu kapsamda değildir.
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 geçer. 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 girişimi başlatılır.
Hesabı askıya alma
Abonelik satın alma işlemi hesap bekletme durumundayken, ödeme kurtarılana 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 kısmı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 ikisi için de ek süre ayarlanmamış ve her ikisi de 30 günlük askıya alınmış hesap süresine sahip.
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 aboneliğine 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 My Base Plan'e erişmeye devam ederken Add on plan'e erişimini kaybeder.
Bu örnekte, ek içerikli abonelikteki TÜM öğeler için güncellenmiş expiryTime değerini almanız gerekir. Bazı öğeler, ek süre ve hesap askıya alma döneminden sonra haklarını yeniden kazanabilir.
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 bir 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 alma işlemini 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 geri ödeme yapabilirsiniz.