Abonelikler hakkında

Bu konuda, yenileme ve geçerlilik bitiş tarihi 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ı temsil eder. Örneğin, abonelik kullanıcıya bir müzik çalma hizmetine erişme hakkı verebilir.

Aynı uygulamada birden fazla aboneliğiniz olabilir. Bu abonelikler farklı avantaj gruplarını veya tek bir avantaj grubunun farklı katmanlarını ("Gümüş" ve "Altın" katmanları gibi) temsil edebilir.

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 bir 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ırsatlarla ilgili 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ı kesintisiz olarak uzatmak için kullanıcının aynı abonelik için ön ödemeli bir plana para eklemesi gerekir.

Para ekleme için faturalandırma akışını, orijinal satın alma işleminde olduğu gibi 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şim modu kullanılır ve bu modu açık bir şekilde ayarlamanız gerekmez. Kullanıcıdan tam fatura dönemi için hemen ödeme alınır ve kullanıcının yararlanma hakkı para eklemede belirtilen süre kadar uzatılır.

Para ekleme işleminden sonra, Purchase sonuç nesnesindeki aşağıdaki alanlar, en son para ekleme 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 aboneliklerde olduğu gibi, satın alma işleminden 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.

Bir hafta veya daha uzun süreli ön ödemeli planlar üç gün içinde onaylanmalıdır.

Bir haftadan kısa süreli ö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üresi vardır.

Kullanıcıların abonelikleri yönetmesine izin vermek için derin bağlantılar kullanın

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 bir derin bağlantı ekleyebilirsiniz. Bu bağlantıyı, abonelik kaynağının subscriptionState alanını kullanarak belirleyebilirsiniz. Bu bilgiler doğrultusunda, Play Store abonelik merkezine derin bağlantı oluşturmak için kullanabileceğiniz birkaç yöntem vardır.

Şekil 1 ve 2'de gösterildiği gibi, kullanıcıları 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, bir kullanıcının Google Play tarafından faturalandırılan tüm aboneliklerinin durumu gösterilir.
Şekil 1. Play Store abonelikleri ekranında, bir kullanıcını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. Diğer ayrıntıları görmek için bir aboneliğe dokunun.

Bu derin bağlantı, kullanıcının iptal edilen 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ı oluşturmak 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şkilendirilmiş 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. Bir abonelik satın alma işlemiyle ilişkili her SubscriptionPurchaseLineItem nesnesi, kullanıcının söz konusu 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 "alt-ürün-kimliğiniz" ve "uygulama-paketiniz" ifadesini sırasıyla productId ve uygulama paketi adıyla değiştirerek aşağıdaki URL'yi kullanın:

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

Böylece kullanıcı, ödeme yöntemlerini yönetebilir ve iptal, yeniden abonelik ve duraklatma gibi özelliklere erişebilir.

Abonelik yönetimi bağlantıları için örnek kodu Classy Taxi örnek uygulamasında bulabilirsiniz.

Kullanıcıların aboneliklerini yükseltmesine, düşürmesine veya değiştirmesine izin ver

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" abonelik gibi birden fazla abonelik katmanı satıyorsanız kullanıcıların farklı bir aboneliğin temel planını veya fırsatı satın alarak katmanlar arasında geçiş yapmasına izin verebilirsiniz.
  • Kullanıcıların geçerli fatura dönemlerini değiştirmesine olanak tanıyabilirsiniz. Örneğin, aylık plandan yıllık plana geçebilirsiniz.
  • 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 fırsatları sunarak bu değişikliklerin 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, teklifi satın almamış olan aylık plana abone olan kullanıcılarla sınırlandırabilirsiniz. Fırsat 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ı vardır.
Şekil 3. Bu uygulamanın üç abonelik katmanı var.

Uygulamanızda Şekil 3'e benzer bir ekran gösterilebilir. Bu ekran, kullanıcılara aboneliklerini değiştirme seçenekleri sunar. Her durumda, kullanıcılar mevcut abonelik planlarının ne olduğu ve planı 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 verdiklerinde, mevcut ücretli fatura dönemindeki orantılı değerin 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şim modları

Aşağıdaki tabloda, kullanılabilir değiştirme modları ve örnek kullanımlar listelenmiştir.

Değiştirme modu

Açıklama

Örnek kullanım

WITH_TIME_PRORATION

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

Hemen ek ödeme yapmadan daha pahalı bir katmana geçin.

CHARGE_PRORATED_PRICE

