Abonelik yaşam döngüsü

Abonelik satın alma işlemleri; otomatik yenileme davranışı, ödemenin reddedilmesi durumları ve geliştirici yönetimi işlemleri gibi birçok faktöre bağlı olarak kullanım ömrü boyunca birkaç farklı durumda gerçekleşebilir.

Otomatik yenilenen aboneliklerin yaşam döngüsünü yönetme

Bir kullanıcının abonelik durumu değiştiğinde arka uç sunucunuz bir SubscriptionNotification mesajı alır

Şekil 1. Otomatik yenilenen abonelik satın alma işlemleri için yaşam döngüsü durumları ve geçiş etkinlikleri.

Arka ucunuzdaki durumu güncellemek için bildirimdeki satın alma jetonuyla purchases.subscriptionsv2.get API'yi çağırın. Bu uç nokta, bir satın alma jetonu verilen en son abonelik durumunu sağlar ve abonelik yönetimi için bilgi kaynağı olarak kabul edilir.

Satın alma jetonu, abonelik kaydından geçerlilik süresi sona erdikten 60 gün sonrasına kadar geçerlidir. Bu tarihten sonra satın alma jetonu Google Play Developer API'yi çağırmak için kullanılamaz.

Otomatik yenilenen yeni abonelik satın alma işlemleri

Bir kullanıcı abonelik satın aldığında, RTDN istemcinize SUBSCRIPTION_PURCHASED türünde bir SubscriptionNotification mesajı gönderilir. İster bu bildirimi alın ister PurchasesUpdatedListener üzerinden yeni bir uygulama içi satın alma işlemi kaydedin ya da uygulamanızın onResume() yönteminde satın alma işlemlerini manuel olarak getirin, yeni satın alma işlemini güvenli arka ucunuzda işlemelisiniz. Bunu yapmak için şu adımları uygulayın:

  1. En son abonelik durumunu içeren bir abonelik kaynağı almak için purchases.subscriptionsv2.get uç noktasını sorgulayın.
  2. subscriptionState alanındaki değerin SUBSCRIPTION_STATE_ACTIVE olduğundan emin olun.
  3. Satın alma işlemini doğrulayın.
  4. Kullanıcıya içeriğe erişim izni verin. Tanımlayıcılar, satın alma sırasında setObfuscatedAccountId ve setObfuscatedProfileId kullanılarak ayarlanmışsa satın alma işlemiyle ilişkili kullanıcı hesabı, abonelik kaynağındaki ExternalAccountIdentifiers nesnesiyle tanımlanabilir.

Play Faturalandırma Kitaplığı'nda abonelikleri onaylama yöntemi acknowledgePurchase() ve onay durumunu kontrol etme yöntemi de (isAcknowledged()) bulunur. Bununla birlikte, daha fazla güvenlik için satın alma işlemini arka ucunuzda gerçekleştirmenizi öneririz.

Yeni satın alma işlemleri için abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

Abonelik yenilemeleri

Taksitsiz, otomatik yenilenen aboneliklerde abonelik yenilendiğinde SUBSCRIPTION_RENEWED bildirimi gönderilir. Taksitli aboneliklerde, faturalandırma tarihinde abonelik ücreti her alındığında SUBSCRIPTION_RENEWED bildirimi gönderilir. Kullanıcının hâlâ abonelik hakkına sahip olduğundan emin olun ve ardından abonelik durumunu, Google Play Geliştirici API'sinden döndürülen abonelik kaynağında sağlanan yeni expiryTime ile güncelleyin. Abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ]
}

Abonelik yenilemelerini onaylamanız gerekmez.

Ek süre

Abonelik yenilemesiyle ilgili ödeme sorunları olursa Google, kullanıcıyı bilgilendirir ve aboneliğin süresi dolmadan önce düzenli aralıklarla aboneliği yenilemeye çalışır. Kurtarma süresi, ek süreyi takiben hesabı askıya alma süresinden oluşabilir. Kullanıcı, ek süre boyunca abonelikten yararlanma hakkına hâlâ erişebiliyor olmalıdır.

queryPurchasesAsync() yöntemi, ek süre içindeki satın alma işlemlerini iade etmeye devam eder. Uygulamanız, bir kullanıcının abonelik hakkı olup olmadığını kontrol etmek için yalnızca queryPurchasesAsync hizmetini kullanıyorsa, bu abonelikler Play Faturalandırma Kitaplığı'nda etkin olarak gösterildiğinden uygulamanız ek süreyi otomatik olarak işlemelidir.

