Ek özellik içeren abonelik, birden fazla abonelik ürününü birlikte satın almanıza, faturalandırmanıza ve yönetmenize olanak tanır. Mevcut ürün kataloğu abonelikleriniz, önceden herhangi bir özellik belirtmeden veya ek yapılandırma yapmadan sorunsuz bir şekilde eklenti olarak sunulabilir. Birden fazla mevcut abonelik ürünü içeren bir satın alma akışı başlatabilir ve bunları eklenti olarak satabilirsiniz.
Dikkat edilmesi gereken noktalar
Ek abonelik özelliğini kullanırken aşağıdaki noktaları göz önünde bulundurun:
Ek özellik içeren 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, aylık faturalandırılan eklentileri olan yıllık faturalandırılan bir aboneliğiniz olamaz.
Ek satın alma içeren bir abonelikte en fazla 50 öğe bulunabilir.
Bu özellik Hindistan (IN) ve Güney Kore (KR) bölgelerinde kullanılamaz.
Play Faturalandırma Kitaplığı ile entegrasyon
Bu bölümde, aboneliğin Play Billing Library (PBL) ile eklenti özelliğinin nasıl entegre edileceği açıklanmaktadır. Bu makalede, PBL bağımlılığını uygulamanıza ekleme, BillingClient sınıfını başlatma ve Google Play'e bağlanma gibi ilk PBL entegrasyon adımlarını bildiğiniz varsayılmaktadır. Bu bölümde, eklenti içeren aboneliklere özgü PBL entegrasyon yönleri ele alınmaktadır.
Satın alma akışı başlatma
Eklenti içeren bir abonelik için satın alma akışı başlatmak üzere aşağıdaki adımları uygulayın:
BillingClient.queryProductDetailsAsync
yöntemini kullanarak tüm abonelik öğelerinizi alın.Her öğe için
ProductDetailsParams
nesnesini ayarlayın.ProductDetailsParams
nesnesi tarafından temsil edilen öğe, hem abonelik öğesini belirtenProductDetails
hem de belirli bir aboneliğibase plan
veyaoffer
seçenofferToken
öğesini belirtir.BillingFlowParams.Builder.setProductDetailsParamsList
yönteminde öğe ayrıntılarını belirtin.BillingFlowParams
sı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 alınan ürünler için geçerli kurallar
- Eklenti yenileme tarihlerinin temel öğeyle uyumlu olmasını sağlamak için Google Play, deneme veya tanıtım fiyatı aşamalarından sonra oransal olarak satılan bir ödeme ekleyebilir.
- Teklif uygunluğu her öğe için ayrı ayrı değerlendirilir.
Satın alma işlemlerini işleme
Ek özellik içeren aboneliklerin işlenmesi, Google Play Faturalandırma Kitaplığı'nı uygulamanıza entegre etme bölümünde açıklanan tek öğe 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 elde edebilmesidir. Ek özellik içeren abonelik satın alındığında, Google Play Faturalandırma Kitaplığı'ndaki Purchase.getProducts()
ve ardından Google Play Developer API'nin purchases.subscriptionsv2.get
bölümündeki lineItems
listesi kullanılarak alınabilecek birden fazla öğe döndürülür.
Eklentilerle abonelikleri değiştirme
Ek aboneliklerde yapılan değişiklikler, abonelik düzeyinin yükseltilmesine veya düşürülmesine neden olur. Daha fazla bilgi için Abonelikleri yükseltme veya düşürme başlıklı makaleyi inceleyin.
Uygulamanızdaki eklenti içeren mevcut bir abonelik satın alma işlemini değiştirmek veya geri yüklemek için launchBillingFlow
API'sini ek parametrelerle çağırmanız ve aşağıdakilerden emin olmanız gerekir:
- Mevcut abonelik satın alma işleminin satın alma jetonuyla
setOldPurchaseToken
'ü her zaman arayın. - Temel öğeyi yükseltmek, düşürmek veya çapraz yükseltmek için
setSubscriptionReplacementMode
'ü çağırarak eski aboneliğin temel öğeleri ile eklentileri olan yeni abonelik satın alma işlemi arasında plan değişikliğinin nasıl ele alınması gerektiğini belirtin. Aksi takdirde bu parametreyi ayarlamanıza gerek yoktur. - Temel öğe değişmediğinde bile belirli bir prorasyon davranışı uygulamak için
setSubscriptionReplacementMode
işlevini çağırabilirsiniz. Bu durumda geçerli kurallar için Yeniden abone olma veya aynı abonelik içinde plan değiştirme başlıklı makaleyi inceleyin. - Yeni eklentiler, bir sonraki yenileme tarihini abonelikteki temel öğeyle uyumlu hale getirmek için oransal ücretlendirmeyle hemen uygulanır.
- Kaldırılan eklentilerin geçerli faturalandırma dönemleri sona erdiğinde süreleri dolar.
- Faturalandırma akışını başlatırken, kaldırılacak olanlar hariç olmak üzere abonelikteki tüm etkin öğeleri ve yeni eklentileri belirtmeniz gerekir.
Aşağıdaki örnekte, mevcut bir abonelik satın alma işlemini eklentilerle değiştirirken launchBillingFlow
API'nin 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ştirme senaryoları
Aşağıdaki tabloda, eklenti içeren abonelik için çeşitli değişiklik senaryoları ve ilgili davranış listelenmiştir.
Mevcut öğeler | Değiştirilen öğeler | Değişim modunu ayarlamanız gerekiyor mu? | Davranış |
---|---|---|---|
A (temel öğe), B | A (temel öğe) | Hayır | B öğesinin ertelenen kaldırma işlemi planlanmıştır. |
A | A (temel öğe), B | Hayır | B öğesi, oransal ücretle hemen eklenir. |
A (temel öğe), B | A (temel öğe), C | Hayır |
|
A (temel öğe), B | B (temel öğe) | Hayır | A, ertelenen bir kaldırma işlemi için planlanmıştır. |
A (temel öğe), B | C (temel öğe) | Evet |
|
A (temel öğe), B | C (temel öğe), B | Evet | A -> C için değiştirme işlemi setSubscriptionReplacementMode 'e bağlıdır. |
A (temel öğe), B | C (temel öğe), D | Evet |
|
Gerçek zamanlı geliştirici bildirimleri
Birden fazla öğe hakkı içeren eklentilerle abonelik satın alma işlemleri için subscriptionId
alanı RTDN'de sağlanmaz.
Bunun yerine, satın alma işlemini almak ve ilişkili öğe izinlerini görmek için Play Developer API'lerini kullanabilirsiniz.
Mevcut aboneler için fiyat değişiklikleri
Ek satın alma içeren bir aboneliğin mevcut aboneleri için abonelik fiyatlarını değiştirmek, Abonelik fiyatlarını değiştirme bölümünde açıklandığı gibi tek öğe içeren aboneliklerin abonelik 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 grubun sonlandırılması, eklenti satın alma işlemi içeren abonelikleri de etkiler. Aşağıdaki kurallar geçerlidir:
Kullanıcı onayı istenen tüm fiyat artışları, yeni fiyatla aynı yenileme süresine sahip olmalıdır. Ek satın alma içeren bir abonelikteki bir öğenin henüz kullanıcı tarafından onaylanmamış bir kullanıcı onayı istenen fiyat artışı varsa satın alma işlemindeki diğer öğeler için yeni bir kullanıcı onayı istenen fiyat artışı, yeni fiyatın uygulanmasının yenileme süresinin ÖDENMEMİŞ durumdaki mevcut fiyat artışıyla aynı olması durumu hariç dikkate alınmaz. Kullanıcı fiyat artışını onayladıktan sonra yeni fiyat değişiklikleri kaydedilir. Kullanıcılar, onaylanmamış tüm kullanıcı onayı istenen fiyat artışlarını yalnızca tek seferde kabul edebilir.
Örnek:
- Her ayın 7'sinde yenilenen, eklentileri olan (A ve B öğeleri) bir aboneliği düşünün.
- A ürünü için 7 TL'den 10 TL'ye fiyat geçişi devam ediyor ve fiyat artışının 7 Temmuz'da geçerli olması bekleniyor.
- B öğesi için 2 Haziran'da 5 TL'den 6 TL'ye yeni bir fiyat taşıma işlemi başlar. Kullanıcı onayı istenmeyen fiyat artışı, taşıma işleminden 37 gün sonra başladığından B öğesi için en erken fiyat artışı 7 Ağustos'ta gerçekleşecektir.
Bu senaryoda, kullanıcı A öğesinin fiyat değişikliğini kabul edene (ONAYLANDI 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çerlilik kazanacak fiyat artışları veya düşüşleri olan tüm öğelerin listesi yer alır.
Ek özellik içeren abonelikleri iptal etme
Kullanıcılar, eklentiye sahip bir aboneliğin satın alma işleminin tamamını Play Abonelik Merkezi'nden iptal edebilir. Siz ise eklentiye sahip bir aboneliğin satın alma işleminin tamamını yalnızca Google Play Developer API'yi kullanarak iptal edebilirsiniz.
Satın alınan bir abonelik iptal edildiğinde, satın alma işleminde yer alan öğ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
Abonelikleri iptal etme ve geri ödeme yapmayla ilgili kurallardan bazıları şunlardır:
Aboneliğe erişimi iptal etmeden belirli bir Sipariş için tutara dayalı geri ödeme yapmak istiyorsanız Play Console'u kullanın.
Kullanıcının aboneliğe erişimini iptal etmeden yaptığı belirli abonelik ödemelerini eksiksiz şekilde geri almak için
orders.refund
numaralı telefonu arayın.Tüm abonelik öğelerine erişimi hemen iptal etmek için
purchases.subscriptionsv2.revoke
numaralı telefonu arayın. Bu API ile şunları yapabilirsiniz:Tüm öğelere erişimi iptal edin ve orantısal geri ödeme yapın.
Ek özellik içeren bir abonelik, oransal geri ödeme kullanılarak iptal edildiğinde her öğenin en son siparişi için bir geri ödeme yapılır. Bu geri ödeme, sonraki yenilemeye kalan süreye göre oransal bir tutar üzerinden yapılır.
Tüm öğelerin erişimini iptal edin ve TamTutarRefund yapın.
Öğenin eksiksiz geri ödemesiyle erişimini iptal edin.
Eklenti içeren bir abonelikteki öğeleri tek tek iptal etme
Ek özellik içeren bir abonelikteki abonelik öğelerini, satın alma işleminin tamamını iptal etmeden tek tek iptal etmek için RevocationContext
alanında ItemBasedRefund
alanı ayarlanmışken purchases.subscriptionsv2.revoke
işlevini çağırın. İptal edilmesi ve geri ödeme yapılması gereken öğenin productId
değeri ItemBasedRefund
alanında ayarlanabilir.
ItemBasedRefund
alanı, bir veya daha fazla otomatik yenilenen abonelik öğesi içeren satın alma işlemleri için ayarlanabilir.
ItemBasedRefund
bölümünde belirtilen öğe iptal edildikten sonra abonelik satın alma işleminde hâlâ etkin öğeler varsa yalnızca ilgili öğe iptal edilir ve abonelik durumu kesintiye uğramadan geri ödemenin tamamı yapılır.ItemBasedRefund
içinde belirtilen öğe iptal edildikten sonra abonelik satın alma işleminde etkin öğe kalmamışsa öğe iptal edilir, geri ödemesi tamamen yapılır ve abonelik iptal edilir.
Dikkat edilmesi gereken noktalar
ItemBasedRefund
kullanıldığında 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, ödeme reddedildi durumlarından birindeyse veya
ItemBasedRefund
içinde belirtilen öğe sahibi değilse ya da süresi dolmuşsa öğe reddi engellenir. - Öğe reddi, ön ödemeli abonelikte desteklenmez.
Ödeme reddedilirken öğenin süresi dolması
Eklentileri olan abonelik satın alındığında, belirli yenilemelerde gelecekte son kullanma tarihi olan öğeleri etkilemeden yalnızca öğe haklarından bir alt kümesinin uzatılması gerekebilir.
Yenileme işlemine hangi öğelerin dahil edildiğinden bağımsız olarak, yenileme ödemesi reddedilirse genel abonelik satın alma işlemi, aşağıdaki dokümanda açıklandığı şekilde ek süreye girer ve hesap beklemeye alınır.
Kurtarma dönemi seçimi
Ek sürenin kendisi kullanıcıya hak tanıdığı için eklenti içeren bir abonelik satın alındıktan sonra yenileme ödemesi reddedilir, tüm etkin öğeler arasında en az ek süreye sahip öğe seçilir ve bu yenileme için ek süre ve hesap bekleme süresi olarak bu öğenin ek süresi ve hesap bekleme süresi uygulanır.
Etkin öğeler, yenileme denemesinden hemen önce eklenti içeren bir abonelik satın alırken etkin olan öğeleri içerir, yeni eklenen öğeleri (kurtarma işleminden sonra hak kazanmayacak) ve kaldırma veya reddetme nedeniyle artık etkin olmayan öğeleri hariç tutar.
Minimum ek sürenin seçildiği öğenin hesap bekletme ayarı uygulanır. Minimum ek süreye sahip ancak farklı hesap bekletme süresi olan birden fazla öğe varsa en uzun hesap bekletme süresi uygulanır.
Ek süre
Abonelik yenileme ödemesi reddedildiğinde abonelik satın alma işlemi ek süre durumuna girer. Kullanıcı, ek süre boyunca ö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ı hesapta askıya alınır. Ek süre içinde yenileme tarihlerine ulaşan diğer öğeler için, abonelik ödeme reddinden sonra yeni bir ödeme denemesi başlatılır.
Hesabı askıya alma
Abonelik satın alma işlemi hesapta beklemedeyken ödeme tahsil edilene kadar tüm abonelik öğelerine erişim askıya alınır.
Hesabın askıya alınmış durumdaki aboneliği kurtarılırsa abonelik satın alma işlemi olduğu gibi devam eder. Abonelik kurtarılmazsa ödeme reddedilen öğelerin süresi dolar ve diğer öğelere erişim, faturalandırma dönemlerinin geri kalanı için devam eder.
Örnek:
Bir kullanıcının her ayın 1'inde yenilenen Temel Planım aboneliği vardır. Kullanıcı, 15 Ağustos'ta yedi günlük ücretsiz deneme içeren aylık 10 ABD doları tutarındaki Ek plan'ı ekler. Hiçbir öğe için ek süre ayarlanmamış ve her ikisi için de 30 günlük hesap bekleme süresi belirlenmiştir.
22 Ağustos'ta kullanıcıdan 31 Ağustos'a kadar olan dönem için 2,90 ABD doları (10*9/31) prorata ödeme alınır ancak kullanıcının ödeme yönteminin süresi bundan önce dolar ve abonelik 22 Ağustos'ta ödeme reddi durumuna girer.
Abonelik, ödeme reddi nedeniyle askıya alındığında kullanıcı, eklenti içeren abonelikteki öğelerin hiçbirine erişemez. Yenilenmeyen öğelerin kalan süresi, ödemenin tahsil edilmesi veya iptal edilmesi nedeniyle abonelik hesap askıya alma durumundan çıktığında kullanıcılara geri verilir.
Önceki örnekte, bir abonelik 22 Ağustos'ta hesap beklemeye alınır.
Hesap 25 Ağustos'ta, yani 1 Eylül'deki daha geniş yenileme tarihinden önce kurtarılırsa kullanıcı aynı gün hem Base Plan'a hem de Ek plan'a yeniden erişebilir. Sonraki faturalandırma 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ı Ek plan'a erişimini kaybeder. 30 Eylül'e kadar Temel Planım'a erişmeye devam edebilir.
Bu örnekte, bazı öğeler ek süre ve hesap askıya alma işleminden sonra hak kazanmaya devam edebileceğinden, eklentileri olan abonelikteki TÜM öğeler için güncellenmiş expiryTime
değerini almanız gerekir.
Finansal raporlama ve mutabakat
Etkin aboneliklerinizi Play'deki işlemlerle uyumlu hale getirmek için Kazanç raporunu kullanın. Her işlem satır öğesinin bir sipariş kimliği vardır. Birden fazla öğeyi temsil eden satın alma işlemleriyle Kazançlar ve Tahmini Satış Raporları, her işlem için ilgili öğeyle ilgili ayrı satırları (ör. ödeme, ücret, vergi ve geri ödeme) içerir.
Play Console'daki kontrol panelleri için:
Konsolu'nun 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 alabilir veya tam geri ödeme yapabilirsiniz.