Abonelik hemen yükseltilir ve faturalandırma döngüsü aynı kalır. Kalan döneme ait fiyat farkı daha sonra 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.

Faturalandırma tarihini değiştirmeden daha pahalı bir katmana geçin.

CHARGE_FULL_PRICE

Abonelik hemen üst veya alt sürüme geçirilir ve kullanıcıdan yeni yararlanma hakkı için tam ücret hemen alınır. Önceki abonelikten kalan değer aynı yararlanma hakkına aktarılır veya farklı bir yararlanma hakkına geçiş yapıldığında zamana orantılı olarak hesaplanır.

Daha kısa faturalandırma dönemlerinden daha uzun fatura dönemlerine geçiş yapın.

WITHOUT_PRORATION

Abonelik hemen üst veya alt sürüme geçirilir ve abonelik yenilendiğinde yeni fiyat tahsil edilir. Faturalandırma döngüsü aynı kalır.

Kalan ücretsiz süreyi korurken 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 hemen gönderilir. Böylece geliştirici, kullanıcılara isterse ek değişiklikler yapma izni verebilir. Örneğin, orijinal plana geri dönebilir veya yeni bir ertelenmiş plan değişikliği başlatabilirler.

Daha ucuz bir katmana geçin.

Yükseltme veya düşürme tekliflerinin farklı upsell ve geri kazanma uygulamaları hakkında daha fazla bilgi edinmek için teklifleri ve promosyon 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, bir abonelikteki 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 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 alınacağını seçmenize olanak tanır. CHARGE_FULL_PRICE ile eşdeğer olan Hemen tahsil et ve WITHOUT_PRORATION ile eşdeğer olan Bir sonraki fatura tarihinde tahsil et seçenekleri mevcuttur. Aynı abonelik içinde temel planlar arasında geçiş yaparken kullanılabilen tek değişim modları 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 aracında 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 eski satın alma işleminden yeni satın alma işlemine plan 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 alma satın alma) değiştiriyorsa veya herhangi bir nedenle varsayılan değiştirme modunu geçersiz kılmak isterseniz satın alma akışı parametreleri kapsamında çalışma zamanında orantılı 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çirken izin verilen tek kullanımlık paylaştırma modu CHARGE_FULL_PRICE'dur. Başka bir oranlama modu belirtirseniz satın alma işlemi başarısız olur ve kullanıcıya bir hata gösterilir.
  • Aynı abonelik içinde, ön ödemeli plandan veya otomatik yenilenen plandan otomatik yenilenen bir plana geçiş yaparken geçerli bölüştürme 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 nasıl çalıştığını anlamak için aşağıdaki senaryoyu inceleyin:

Sami'nin, Country Gardener uygulamasından online içeriğe aboneliği var. İçeriğin yalnızca metin içeren Katman 1 sürümüne aylık aboneliği var. Bu aboneliğin maliyeti ayda 2 ABD dolarıdır ve abonelik ayın ilk günü yenilenir.

Samwise 15 Nisan'da, video güncellemelerini içeren ve maliyeti yılda 36 ABD doları olan 2. Katman 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 ay için ödeme yaptığı (1-30 Nisan) ancak abonelik döneminin ortasında yükseltme yaptığı için bir aylık aboneliğin yarısı (1 ABD doları) yeni aboneliğine uygulanır. Ancak, yeni aboneliğin ücreti yılda 36 ABD doları olduğundan, 1 ABD doları kredi bakiyesi yalnızca 10 gün için (16-25 Nisan) ö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 tahsil edilir.

Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync() çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir SUBSCRIPTION_PURCHASED Gerçek Zamanlı Geliştirici Bildirimi alır.

CHARGE_PRORATED_PRICE

Zaman birimi başına Katman 2 abonelik fiyatı (36 ABD doları/yıl = 3 ABD doları/ay), zaman birimi başına 1. Katman abonelik fiyatından (2 ABD doları/ay) daha yüksek olduğu için bu mod kullanılabilir. Sami'nin 1. Katman aboneliği hemen sona erer. Bir ayın tamamı için ödeme yapıp yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Ancak, yeni aboneliğin ücreti 36 ABD doları olduğu için 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'dan 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 ücret alınır.

Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync() çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında 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ı, sonraki her yılın 1 Mayıs'ında ise 36 ABD doları ücret alınır.

Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync() çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir SUBSCRIPTION_PURCHASED Gerçek Zamanlı Geliştirici Bildirimi alır.