Abonelik durumunu arka ucunuzla senkronize etmek, reddedilen ödemeler konusunda daha fazla bilgi sahibi olmanızı sağlar ve istemsiz uygulamayı kullanmayı bırakmaya çalışırken size daha fazla bilgi sağlar. Kullanıcı, ek süre girdiğinde bildirim almak için SUBSCRIPTION_IN_GRACE_PERIOD türünde SubscriptionNotification mesajlarını dinleyin. Kullanıcı ek süredayken abonelik kaynağı autoRenewEnabled = true öğesini içerir. Google Play, expiryTime değerini ek süre sona erene kadar dinamik olarak uzatır. Çünkü yararlanma hakkı, kullanıcı iptal edene veya ek süre maksimum süre bitene kadar sürmelidir. Bu dönemde subscriptionState alanının değeri SUBSCRIPTION_STATE_IN_GRACE_PERIOD şeklindedir. Abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_future,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

Play, ek süre içinde olan kullanıcılara ödemelerinin reddedildiğini bildirir ve kullanıcılardan Play Store'daki ödeme yöntemi sorunlarını düzeltmelerini ister. Kullanıcı ek süre geçtiğinde, hatanın istemsiz olması ihtimaline karşı kullanıcıdan ödeme yöntemini düzeltmesini de teşvik etmeniz gerekir. Bunu yapmanın basit bir yolu In-App Messaging API'yi kullanmaktır. Kullanıcı uygulamanızı açtığında bu API'yi çağırırsanız geçici bir hızlı yemek çubuğunda kullanıcıya ödemesinin reddedildiğini bildiren bir Play mesajı gösterilir. Bu mesaj, kullanıcının Google Play'deki ödeme yöntemini düzeltmesi için bir derin bağlantı da içerir.

Kullanıcı, ödeme yöntemini düzelttiğinde abonelik orijinal yenileme tarihiyle yenilenir ve yenileme işlemini Yenilemeler bölümünde açıklandığı şekilde yapabilirsiniz.

Kullanıcı, ek süre içinde ödeme yöntemini düzeltmezse abonelik hesabı askıya alınır ve kullanıcı yararlanma hakkını kaybeder.

Ek süre erişimi ve kurtarma

Şekil 2'de, ek süre verilen ve kullanıcı ödeme yöntemini düzelttiğinde abonelikten çıkan aboneliğin zaman çizelgesi gösterilmektedir. Ek süre sona erdiğinde kullanıcı abonelik avantajlarını kaybetmeli ve hesabı askıya alma kapsamına girmelidir.

Şekil 2. Ek süreye giren ve sona ermeden önce iyileşen bir aboneliğin zaman çizelgesi.

Aşağıdaki noktaları göz önünde bulundurmak önemlidir:

  • Kullanıcı, ek süre boyunca abonelik avantajlarına erişmeye devam etmelidir.
  • Aboneliğin ek süre içinde kurtarılması durumunda yenileme tarihi sıfırlanmaz.
  • Ek süreyi, örneğin 7 günden 14 güne çıkarırsanız ek süre kapsamındaki kullanıcılar, abonelik avantajlarına daha uzun süre erişebilir.
  • Ek süreyi kısaltırsanız eski ek süreyi aşan kullanıcıların abonelik avantajları hemen iptal edilir. Örneğin, ek süreyi 14 günden 7 güne düşürürseniz eski ek sürenin 8-14. günlerindeki kullanıcıların abonelik avantajları hemen iptal edilir.
  • Abonelik etkin durumda kalır ve sessiz ek süre sona erene kadar ek süre RTDN almazsınız

Sessiz ek yayınlanma süresi

0 günlük ek süre belirleyebilirsiniz ancak Play, ödeme yeniden denemelerine yeterli süre tanımak için en az 1 gün bekler. Bu sessiz ek süre, ödeme işlemi için güvenlik ağı sağlar. Bu 24 saatlik süre boyunca abonelik ACTIVE durumunda kalır.

Abonelik durumu değişikliklerine uyum sağlamanın en iyi yolu, gerçek zamanlı geliştirici bildirimlerini (RTDN) dinlemek ve bunlara yanıt vermektir. Aboneliğin daha doğru bir durumunu öğrenmek için purchases.subscriptionsv2.get() yöntemini son kullanma zamanı yerine RTDN zamanında çağırın.

24 saatlik sessiz ek sürenin ardından abonelik durumuna bağlı olarak, aşağıdaki bildirimlerden birini alırsınız:

  • SUBSCRIPTION_ON_HOLD (etkinse)
  • SUBSCRIPTION_CANCELED (iptal edildiyse)
  • SUBSCRIPTION_EXPIRED (süresi dolduysa)
  • SUBSCRIPTION_RENEWED (başarıyla yenilendiyse)

Aboneliğin son durumunu öğrenmek için 24 saatlik sessiz ek sürenin ardından istediğiniz zaman subscriptionV2.get() yöntemini de çağırabilirsiniz.

