Abonelikler hakkında

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.

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.

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.
Şekil 1. Play Store abonelikleri ekranında, kullanıcıların Google Play tarafından faturalandırılan tüm aboneliklerinin durumu gösterilir.


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

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

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.
Şekil 3. Bu uygulamanın üç abonelik katmanı var.

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ştirme modları ve örnek kullanımlar listelenmiştir.

Değiştirme modu

Açıklama

Örnek kullanım

WITH_TIME_PRORATION

Abonelik hemen yükseltilir veya düşürülür. Kalan süre, fiyat farkına göre ayarlanır ve bir sonraki faturalandırma tarihine kadar yeni aboneliğe aktarılır. Bu, varsayılan davranıştır.

Hemen ek ücret ödemeden daha pahalı bir katmana geçin.

CHARGE_PRORATED_PRICE

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.

CHARGE_FULL_PRICE

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.

WITHOUT_PRORATION

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.

DEFERRED

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.

Daha düşük fiyatlı bir katmana geçin.

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 veya otomatik yenilenen plan için üst sürüme geçerken, eski sürüme geçerken veya aynı aboneliğin ön ödemeli planına geçerken izin verilen tek kullanımlık paylaştırma modu CHARGE_FULL_PRICE'dir. 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ı abonelikteki planlardan ön ödemeli plan veya otomatik yenilenen planlardan otomatik yenilenen planlara geçerken geçerli eşit oranlı lisans modları CHARGE_FULL_PRICE ve WITHOUT_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.

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 PurchasesUpdatedListener çağrılır.

Eski plandan yararlanma hakkı bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru yetkiyi verdiğinden emin olmak için queryPurchasesAsync(), değiştirme gerçekleşene kadar orijinal satın alma jetonu ve orijinal yararlanma hakkına sahip bir Satın Alma nesnesini döndürür.

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 PurchasesUpdatedListener çağrılır.

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

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ı.

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

purchases.subscriptionsv2.get yönteminin yeni satın alma jetonuyla çağrılması, iki satır öğesi içeren bir satın alma işlemini döndürür:

  • Biri, mevcut yararlanma hakkını temsil eder, gelecekte bir "expiryTime" içerir ve otomatik yenilenen işareti yoktur.
  • Otomatik yenilemenin açık olduğu ve henüz "startTime"ın olmadığı (başlamadı) yeni yararlanma hakkını temsil eder.

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)

queryPurchasesAsync(), yeni satın alma jetonu ve yararlanma hakkına sahip yeni bir Purchase nesnesi döndürür.

Yeni satın alma jetonu kullanıma sunulduğundan işlenmesi gerekir.

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

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 linkedPurchaseToken, abonelik arka ucunuzda hangi kullanıcının (varsa) yeni yararlanma hakkıyla güncellenmesi gerektiğini belirlemek için kullanılabilir.

Yeni satın alma işlemi işlendi ve yeni satın alma jetonu için SUBSCRIPTION_PURCHASED RTDN gönderildiğinde 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:

  • Biri, geçmişte bir "expiryTime" ile eski yararlanma hakkını temsil eden ve
  • Biri, değiştirme işleminin yapıldığı zamana karşılık gelen bir "startTime" ve gelecekteki bir "expiryTime" ile yeni yararlanma hakkını temsil eder.

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 olma
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ü
Şekil 8. Google Play Store uygulamasında, iptal edilmiş bir aboneliğin gösterildiği ve Yeniden abone ol düğmesi bulunan Hesap > Abonelikler bölümü.

Abonelikleri geri yükleme hakkında daha fazla bilgi için Geri yü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ü
Şekil 9. Google Play Store uygulamasında Hesap > Abonelikler bölümünde, iptal edilmiş veya süresi dolmuş bir aboneliğin Yeniden Abone Ol ve Kaldır düğmeleriyle gösteriliyor.

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
Şekil 20. Kullanıcıyı ödeme sorununu düzeltmesini bildiren Snackbar.

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.
                }
            }
        });