DEFERRED

Samwise'ın 1. Katman aboneliği, süresi 30 Nisan'da sona erene kadar devam eder. 1 Mayıs'ta 2. Katman aboneliği geçerlilik kazanır ve Sami'den yeni abonelik katmanı için 36 ABD doları ücret alınır.

Satın alma işlemi başarılı olur olmaz uygulamanızın PurchasesUpdatedListener kodunu çağırmanız ve yeni satın alma işlemini bir queryPurchasesAsync() çağrısının parçası olarak alabilmeniz gerekir. Arka ucunuz anında bir SUBSCRIPTION_PURCHASED Gerçek Zamanlı Geliştirici Bildirimi alır. Bu noktada diğer yeni satın alma işlemlerini yaptığınız gibi satın alma işlemini de gerçekleştirmeniz gerekir. Özellikle, yeni satın alma işlemini onayladığınızdan emin olun. Yeni abonelik startTime alanının, değişim 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ştirme işlemini 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. 2. Katman aboneliği bugün başlıyor ve kendisinden 36 ABD doları ücret alınıyor. Bir ayın tamamı için ödeme yapıp yalnızca yarısını kullandığı için yeni aboneliğine bir aylık aboneliğin yarısı (1 ABD doları) uygulanır. Yeni aboneliğin ücreti 36 ABD doları olduğu için yılın 1/36'sında abonelik dönemine (yaklaşık 10 gün) eklenir. Bu nedenle Samwise'ın bir sonraki ödemesi 1 yıl 10 gün sonra 36 ABD doları olacaktır. Sonrasında, kendisinden her yıl 36 ABD doları ücret alınır.

Bölüştürme modu seçerken değiştirme önerilerimizi incelemeyi unutmayın.

Uygulama içinde abonelik değişikliklerini tetikleyin

Uygulamanız, kullanıcılara satın alma akışını başlatma adımlarını uygulayarak yeni veya eski sürüme geçme olanağı sunabilir. Ancak yeni sürüme veya eski sürüme geçerken aşağıdaki örnekte gösterildiği gibi mevcut abonelik, gelecekteki (yükseltilmiş veya eski sürüme geçirilmiş) abonelik ve kullanılacak değiştirme moduyla ilgili ayrıntıları 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ştirme modu Sonuç
Daha pahalı bir katmana geçme CHARGE_PRORATED_PRICE Kullanıcı, aynı fatura dönemini koruyup hemen erişim elde eder.
Daha düşük fiyatlı bir katmana geçme DEFERRED Kullanıcı daha pahalı katman için zaten ödeme yaptığından bir sonraki faturalandırma tarihine kadar erişime devam eder.
Ücretsiz deneme sırasında yeni sürüme geçme, denemeyi devam ettirme 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 denemeye erişimi 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 alma işlemleridir. Bu değişiklikler, 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 geri almanız gerekir.

Uygulama içi davranış, yeni satın alma işlemleriyle aynıdır. Uygulamanız, PurchasesUpdatedListener hesabınızda yapılan yeni satın alma işleminin sonucunu alır ve yeni satın alma işlemi queryPurchasesAsync üzerinden sunulur.

Bir satın alma işlemi mevcut bir kaynağın yerine geçtiğinde Google Play Developer API, abonelik kaynağında bir linkedPurchaseToken döndürür. Eski jetonun hizmetlerinize erişim elde etmek amacıyla kullanılmaması 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şlemlerini yönetme 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 işleme

Ertelenen değiştirme modu, kullanıcının yeni plana başlamadan önce eski planındaki kalan yararlanma hakkını kullanmasına izin vermenizi sağlar.

Yeni bir satın alma işlemi için ReplacementMode.DEFERRED değerini kullandığınızda queryPurchasesAsync(), satın alma akışından sonra yeni bir satın alma jetonu döndürür. Bu jeton bir sonraki yenileme tarihine, ertelenen değiştirme işlemi gerçekleşene kadar eski ürünle ilişkili kalmaya devam eder. Bu tarihten sonra yeni ürün iade edilir.

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'da 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 (desteği sonlandırıldı)

DeğiştirmeMode.DEFERRED

Satın alma süreci başarılı olduktan hemen sonra (uygulama)

PurchasesUpdatedListener, satın alma işleminden sonra çağrılır ve yükseltme veya düşürme işleminin başarılı olup olmadığı bilgisini verir.