Hesabı askıya alma

Abonelik yenilemesiyle ilgili ödeme sorunları varsa ek süre sona erdiğinde hesap askıya alınır. Bir abonelik hesabı askıya alındığında, abonelikten yararlanma hakkına erişimi engellemeniz gerekir.

Kullanıcıların bu değişiklikleri abonelik beklemedeyken yapması mümkün olduğundan, hesabı askıya alma işlemi sırasında tüm iptal işlemlerini, geri yükleme işlemlerini veya aboneliklerinizi yeniden satın alma işlemlerini gerektiği şekilde yürütmeye devam etmeniz gerekir.

RTDN'ler, kullanıcı hesabı askıya alma süresine girdiğinde sizi bilgilendirir. Böylece, aboneliğe erişiminin neden askıya alındığı konusunda kullanıcıyı mümkün olan en kısa sürede bilgilendirebilirsiniz. Bunu yapmanın basit bir yolu In-App Messaging API'yi kullanmaktır. Kullanıcı uygulamayı açtığında bu API'nin çağrılması, kullanıcıya geçici bir atıştırmalık çubuğunda ödemesinin reddedildiğini bildiren bir mesaj gösterir. Bu mesaj, kullanıcının Google Play'deki ödeme yöntemini düzeltmesi için bir derin bağlantı da içerir.

Kullanıcılarınız abonelik içeriğine uygulamanızın dışında erişebiliyorsa farklı yüzeylerde erişimlerini kaybettiklerini keşfedebilirler. Ödemenin reddedilmesi nedeniyle aboneliğinin artık etkin olmadığını bildirmek için kullanıcıya bir push bildirimi veya e-posta gönderebilirsiniz.

Abonelik, hesabı askıya alma işlemi sırasında queryPurchasesAsync() yöntemi tarafından iade edilmez. Bu nedenle, uygulamanız mevcut satın alma işlemlerini görüntülemek için bu yöntemi kullanıyorsa hesabı askıya alma özelliğini varsayılan olarak desteklemeniz gerekir.

Gerçek zamanlı geliştirici bildirimleri sayesinde, bir abonelik hesabı askıya alındığında SUBSCRIPTION_ON_HOLD türünde bir SubscriptionNotification mesajı alırsınız. Yeni abonelik bilgilerini almak için güvenli arka uç sunucunuzdan purchases.subscriptionsv2.get yöntemini çağırın. Hesap muhafazası sırasında abonelik kaynağının expiryTime alanı geçmiş bir zaman damgasına, subscriptionState alanı ise SUBSCRIPTION_STATE_ON_HOLD olarak ayarlanır:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

Tekrar erişim vermek için kullanıcıların ödeme yöntemlerini düzeltmesi gerekir. Play, hesaplarının reddedilmesi durumunda kullanıcıları bilgilendirir. Ayrıca, ödeme yöntemlerini düzeltmelerini de teşvik etmeniz gerekir.

Kullanıcı, ödeme yöntemini düzelttikten sonra abonelik etkin durumuna döner. Ardından, abone olunan içeriğe erişimi yeniden sağlamanız gerekir. Bu durumda, aynı satın alma işlemi kurtarıldığı için satın alma jetonu hesabı askıya alma işlemi başlamadan öncekiyle aynıdır ve SUBSCRIPTION_RECOVERED türünde bir RTDN alırsınız.

Taksitli aboneliklerde, her ödeme girişiminde reddedilen ödemeler ve geri ödeme işlemleri gerçekleşebilir.

Kurtarma işleminden sonra Play Faturalandırma Kitaplığı queryPurchasesAsync() yöntemini kullanarak aboneliği tekrar iade eder. Bir kullanıcının abonelik alma hakkına sahip olup olmadığını belirlemek için bu yöntemi kullanırsanız uygulamanız, hesabı askıya alma durumundan kurtarma işlemini otomatik olarak gerçekleştirmelidir.

Bir abonelik kurtarıldığında ve kullanıcının yeniden erişim elde etmesi gerektiğinde bildirim almak için SUBSCRIPTION_RECOVERED türünde bir SubscriptionNotification mesajı bekleyin. Bu bildirimi aldıktan sonra bir abonelik için sorguda bulunursanız expiryTime alanı gelecekte bir zaman damgasına ayarlanır ve subscriptionState alanı tekrar SUBSCRIPTION_STATE_ACTIVE değerine ayarlanır:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      ...
    }
  ],
}

Kullanıcı, ödeme yöntemini hesap askıya alma süresi sona ermeden önce düzeltmezse bunun yerine SUBSCRIPTION_CANCELED türünde bir RTDN alırsınız. İptal işlemiyle ilgili talimatlar için İptaller bölümüne bakın. Bu şekilde iptal edilen bir abonelik için sorgu yaptığınızda, döndürülen expiryTime alanı geçmiş bir zaman damgasına ayarlanır:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_past,
      ...
    }
  ],
}

Hesabı askıya alma işlemi sırasında iptal işlemi size bildirildikten hemen sonra, kullanıcının ücretli yararlanma hakkının olmaması ve aboneliğin iptal işlemiyle birlikte kullanımı iptal edilmiş olması nedeniyle SUBSCRIPTION_EXPIRED türünde bir RTDN de alırsınız. Bu geçerlilik bitiş tarihini her zamanki gibi kullanabilirsiniz.

Kullanıcı, hesabının askıya alındığı süre boyunca uygulama üzerinden sunduğunuz başka bir planı veya aynı abonelik planını yeniden satın alarak orijinal satın alma işleminden sonra yeniden erişim kazanabilir. Bu durumda, yeni bir satın alma jetonu verilir ve yeni değer, bu yeni örneği temsil eden bir SUBSCRIPTION_PURCHASED etkinliğinin parçası olarak döndürülür.

Hesabı askıya alma erişimi ve kurtarma

Şekil 3'te, hesap askıya alma durumuna geçen ve kullanıcı ödeme yöntemini düzelttiğinde aboneliğin kurtarıldığı bir aboneliğin zaman çizelgesi gösterilmektedir.

Şekil 3. Hesabı askıya alma işlemine giren ve sona ermeden önce iyileşen bir aboneliğin zaman çizelgesi.

Önceki örneğe benzer şekilde, Şekil 4'te hesap askıya alma moduna girmeden önce ek süre verilen ve daha sonra beklemedeyken iyileşen bir aboneliğin zaman çizelgesi gösterilmektedir.

Şekil 4. Ek süre tanınan, hesabı askıya alma işlemine başlayan ve son olarak hesabı askıya alma işlemi sona ermeden önce iyileşen bir aboneliğin zaman çizelgesi.

Aşağıdaki noktaları göz önünde bulundurmak önemlidir:

  • Bir abonelik hesabı askıya alınmadan önce Google Play, 48 saate kadar ödeme yönteminden ödeme almak için ek denemeler yapar. Bu süre zarfında kullanıcı, abonelik avantajlarından yararlanmaya devam eder. Bu yeniden deneme süresi geçtikten sonra abonelik, hesap askıya alma durumuna geçer ve kullanıcı abonelik avantajlarına erişimi kaybeder.
  • Başarısız bir ödeme şekli nedeniyle abonelik, duraklatılmış durumdan devam ettirildiğinde abonelik doğrudan hesap askıya alınır.
  • Askıya alınmış hesap durumu sona erdiğinde abonelik yenileme tarihi sıfırlanır.

Süre sonları

Bir abonelik süresi dolduğunda kullanıcının aboneliğe erişimini kaybetmesi gerekir. Bu durumda, SUBSCRIPTION_EXPIRED türünde bir SubscriptionNotification mesajı gönderilir. Bu bildirimi aldığınızda en yeni abonelik kaynağını almak için Google Play Developer API'yi sorgulayın. subscriptionState öğesinin SUBSCRIPTION_STATE_EXPIRED olduğunu onayladıktan sonra yararlanma hakkını kaldırın ve satın alma durumunu arka ucunuzda geçersiz olarak kaydedin. Abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time_in_past,
      ...
    }
  ],
}

İptal sayısı

Bir kullanıcı, bir aboneliğini Play abonelik merkezinden gönüllü olarak iptal edebilir veya hesabı askıya alındıktan sonra iyileşmezse aboneliklerinin otomatik olarak iptal edilmesini sağlayabilir. Geliştiriciler purchases.subscriptions.cancel ile iptal işlemi de tetikleyebilir. Bir abonelik iptal edildiğinde kullanıcı, geçerli faturalandırma döneminin sonuna kadar içeriğe erişmeye devam eder. Faturalandırma dönemi sona erdiğinde erişim iptal edilmelidir.

Taksitsiz, otomatik yenilenen bir abonelik iptal edildiğinde SUBSCRIPTION_CANCELED bildirimi tetiklenir. Bu bildirimi aldığınızda Google Play Developer API'den döndürülen abonelik kaynağında subscriptionState alanı SUBSCRIPTION_STATE_CANCELED olarak, expiryTime alanında ise kullanıcının aboneliğe erişimini kaybetmesi gereken tarih yer alır. Söz konusu tarih geçmişteyse kullanıcının yararlanma hakkını hemen kaybetmesi gerekir. Bu durum, örneğin kullanıcının, ödemenin reddedilmesi nedeniyle hesap bekletme durumundayken aboneliğini iptal etmesi halinde gerçekleşebilir.