Eski plandan yararlanma hakkı bir sonraki yenileme tarihine kadar devam eder. Uygulamanın doğru yararlanma hakkını 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örünmediğinden bu noktada işlenemiyor.

PurchasesUpdatedListener, satın alma işleminden sonra çağrılır ve yükseltme veya düşürme işleminin başarılı olup olmadığı bilgisini görü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 yapılacağı zaman dikkate alınarak bu noktada işleme edilmelidir.

Satın alma akışı başarılı olduktan hemen sonra (arka uç)

SUBSCRIPTION_PURCHASED RTDN, satın alma akışından sonra gönderilmez. Yeni satın alma işlemi, arka uçta henüz bildirilmedi.

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şlemi döndürür:

  • Bir değer, mevcut yararlanma hakkını temsil eder, gelecekte bir "expiryTime" içerir ve otomatik yenilenen işareti bulunmaz.
  • Otomatik yenileme açık olan ve henüz "startTime" değeri sunulmayan (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, jetonun süresi dolmuş olarak görünür (eski planın yararlanma hakkı, kalan süre boyunca yeni satın alma işlemine aktarılır).

Değiştirme işleminde - satın alma akışından sonra ilk yenileme (uygulama)

queryPurchasesAsync(), yeni satın alma jetonu ve yararlanma hakkını içeren 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.

Yeni satın alma işleminin, satın alma akışı başarılı olduktan sonra 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 sonra ilk yenileme (arka uç)

Yeni satın alma işlemi 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 yeni yararlanma hakkıyla güncellenmesi gerektiğini (varsa) 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 herhangi bir yenilemenin standart davranışını izler 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:

  • Geçmişte bir "expiryTime"a sahip ve eski yararlanma hakkını temsil eden bir
  • Yeni yararlanma hakkını temsil eden "startTime" ile değiştirme işleminin gerçekleştiği zamana karşılık gelen "expiryTime" değeri gösterilir.

Yararlanma hakkı değişiklikleriyle ilgili aynı davranışı sunduğu, ancak satın alma işlemini yönetebilmeniz için diğer yeni satın alma işlemlerine yönelik davranışlarla daha tutarlı bir yöntem sunduğundan, kullanımdan kaldırılan ProrationMode.DEFERRED yerine artık ReplacementMode.DEFERRED kullanılmalıdır.

Müşteri yönetimi

Gerçek zamanlı geliştirici bildirimlerini kullanarak, bir kullanıcının 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 kullanıcıya 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
Geri 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 ediyor 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ümlere sahip uygulamalar: Evet. Geliştiriciler, Console'da bu özelliği devre dışı bırakabilir.

Kullanıcıdan ödeme alındığında

Aynı SKU'yu kullanıyorsanız: Geçerli fatura döneminin sonu.

Farklı bir SKU kullanıyorsanız: bölüştürme 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 tespit et

Play Store'a derin bağlantı

Uygulamanızda yeniden kayıt için bir kullanıcı arayüzü sağlayın Uygulama dışı satın alma işlemlerini yönetin

Aboneliğin süresi dolmadan önce - uygulama içi

İptal edilen ancak henüz süresi dolmamış aboneliklerde, yeni abonelerin uygulama içi ürün satın alma akışının aynısını uygulayarak abonelerin uygulamanızda aboneliklerini geri yüklemelerine izin verebilirsiniz. Kullanıcı arayüzünüzde, kullanıcının mevcut bir aboneliğinin olduğundan emin olun. Örneğin, Yeniden etkinleştir düğmesiyle kullanıcının mevcut son kullanma tarihini ve yinelenen fiyatı göstermek isteyebilirsiniz.

Çoğu zaman, kullanıcıya abone olduğu aynı 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ı son kullanma tarihinde yenilenir. Eski abonelik hemen süresi doldu olarak işaretlenir.
  • Örneğin, Achilles'in Örnek Müzik Uygulaması aboneliği var ve aboneliğin süresi 1 Ağustos'ta sona erecek. 10 Temmuz'da bir aylık aboneliğe her ay aynı fiyatla yeniden abone olur. Yeni abonelik kalan krediyle orantılı olarak hesaplanır, hemen etkin olur ve 1 Ağustos'ta yenilenmeye devam eder.

Farklı bir fiyat (ör. 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 ile yükseltme veya düşürme işlemi başlatın.
  • Yeni abonelik eski aboneliğin yerini alır ve aynı son kullanma tarihinde yenilenir. Kullanıcı, tanıtım fiyatları dahil olmak üzere yeni SKU'nun fiyatı için orijinal son kullanma tarihinde ücretlendirilir. Eski abonelik, kod karartma uygulanmış bir hesap kimliği kullanılarak oluşturulmuşsa aynı kimlik yükseltme ve düşürme işlemleri için BillingFlowParams uygulamasına iletilmelidir.
  • Örneğin, Achilles'in Ö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ştirilir ve kullanıcıdan 1 Ağustos'ta tanıtım fiyatı 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ının uygulama başına yalnızca bir ücretsiz deneme almasını sağlar.

Satın alma jetonunu aldığınızda, yeni bir abonelikte yaptığınız gibi satın alma işlemini yapın. Ayrıca Google Play Developer API, abonelik kaynağında bir linkedPurchaseToken döndürür. Eski jetonun hizmetlerinize erişim elde etmek amacıyla kullanılmamasını sağlamak 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 etkin durumdayken kullanıcılar Yeniden abone ol'u (eski adıyla Geri yükle) tıklayarak Google Play abonelik merkezinde aboneliği geri yükleyebilirler. Bu işlemde aynı abonelik ve satın alma jetonu kullanılır.

iptal edilmiş bir aboneliği yeniden abone ol düğmesiyle gösteren google Play Store uygulamasındaki abonelikler bölümü
Şekil 8. Google Play Store uygulamasında, iptal edilmiş bir aboneliği gösteren ve Yeniden abone ol düğmesiyle birlikte gösterilen Hesap > Abonelikler bölümü.

Abonelikleri geri yükleme hakkında daha fazla bilgi için Geri yükleme işlemleri 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ırma içeren bir ürün kimliği sunmak isteyebilirsiniz. Bu kimlik, geri kazanma SKU'su olarak da adlandırılır. Teklifi uygulamanızda sağlayabilir veya kullanıcıyı e-posta gibi yöntemlerle uygulama dışında bilgilendirebilirsiniz.
  • 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ıya sunulan 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ının uygulama başına bir ücretsiz deneme almasını sağlar.
  • 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, yeni bir abonelikte yaptığınız gibi satın alma işlemini yapın. Abonelik kaynağında bir linkedPurchaseToken almazsınız.

Abonelik süresi dolduktan sonra - Play Store'da

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şlemle yeni bir abonelik ve satın alma jetonu oluşturulur.

google Play Store uygulamasında, iptal edilmiş ve süresi dolmuş bir aboneliği yeniden abone ol ve kaldır düğmeleriyle gösteren abonelikler bölümü
Şekil 9. İptal edilmiş veya süresi dolmuş bir aboneliği gösteren Google Play Store uygulamasındaki Hesap > Abonelikler bölümünde Yeniden abone ol ve Kaldır düğmeleriyle görünür.

Yeniden abone olmak, uygulama dışı satın alma işlemi olarak kabul edilir. Bu nedenle, uygulamanızın dışından yapılan satın alma işlemlerini işleme 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 sağlamak için promosyon kodları oluşturabilirsiniz. Daha fazla bilgi için Promosyon kodları bölümünü inceleyin.

Google Play, ücretsiz denemelerde ücretsiz denemeden ö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 provizyon veya ödeme olarak görebilir. Bu provizyon veya ödeme geçici olup daha sonra geri alınır ya da geri ödenir.

Deneme süresi sona erdikten sonra, tam abonelik tutarı kullanıcının ödeme yönteminden alınır.

Kullanıcı, ücretsiz deneme süresinin herhangi bir noktasında aboneliği iptal ederse abonelik deneme süresinin sonuna kadar etkin kalır ve ücretsiz deneme süresi sona erdiğinde ücret alınmaz.

İptal etme, geri ödeme veya iptal etme

Bir aboneliği iptal etmek, geri ödeme veya iptal etmek için Google Play Geliştirici API'sini kullanabilirsiniz. Bu işlev Google Play Console'da da mevcuttur.

  • İ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 sunabilirsiniz. Uygulamanız, bu iptal işlemlerini İptaller bölümünde açıklandığı şekilde gerçekleştirmelidir.
  • Geri ödeme: Geri ödeme yaptığınızda kullanıcı, aboneliği kullanmaya devam edebilir. Geri ödemeler, örneğin kullanıcının ürününüze erişmesini engelleyen teknik bir hata olduysa ancak hata giderilmişse kullanılabilir. En son ödemeden daha yüksek bir tutarda geri ödeme yapmak veya kısmi bir geri ödeme yapmak istiyorsanız Google Play Console'u kullanmanız gerektiğini unutmayın.
  • İptal etme: İ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 özellik kullanılabilir. Uygulamanız, bu iptal işlemlerini İ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 ödeme Erişimi iptal etme
İptal Evet Hayır Hayır
Geri ödeme Hayır Evet Hayır
İptal et Evet Evet Evet

Abonelerin faturalandırmasını erteleme

Otomatik yenilenen abonelerin bir sonraki faturalandırma tarihini, Google Play Developer API'de Purchases.subscriptions:defer kullanarak ileri alabilirsiniz. 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 ertelenen faturalandırma API'sini kullanabilirsiniz.

Ertelenmiş faturalandırma aşağıdakileri yapmanıza olanak tanır:

  • Özel bir teklif olarak kullanıcılara ücretsiz erişim verin (ör. film satın almaları için bir hafta ücretsiz erişim verme).
  • İyi niyetinizin göstergesi olarak müşterilere ücretsiz erişim verin.

Faturalandırma, API çağrısı başına en az bir gün ve en fazla bir yıl ertelenebilir. Faturalandırmayı daha da ertelemek için yeni faturalandırma tarihi gelmeden API'yi tekrar çağırabilirsiniz.

Örneğin, Demir'in Fishing Quarterly uygulaması için aylık bir online içeriğe aboneliği vardır. Normalde her ayın ilk gününde 1,25 İngiliz sterlini faturalandırılır. Mart ayında, uygulama yayıncısı için online bir ankete katıldı. Yayıncı, bir sonraki ödemeyi 15 Mayıs'a kadar erteleyerek onu altı hafta ücretsiz olarak ödüllendirir. Bu tarih, daha önce planlanan 1 Nisan olan faturalandırma tarihinden altı hafta sonradır. Darcy Nisan veya Mayıs başı için ücretlendirilmez ve içeriğe hâlâ erişebilir. 15 Mayıs'ta kendinden her ay için normal 1, 25 sterlin tutarındaki abonelik ücreti alınır. Bir sonraki yenileme tarihi şu anda 15 Haziran.

Erteleme sırasında, faturalandırma tarihinin değiştiğini kullanıcıya e-postayla veya uygulama içinden bildirmek isteyebilirsiniz.

Reddedilen ödemelerle ilgilenme

Faturalandırma döneminin sonunda ödeme sorunları olursa Google, iptal etmeden önce belirli aralıklarla aboneliği bir süre için yenilemeyi dener. Bu yeniden deneme süresi, 30 güne kadar ve belirtilen herhangi bir ek süre boyunca sürebilir. Google bu süre zarfında kullanıcılara e-postalar ve bildirimler göndererek ödeme yöntemlerini güncellemelerini de ister.

Ödeme reddedildikten sonra abonelik, etkinleştirilmesi durumunda öncelikle bir ek yayınlanma süresine girer. Ek süre boyunca kullanıcı aboneliğe erişmeye devam edebilir.

Ek süre sona erdiğinde abonelik 30 güne kadar hesap askıya alma sürecine girer. Hesabı askıya alma işlemi sırasında aboneliğe erişimi engelleyebilirsiniz.

Ödeme reddi sırasında aboneliğin kurtarılma olasılığını en üst düzeye çıkarmak için, kullanıcınızı ödeme sorunu konusunda bilgilendirebilir ve düzeltmesini isteyebilirsiniz.

Bu işlemi, ek yayınlanma süresi ve askıya alınmış hesap bölümlerinde açıklandığı gibi kendiniz yapabilir veya Google'ın uygulamanızdaki 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 mesajlaşmaları ve askıya alınmış hesapları günde bir kez gösterir. Ayrıca, kullanıcılara uygulamadan çıkmadan ödemelerini düzeltme fırsatı sunar.

Kullanıcıyı ödemeyi düzeltmesi için bilgilendiren atıştırmalık çubuğu
Şekil 20. Kullanıcıyı ödemeyi düzeltmesi için uyaran atıştırmalık çubuğu.

Mesajın gösterilip gösterilmeyeceğini belirlemek için kullanıcı uygulamayı her açtığında 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 Developer API'yi ç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() değerini kullanın.

Uygulama içi mesajlaşma akışını tetiklemeye ilişkin bir örneği aşağıda 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.
                }
            }
        });