İptal edilen bir satın alma işleminin abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ],
}

Taksitli aboneliklerde, ödemeler taahhüt süresi boyunca kaldığında kullanıcı tarafından iptal edildiğinde SUBSCRIPTION_CANCELLATION_SCHEDULED bildirimi gönderilir. İptal işlemi beklemededir ve mevcut taahhüt süresinin sonundan itibaren geçerli olur. Bu bildirimi aldığınızda, taksitli abonelik taahhüt döneminin sonuna kadar hâlâ etkin olacağından, Google Play Geliştirici API'sinden döndürülen abonelik kaynağındasubscriptionState alanı SUBSCRIPTION_STATE_ACTIVE olarak ayarlanmıştır. Ancak bekleyen boş bir İptal nesnesi var. Taahhüt süresinin sonunda SUBSCRIPTION_CANCELED bildirimi ve ardından SUBSCRIPTION_EXPIRED gönderilir.

İptal edilmeyi bekleyen bir taksitli abonelik satın alma işlemi için abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_plan01",
      "expiryTime": expiration_time,
      "autoRenewingPlan": {
        "autoRenewEnabled": true,
        "recurringPrice": {
          "currencyCode": "USD",
          "units": "1",
          "nanos": 990000000
        },
        "installmentDetails": {
          "initialCommittedPaymentsCount": 6,
          "remainingCommittedPaymentsCount": 5,
          "pendingCancellation": {}
      ...
        }
      }
    }
  ],
}

Aboneliğin neden iptal edildiğini (örneğin, aboneliğin kullanıcı tarafından mı, sistem tarafından mı yoksa sizin tarafınızdan mı iptal edildiğini) öğrenmek için abonelik kaynağındaki canceledStateContext alanına bakabilirsiniz. Abonelik kullanıcı tarafından iptal edildiyse kullanıcının aboneliği neden iptal ettiğini öğrenmek için userInitiatedCancellation alanına bakabilirsiniz. Bu sayede iletişim stratejilerinin bilgilendirilmesine yardımcı olur.

İptal edilen ancak süresi henüz dolmamış abonelikler queryPurchasesAsync() üzerinden iade edilir. Uygulamanızda, kullanıcıya aboneliğinin iptal edildiğini ve geçerlilik bitiş tarihini bildiren bir mesaj göstermek isteyebilirsiniz.

İptal sayısı

Abonelik, arka ucunuzun purchases.subscriptions.revoke kullanarak aboneliği iptal etmesi veya satın alma işleminin geri ödenmesi gibi çeşitli nedenlerle iptal edilebilir. Bu durumda, kullanıcının yararlanma hakkını hemen iptal edin. Bu durumda, SUBSCRIPTION_REVOKED türünde bir SubscriptionNotification mesajı gönderilir. Bu bildirimi aldığınızda, Google Play Developer API'den döndürülen abonelik kaynağında subscriptionState alanı SUBSCRIPTION_STATE_EXPIRED olarak ayarlanmıştır.

İptal edilen bir satın alma işlemine ilişkin abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": expiration_time,
      ...
    }
  ]
}

Ertelenen abonelikler

Bir kullanıcının yararlanma hakkını uzatmak istemenizin çeşitli nedenleri vardır. Örneğin, kullanıcılara özel bir promosyon olarak ücretsiz erişim sunmak isteyebilirsiniz. Örneğin, bir film satın alma işlemi için bir hafta ücretsiz olarak veya iyi niyetinizi göstermek amacıyla müşterilere ücretsiz erişim imkanı sunabilirsiniz. Otomatik yenilenen aboneliğin bir sonraki faturalandırma tarihinden önce Play Developer API'nin purchases.subscriptions.defer yöntemini kullanabilirsiniz. Bunu yaptığınızda, SUBSCRIPTION_DEFERRED türünde bir SubscriptionNotification mesajı gönderilir. Erteleme süresi boyunca kullanıcı, içeriğinize tam erişimle abone olur ancak sizden ödeme alınmaz. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.

Ön ödemeli planlarda son kullanma süresini ertelemek için erteleme API'sini kullanabilirsiniz.

Ertelenen bir aboneliğin abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": timestamp_in_future,
      ...
    }
  ],
}

Duraklatılmış abonelikler

Kullanıcıların aboneliklerini duraklatmalarına izin vererek isteğe bağlı kullanıcı kaybını azaltabilirsiniz. Duraklatma özelliğini etkinleştirdiğinizde kullanıcılar, aboneliklerini yinelenme dönemine bağlı olarak bir hafta ile üç ay arasında bir süre boyunca duraklatmayı seçebilirler.

Abonelik yinelenme Haftalık Aylık Üç Ay Altı Ay Yıllık
Kullanılabilir duraklatma uzunlukları* 1 hafta
2 hafta
3 hafta
4 hafta
1 ay
2 ay
3 ay
1 ay
2 ay
3 ay
1 ay
2 ay
3 ay
Yok
*Dilediğiniz zaman değiştirilebilir.

Abonelik duraklatma işleminin geçerli olması için mevcut fatura döneminin bitmesi gerekir. Abonelik duraklatılmış durumdayken kullanıcı aboneliğe erişemez ve yenileme ücretini ödemez. Duraklatma süresinin sonunda abonelik devam eder ve Google aboneliği yenilemeye çalışır. Başarıyla devam ettirilen abonelikler yeniden etkinleşir. Devam ettirme bir ödeme sorunu nedeniyle başarısız olursa kullanıcı, hesap askıya alma durumunu şekil 5 ve 6'da gösterildiği gibi girer:

Şekil 5. Kullanıcı, aboneliğini duraklatıp devam ettirir.
Şekil 6. Kullanıcı, aboneliğini duraklatır ve ardından hesabı askıya alır.

Kullanıcılar, Şekil 6'da gösterildiği gibi, duraklatma süresi boyunca istedikleri zaman bir aboneliği manuel olarak devam ettirmeyi de seçebilirler. Kullanıcı manuel olarak işleme devam ettiğinde, faturalandırma tarihi manuel devam ettirme tarihine geçer.

Bir kullanıcının aboneliği duraklatıldığında Play Faturalandırma Kitaplığı, aboneliği queryPurchasesAsync() yöntemiyle döndürmez. Abonelik devam ettirilirse queryPurchasesAsync() yöntemi aboneliği tekrar döndürür.

Kullanıcılar aboneliğini duraklattığında haberdar olmak için RTDN'leri dinleyin. Bu bildirimler, uygulamanızdaki kullanıcılarınıza aboneliklerini duraklattıklarını ve erişimleri olmadığını bildirmenize de olanak tanır. Ayrıca Google Play derin bağlantısı kullanarak kullanıcılara istedikleri zaman aboneliklerini manuel olarak devam ettirebilecekleri bir yöntem de sunmanız gerekir.

Kullanıcınız aboneliğini duraklatma işlemini başlattığında SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED türünde bir SubscriptionNotification mesajı gönderilir. Bu aşamada, kullanıcı bir sonraki yenileme tarihine kadar aboneliğine erişmeye devam etmelidir ve abonelik kaynağı autoRenewEnabled = true öğesini içermelidir. Bu noktada subscriptionState alanının değeri SUBSCRIPTION_STATE_ACTIVE.

Duraklatma geçerli olduğunda SUBSCRIPTION_PAUSED türünde bir SubscriptionNotification mesajı gönderilir. Bu durumda kullanıcının aboneliğine erişimi kaybetmesi gerekir. Abonelik kaynağı autoRenewEnabled = true içerir. subscriptionState alanı ise SUBSCRIPTION_STATE_PAUSED olarak ayarlanır. PausedStateContext nesnesini kontrol ederek aboneliğin ne zaman tekrar yenilenmesinin beklendiğini görebilirsiniz.

Abonelik, duraklatma süresinin sonunda otomatik olarak devam ettirilirse veya kullanıcı aboneliği manuel olarak devam ettirmeyi seçerse SUBSCRIPTION_RENEWED türünde bir SubscriptionNotification mesajı gönderilir. Bu işlem, Yenilemeler bölümünde açıklandığı şekilde gerçekleştirilmelidir.

Duraklatma sonrasında aboneliği devam ettirmeye çalışırken bir ödeme hatası olursa SUBSCRIPTION_ON_HOLD türünde bir SubscriptionNotification mesajı gönderilir. Bu durum, Hesabı askıya alma bölümünde açıklandığı şekilde gerçekleştirilmelidir.

Yeniden abone olun

Otomatik yenilenen abonelik temel planları için Google Play Store'da bir Yeniden abone ol düğmesi gösterilebilir. Bu düğme, kullanıcıların bir aboneliğe yeniden erişim kazanmalarını sağlar. Çeşitli nedenlerle (ör. bir aboneliğin uzun süre önce sona ermesi) görünmeyebilir.

Şekil 7. Google Play Store uygulamasının Hesap > Abonelikler bölümünde Yeniden abone ol düğmesiyle birlikte iptal edilmiş bir aboneliğin gösterilmesi.

Düğme her zaman Yeniden abone ol etiketli olsa da işlevi abonelik durumuna bağlıdır.

Bir abonelik iptal edilmiş ancak henüz süresi dolmamış olsa bile kullanıcı abone olmaya devam eder ve abonelik avantajlarından yararlanır. Kullanıcı Yeniden abone ol seçeneğine dokunursa iptal işlemi etkili şekilde geri alınır ve abonelik yenilenmeye devam eder. Bu işlem, Play geliştirici dokümanlarında ve API'lerinde geri yükleme olarak bilinir.

Otomatik yenilenen aboneliğin süresi dolduktan sonra, kullanıcıların aynı abonelik temel planını satın almasına izin verebilirsiniz. Bu işlem, Play geliştirici belgelerinde ve API'lerinde yeniden abone olma olarak bilinmektedir. Bu seçeneği her temel plan için Play Console'da veya API'yi kullanarak yapılandırabilirsiniz.

Süresi dolmadan önce yenile

Uygulamanız, bir kullanıcının abonelik alma hakkına sahip olup olmadığını belirlemek için yalnızca queryPurchasesAsync() yöntemini kullanıyorsa geri yükleme işlemlerini otomatik olarak yapması gerekir. Bunun nedeni, queryPurchasesAsync() yöntemi, iptal edilen satın alma işlemlerinin kullanım bitiş tarihlerinden önce iade edilmesine devam etmektedir. Geri yüklenen abonelikler, iptal edilmemiş gibi yenilenmeye devam eder.

Uygulamanız abonelik durumunu bir arka uçla senkronize ediyorsa SUBSCRIPTION_RESTARTED türünde bir SubscriptionNotification mesajı dinlemeniz gerekir. Bu RTDN'yi almanızın ardından uygulamanız bildirime yanıt verebilir, aboneliğin artık yenilenmek üzere ayarlandığını kaydedebilir ve uygulamanızda geri yükleme mesajları göstermeyi durdurabilir. Abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date
      ...
    }
  ],
}

Süre dolduktan sonra yeniden abone olma

Google Play Console veya API kullanılarak yeniden abone olunmasına izin vermek için otomatik yenilenen temel plan yapılandırılırsa kullanıcılar süresi dolmuş bir aboneliği Google Play Store'da yeniden satın alabilirler.

Bunlar yeni satın alma işlemleridir. Google Play yepyeni bir satın alma jetonu yayınlar ve arka ucunuz SUBSCRIPTION_PURCHASED türünde bir RTDN alır. Bu tür uygulama dışı satın alma işlemi için satın alma durumu, orijinal satın almayla ilişkilendirilmiş bir linkedPurchaseToken içermez. Bunun nedeni, orijinal aboneliğin tamamen sona ermesidir. Bunlar, arka ucunuzun diğer satın alma işlemleri gibi işleyip onaylaması gereken yeni satın alma işlemleridir.

Abonelik yükseltme, düşürme ve yeniden abone olma

Bir kullanıcı aboneliğin süresi dolmadan önce uygulamanızı iptal ettikten sonra aboneliğinizi yükselttiğinde, düşürdüğünde veya kaydolduğunda, eski abonelik geçersiz kılınır ve yeni bir satın alma jetonuyla yeni abonelik oluşturulur.

Ayrıca, Google Play Developer API'den döndürülen abonelik kaynağı, kullanıcının yeni sürüme geçtiği, eski sürüme geçtiği veya yeniden abone olduğu eski satın alma işlemini gösteren bir linkedPurchaseToken alanı içerir. Bu alandaki satın alma jetonunu, eski aboneliği aramak ve mevcut kullanıcı hesabını tanımlamak için kullanabilirsiniz. Böylece, yeni satın alma işlemini aynı hesapla ilişkilendirebilirsiniz.

Uygulamanızda bir kullanıcıya yükseltme, düşürme veya yeniden abone olma seçenekleri sunmadan önce mevcut aboneliği kabul etmeniz gerekir. Mevcut abonelik hâlâ onay bekliyorsa plan değişikliği veya yeniden abone olma işlemi engellenir.

Kullanıcı yükseltme, düşürme veya yeniden abone olma işlemini başarıyla satın alırsa bu yeni satın alma işlemini onaylamanız gerekir. Bunu yapmanın önerilen yolu Google Play Developer API'yi kullanmaktır. Abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  ...
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "linkedPurchaseToken": old_purchase_token,
  ...
  "lineItems": [
    {
      "productId": "sub_variant_plan01",
      "expiryTime": next_renewal_date,
      "autoRenewingPlan": {
        "autoRenewEnabled": true
      }
    }
  ],
}

Fiyat değişiklikleri

Otomatik yenilenen abonelik fiyatlarını değiştirme ve uygun olduğunda kullanıcıları bilgilendirme hakkında bilgi edinmek için fiyat değişikliğiyle ilgili en iyi uygulamalar kılavuzunu inceleyin.

Kaydolan mevcut abonelere fiyat değişiklikleri uygulandığında, kullanıcının yeni fiyatı onaylamak veya reddetmek için işlem yapması durumunda bir RTDN alırsınız.

Fiyat değişikliği onayı için kullanıcı onayını işleme

Bir kullanıcı aboneliğinizin fiyatı artışını kabul ettiğinde SUBSCRIPTION_PRICE_CHANGED_CONFIRMED türünde bir SubscriptionNotification mesajı alırsınız. Kullanıcı onayı istenmeyen fiyat düşüşü olduğunda veya abonelik fiyatı yenilendiğinde SUBSCRIPTION_RENEWED türünde bir SubscriptionNotification mesajı alırsınız. Bu bildirimi diğer tüm yenilemeler gibi ele alın.

Kullanıcı onayı istenen fiyat artışının kabul edilmediği durumları ele alma

Kullanıcı, daha yüksek fiyattan yenileme yapması gerekmeden önce fiyat artışınızı kabul etmezse abonelikten otomatik olarak kaldırılır ve SUBSCRIPTION_CANCELED türünde bir SubscriptionNotification mesajı alırsınız. Bu etkinliği İptaller bölümünde açıklandığı şekilde işleyebilirsiniz.

Kullanıcılar, aynı mekanizmayı izleyerek kullanıcı onayı istenmeyen fiyat artışı için aboneliklerini iptal edebilir.

Ön ödemeli planların yaşam döngüsünü yönetme

Otomatik yenilenen aboneliklerde olduğu gibi, her yeni satın alma işleminden sonra ön ödemeli planları onaylamanız gerekir. Ön ödemeli planlar söz konusu olduğunda kullanıcının her defasında satın alma akışından geçmesi gerekeceğinden, hem ilk satın alma işlemini hem de para ekleme işlemlerini eksiksiz bir şekilde işlemeniz gerekir.

Ön ödemeli plan sürelerinin kısa olma ihtimali nedeniyle satın alma işlemini en kısa sürede onaylamanız önemlidir. Süresi bir hafta veya daha uzun olan ön ödemeli planlar 3 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ştiricilere üç günlük ön ödemeli plan satın alma işlemini onaylamak için 1,5 gün süre tanınır.

Şekil 8. Abonelik satın alma işlemleri için yaşam döngüsü durumları ve geçiş etkinlikleri.

Ön ödemeli plan aboneliği her satın alındığında, yapılan her para ekleme işlemi de dahil olmak üzere RTDN istemcinize SUBSCRIPTION_PURCHASED türünde bir SubscriptionNotification mesajı gönderilir. Ön ödemeli plan aboneliğinin son durumunu kontrol etmek için purchases.subscriptionsv2.get yöntemini çağırın.

Para ekleme işlemleri için yeni bir satın alma jetonu gönderilir ve önceki satın alma jetonunu, yeni abonelik satın alma durumunun bir parçası olarak linkedPurchaseToken alanında alırsınız. Satın alma jetonu, abonelik kaydından geçerlilik süresi sona erdikten 60 gün sonrasına kadar geçerlidir. Bu tarihten sonra satın alma jetonu Google Play Developer API'yi çağırmak için kullanılamaz.

Ön ödemeli plan satın alma işlemi için abonelik kaynağı aşağıdaki örneğe benzer:

{
  "kind": "androidpublisher#subscriptionPurchaseV2",
  "startTime": "2022-04-22T18:39:58.270Z",
  "regionCode": "US",
  "subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
  "latestOrderId": "GPA.3333-4137-0319-36762",
  "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
  "lineItems": [
    {
      "productId": "prepaid_plan01",
      "expiryTime": expiry_date,
      "prepaidPlan": {
        "allowExtendAfterTime": timestamp_after_which_topups_are_allowed
      }
    }
  ]
}

Yararlanma hakkının ne zaman sona erdiğini expiryTime alanında görebilirsiniz. Para ekleme satın alma işlemleri, hak kazanım süresini biriktirerek artırır. Yani kullanıcı orijinal yararlanma hakkı sona ermeden önce para yüklerse yeni süre önceki geçerlilik bitiş tarihinin üstüne eklenir.

Uygulamanızda, kullanıcıyı ön ödemeli aboneliklerinin para ekleyerek uzatılabileceğini bildiren bir mesaj göstermek isteyebilirsiniz. Kullanıcının ne zaman para ekleyebileceğini öğrenmek için abonelik kaynağındaki allowExtendAfterTime alanını kontrol edin.

Ön ödemeli planlar otomatik olarak yenilenmediğinden iptal edilemez. Ön ödemeli bir planı iptal etmek isteyen kullanıcı, son kullanma tarihine ulaşabilmesini sağlayabilir.