Abonelik yaşam döngüsü

Abonelik satın alma işlemleri, otomatik yenileme davranışı, ödeme reddi durumları ve geliştirici yönetim işlemleri gibi birçok faktöre bağlı olarak yaşam döngüsü boyunca birkaç farklı durumdan geç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 olarak yenilenen abonelik satın alma işlemleri için yaşam döngüsü durumları ve geçiş etkinlikleri.

Arka uçta durumu güncellemek için bildirime satın alma jetonu eklenmiş şekilde purchases.subscriptionsv2.get API'yi çağırın. Bu uç nokta, satın alma jetonu verildiğinde en son abonelik durumunu sağlar ve abonelik yönetimi için doğru kaynak olarak kabul edilir.

Satın alma jetonu, abonelik kaydından geçerlilik süresinin sona ermesinden sonraki 60 gün sonraya kadar geçerlidir. Bu tarihten sonra satın alma jetonu, Google Play Geliştirici 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üne sahip bir SubscriptionNotification mesaj gönderilir. Bu bildirimi alırsanız veya uygulama içi yeni bir satın alma işlemini PurchasesUpdatedListener üzerinden kaydederseniz ya da uygulamanızın onResume() yönteminde satın alma işlemlerini manuel olarak alırsanız yeni satın alma işlemini güvenli arka uçta işlemeniz gerekir. 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ının değerinin 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 ayarlandıysa satın alma işlemiyle ilişkili kullanıcı hesabı, abonelik kaynağındaki ExternalAccountIdentifiers nesnesi ile tanımlanabilir.

Play Faturalandırma Kitaplığı, aboneliği onaylama acknowledgePurchase() ve onay durumunu kontrol etme isAcknowledged() yöntemleri de içerir. Ancak daha iyi güvenlik için satın alma işlemini arka uçta işlemenizi ö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

Taksitli olmayan, otomatik olarak yenilenen abonelikler için abonelik yenilendiğinde SUBSCRIPTION_RENEWEDbir bildirim gönderilir. Taksitli aboneliklerde, abonelik faturalandırma tarihinde her ödeme alındığında bir SUBSCRIPTION_RENEWED bildirimi gönderilir. Kullanıcının aboneliğe hâlâ hak sahibi olduğundan emin olduktan sonra, abonelik durumunu Google Play Developer API'den 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 yenilemeyle ilgili ödeme sorunları varsa Google, kullanıcıyı bilgilendirir ve aboneliğin süresi dolmadan önce aboneliği düzenli aralıklarla yenilemeyi dener. Bu kurtarma dönemi, ek süreyi takiben hesap askıya alma süresinden oluşabilir. Kullanıcı, ek süre boyunca abonelik hakkına erişmeye devam edebilmelidir.

queryPurchasesAsync() yöntemi, ek süre içinde olan satın alma işlemlerini döndürmeye devam eder. Uygulamanız, kullanıcının abonelik almaya uygun olup olmadığını kontrol etmek için yalnızca queryPurchasesAsync'ten yararlanıyorsa bu abonelikler Play Faturalandırma Kitaplığı üzerinden etkin olarak gösterildiği için uygulamanız ek süreleri otomatik olarak ele almalıdır.

Abonelik durumunu arka uçunuzla senkronize etmek, ödeme reddedilmelerinden daha fazla haberdar olmanızı sağlar ve istemsiz abonelikten çıkma oranını azaltmaya çalışırken size daha fazla bağlam bilgisi sunar. Kullanıcı ek süreye girdiğinde bildirim almak için SUBSCRIPTION_IN_GRACE_PERIOD türüne sahip SubscriptionNotification mesajlarını dinleyin. Kullanıcı ek süre içindeyken abonelik kaynağı autoRenewEnabled = true içerir. Google Play, kullanıcı iptal edene veya ek süre maksimum süresine ulaşana kadar geçerli olması gerektiği için expiryTime değerini ek süre sona erene kadar dinamik olarak uzatır. Bu dönemde subscriptionState alanının değeri SUBSCRIPTION_STATE_IN_GRACE_PERIOD'dur. 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ıları ödemelerinin reddedilmesiyle ilgili olarak bilgilendirir ve Play Store'da ödeme yöntemi sorunlarını düzeltmelerini ister. Bir kullanıcı ek süreye girdiğinde, hatanın istemsiz olması ihtimaline karşı kullanıcıyı ödeme yöntemini düzeltmeye teşvik etmeniz de gerekir. Bunu yapmanın en kolay yolu uygulama içi mesajlaşma API'sini kullanmaktır. Kullanıcı uygulamanızı açtığında bu API'yi çağırırsanız kullanıcıya ödemesinin reddedildiğini bildiren geçici bir ek bilgi çubuğunda bir Play mesajı gösterilir. Bu mesajda, kullanıcının Google Play'de ödeme yöntemini düzeltmesi için bir derin bağlantı da yer alır.

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

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

Ek süre erişimi ve kurtarma

Şekil 2'de, ek süreye giren ve ardından kullanıcının ödeme yöntemini düzeltmesiyle aboneliğin tekrar etkinleştirilmesini gösteren bir zaman çizelgesi gösterilmektedir. Ek süre sona erdiğinde kullanıcı, abonelik avantajlarını kaybeder ve hesabı askıya alınır.

Şekil 2. Ek kullanım süresine giren ve süresi dolmadan iyileşen bir aboneliğin zaman çizelgesi.

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

  • Kullanıcı, ek süre boyunca abonelik avantajlarına erişmeye devam etmelidir.
  • Bir abonelik ek süre içinde kurtarıldığında yenileme tarihi sıfırlanmaz.
  • Ek süreyi uzatırsanız (ör. 7 günden 14 güne) ek süre içinde olan kullanıcılar abonelik avantajlarına daha uzun süre erişebilir.
  • Ek süreyi kısalttığınızda, eski ek sürenin büyük bir kısmını doldurmuş olan kullanıcıların abonelik avantajları hemen iptal edilir. Örneğin, ek süreyi 14 günden 7 güne indirirseniz eski ek sürenin 8-14. günlerinde olan 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 süre

0 günlük bir ek süre belirleyebilirsiniz ancak Play, ödemenin yeniden denenmesi için yeterli sürenin sağlanması amacıyla en az 1 gün bekler. Bu sessiz ek süre, ödeme işlemleri için bir güvenlik ağı sağlar. Bu 24 saatlik süre boyunca abonelik ACTIVE durumunda kalır.

Abonelik durumu değişikliklerini takip etmenin en iyi yolu, gerçek zamanlı geliştirici bildirimlerini (RTDN) dinleyip bunlara yanıt vermektir. Aboneliğin daha doğru bir durumunu almak için purchases.subscriptionsv2.get() yöntemini, geçerlilik bitiş tarihi 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ılı bir şekilde yenilendiyse)

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

Hesabı askıya alma

Abonelik yenilemeyle ilgili ödeme sorunları varsa ek süre sona erdiğinde hesap askıya alma süresi başlar. Bir abonelik askıya alındığında abonelikten yararlanma hakkına erişimi engellemeniz gerekir.

Hesap bekletme sırasında, kullanıcının abonelik beklemedeyken bu değişiklikleri yapabileceği için iptal, geri yükleme veya aboneliklerinizi yeniden satın alma işlemlerini gerektiği gibi yapmaya devam etmeniz gerekir.

RTDN'ler, kullanıcı hesap bekletme dönemine girdiğinde sizi bilgilendirir. Böylece, aboneliğe erişiminin neden askıya alındığını en kısa sürede kullanıcıya bildirebilirsiniz. Bunu yapmanın en kolay yolu Uygulama İçi Mesajlaşma API'sini kullanmaktır. Kullanıcınız uygulamayı açtığında bu API'yi çağırmak, kullanıcıya ödemesinin reddedildiğini bildiren geçici bir bilgi çubuğunda bir mesaj gösterir. Bu mesajda, kullanıcının Google Play'de ödeme yöntemini düzeltmesi için bir derin bağlantı da yer alır.

Kullanıcılarınız abonelik içeriğine uygulamanızın dışından erişebiliyorsa farklı platformlarda erişimi kaybettiklerini fark edebilirler. Ödeme reddedildiği için aboneliğinin artık etkin olmadığını kullanıcıya bildirmek üzere kullanıcıya bir push bildirimi veya e-posta gönderebilirsiniz.

Hesap bekletme sırasında abonelik queryPurchasesAsync() yöntemiyle döndürülmez. Bu nedenle, uygulamanız mevcut satın alma işlemlerini görüntülemek için bu yöntemi kullanıyorsa varsayılan olarak hesap bekletmeyi desteklemeniz gerekir.

Gerçek zamanlı geliştirici bildirimleri sayesinde, bir abonelik hesap askıya alma durumuna girdiğinde SUBSCRIPTION_ON_HOLD türüne sahip 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 askıya alınırken abonelik kaynağının expiryTime alanı geçmiş bir zaman damgasına, subscriptionState alanı ise SUBSCRIPTION_STATE_ON_HOLD değerine ayarlanır:

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

Erişimi geri yüklemek için kullanıcıların ödeme yöntemini düzeltmesi gerekir. Play, ödemenin reddedilmesiyle ilgili olarak beklemede olan kullanıcıları bilgilendirir. Ayrıca, ödeme yöntemini düzeltmeye teşvik etmeniz de gerekir.

Kullanıcı ödeme yöntemini düzelttikten sonra abonelik etkin duruma döner ve abone olunan içeriğe erişimi geri yüklemeniz gerekir. Bu durumda, aynı satın alma işleminin kurtarılması nedeniyle satın alma jetonu, hesap bekletme işlemi başlamadan öncekiyle aynıdır ve SUBSCRIPTION_RECOVERED türüne sahip bir RTDN alırsınız.

Taksitli aboneliklerde, her bir ödeme denemesi için ödeme reddedilebilir ve geri alınabilir.

Kurtarma işleminden sonra Play Faturalandırma Kitaplığı, queryPurchasesAsync() yöntemi aracılığıyla aboneliği tekrar döndürür. Bir kullanıcının abonelik almaya uygun olup olmadığını belirlemek için bu yöntemi kullanırsanız uygulamanız, aboneliğin hesap bekletme durumundan kurtarılmasını otomatik olarak yönetir.

Bir abonelik kurtarıldığında ve kullanıcının yeniden erişim kazanması gerektiğinde bilgilendirilmek için SUBSCRIPTION_RECOVERED türüne sahip bir SubscriptionNotification mesajı dinleyin. Bu bildirimi aldıktan sonra bir abonelik için sorgu yaparsanız expiryTime alanı gelecekteki bir zaman damgasına, subscriptionState alanı ise 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ı, hesap bekleme süresi sona ermeden önce ödeme yöntemini düzeltmezse bunun yerine SUBSCRIPTION_CANCELED türüne sahip bir RTDN alırsınız. İptal işlemlerini yönetmeyle ilgili talimatlar için İptaller bölümüne bakın. Bu şekilde iptal edilen bir aboneliği sorgularken 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,
      ...
    }
  ],
}

Hesap bekletme sırasında iptal bildirimi aldıktan hemen sonra, kullanıcının ücretli haklarından yararlanma süresi dolduğu ve abonelik iptal edildiği için SUBSCRIPTION_EXPIRED türüne sahip bir RTDN de alırsınız. Bu süre sonunu normalde yaptığınız gibi yönetebilirsiniz.

Kullanıcı, orijinal satın alma işleminden itibaren hesabının bekletildiği süre boyunca aynı abonelik planını veya uygulama üzerinden sunduğunuz başka bir planı yeniden satın alarak erişimi yeniden 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 alınmış durumda olan ve kullanıcı ödeme yöntemini düzelttiğinde tekrar etkinleşen bir aboneliğin zaman çizelgesi gösterilmektedir.

Şekil 3. Hesabı askıya alma durumuna giren ve bu durum sona ermeden önce kurtarılan bir aboneliğin zaman çizelgesi.

Önceki örneğe benzer şekilde Şekil 4'te, önce hesap askıya alma durumuna girmeden önce ek kullanım süresine giren ve ardından askıya alınmış durumdayken iyileşen bir aboneliğin zaman çizelgesi gösterilmektedir.

Şekil 4. Ek süreye giren, ardından hesabı askıya alma durumuna geçen ve hesabı askıya alma durumu sona ermeden önce kurtarılan bir aboneliğin zaman çizelgesi.

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

  • Abonelik hesap beklemeye alınmadan önce Google Play, ödeme yönteminden ödeme almak için 48 saate kadar ek girişimde bulunur. Kullanıcı, bu süre boyunca abonelik avantajlarından yararlanmaya devam eder. Bu yeniden deneme süresi dolduktan sonra abonelik hesabın askıya alınması durumuna girer ve kullanıcı abonelik avantajlarına erişimi kaybeder.
  • Abonelik, ödeme şekli başarısız olduğunda duraklatılmış durumdan devam ettirildiğinde doğrudan hesabı askıya alınmış durumuna girer.
  • Abonelik, hesap askıya alma durumundan kurtarıldığında yenileme tarihi sıfırlanır.

Süre sonları

Abonelik süresi sona erdiğinde kullanıcının aboneliğe erişimi kaldırılır. Bu durumda SUBSCRIPTION_EXPIRED türüne sahip bir SubscriptionNotification mesajı gönderilir. Bu bildirimi aldığınızda en son abonelik kaynağını almak için Google Play Developer API'yi sorgulayın. subscriptionState değerinin SUBSCRIPTION_STATE_EXPIRED olduğunu onayladıktan sonra, hakkı kaldırın ve satın alma durumunu arka uçta 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ı

Kullanıcılar, Play abonelik merkezinden abonelikleri gönüllü olarak iptal edebilir veya hesap beklemede durumundan sonra hesaplarını kurtarmazlarsa abonelikleri otomatik olarak iptal edilebilir. Geliştiriciler, purchases.subscriptions.cancel ile de iptal işlemini 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 edilir.

Taksitli olmayan, otomatik olarak yenilenen bir aboneliği iptal ettiğinizde SUBSCRIPTION_CANCELED bildirimi alırsınız. Bu bildirimi aldığınızda Google Play Developer API'den döndürülen abonelik kaynağında subscriptionState alanı SUBSCRIPTION_STATE_CANCELED olarak ayarlanır ve expiryTime alanında kullanıcının aboneliğe erişimini kaybetmesi gereken tarih yer alır. Bu tarih geçmişteyse kullanıcının hak talebi hemen iptal edilir. Örneğin, bir kullanıcı ödeme reddi nedeniyle hesap askıya alınmış durumdayken aboneliği iptal ederse bu durumla karşılaşılabilir.

İ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, taahhüt dönemi için ödemeler yapılmadığında kullanıcı tarafından iptal edildiğinde SUBSCRIPTION_CANCELLATION_SCHEDULED bildirimi gönderilir. İptal işlemi beklemededir ve mevcut taahhüt döneminin sonunda geçerli olur. Bu bildirimi aldığınızda, taksit aboneliği taahhüt döneminin sonuna kadar hâlâ etkin olduğu için Google Play Developer API'den döndürülen abonelik kaynağında subscriptionState alanı SUBSCRIPTION_STATE_ACTIVE olarak ayarlanır. Ancak, pendingCancellation nesnesi boş. Taahhüt döneminin sonunda SUBSCRIPTION_CANCELED bildirimi gönderilir ve ardından SUBSCRIPTION_EXPIRED bildirimi gönderilir.

İptali bekleyen bir taksitli abonelik satın alma işleminin 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ı, sistem veya sizin tarafınızdan iptal edilip edilmediğ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 stratejilerine yön verebilirsiniz.

İptal edilen ancak henüz süresi dolmamış abonelikler de queryPurchasesAsync() üzerinden iade edilir. Uygulamanızda, kullanıcıyı aboneliğinin iptal edildiği konusunda bilgilendiren ve geçerlilik bitiş tarihini veren bir mesaj görüntüleyebilirsiniz.

İptaller

Abonelikler, arka uç sunucunuzun purchases.subscriptionsv2.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 hakkını hemen iptal edin. Bu durumda, SUBSCRIPTION_REVOKED türüne sahip 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 ayarlanır.

İptal edilen bir satın alma işleminin 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

Kullanıcıların yararlanma hakkını uzatmak istemenizin çeşitli nedenleri olabilir. Örneğin, özel bir promosyon olarak kullanıcılara ücretsiz erişim sunabilirsiniz (ör. bir film satın alan kullanıcılara bir haftalık ücretsiz erişim sunma veya iyi niyet göstergesi olarak müşterilere ücretsiz erişim sağlama). Otomatik olarak yenilenen bir aboneliğin sonraki fatura tarihini öne almak için Play Developer API'deki purchases.subscriptions.defer yöntemini kullanabilirsiniz. Bunu yaptığınızda SUBSCRIPTION_DEFERRED türüne sahip bir SubscriptionNotification iletisi gönderilir. Kullanıcı, erteleme süresince içeriğinize tam erişim hakkına sahip olur ancak kendisinden ödeme alınmaz. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.

Ön ödemeli planlarda, geçerlilik bitiş süresini ertelemek için ertelenmiş faturalandırma API'sini kullanabilirsiniz.

Ertelenen 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, uygulama kullanımını gönüllü bir şekilde bırakma oranını düşürebilirsiniz. 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ı tercih edebilirler.

Abonelik tekrarı Haftalık Aylık Üç ay Altı Ay Yıllık
Kullanılabilen duraklatma süreleri* 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
*Herhangi bir zamanda değiştirilebilir.

Abonelik duraklatma işleminin geçerli olması için mevcut fatura döneminin bitmesi gerekir. Kullanıcılar, duraklatılmış olan aboneliklere erişemezler ve yenileme fiyatını ödemezler. Duraklatma döneminin sonunda abonelik devam eder ve Google aboneliği yenilemeyi dener. Devam ettirme işlemi başarılı olursa abonelik yeniden etkinleşir. Devam etme işlemi, ödeme sorunu nedeniyle başarısız olursa kullanıcı, şekil 5 ve 6'da gösterildiği gibi hesap askıya alınmış durumuna girer:

Şekil 5. Kullanıcı, aboneliğini duraklatır ve daha sonra devam ettirir.
Şekil 6. Kullanıcı aboneliğine ara verdikten sonra hesabını askıya alır.

Kullanıcılar, 6. resimde gösterildiği gibi duraklatma süresi boyunca istedikleri zaman aboneliği manuel olarak devam ettirmeyi de seçebilir. Kullanıcı manuel olarak devam ettiğinde fatura tarihi, manuel devam tarihi olarak değişir.

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ın aboneliklerine ara verdiğini öğrenmek için RTDN'leri dinleyin. Bu bildirimler, uygulamanızdaki kullanıcılara aboneliklerini duraklattıklarını ve aboneliklerine erişemediklerini bildirmenize de olanak tanır. Ayrıca, kullanıcının Google Play'e giden derin bir bağlantı kullanarak aboneliğini dilediğinde manuel olarak devam ettirebileceği bir yöntem de sunmanız gerekir.

Kullanıcınız aboneliğine ara verdiğinde SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED türüne sahip bir SubscriptionNotification mesajı gönderilir. Bu durumda kullanıcı, bir sonraki yenileme tarihine kadar aboneliğine erişmeye devam eder ve abonelik kaynağı autoRenewEnabled = true içerir. subscriptionState alanının değeri bu noktada SUBSCRIPTION_STATE_ACTIVE olur.

Duraklatma etkinleştirildiğinde SUBSCRIPTION_PAUSED türüne sahip bir SubscriptionNotification mesajı gönderilir. Bu durumda kullanıcı, aboneliğine erişimi kaybeder. Abonelik kaynağı autoRenewEnabled = true içerir ve subscriptionState alanı SUBSCRIPTION_STATE_PAUSED olarak ayarlanır. PausedStateContext nesnesini kontrol ederek aboneliğin ne zaman tekrar yenileneceğini görebilirsiniz.

Duraklatma süresinin sonunda abonelik otomatik olarak devam ederse veya kullanıcı aboneliği manuel olarak devam ettirmeyi seçerse SUBSCRIPTION_RENEWED türüne sahip bir SubscriptionNotification mesajı gönderilir. Bu işlem, Yenilemeler bölümünde açıklandığı şekilde yapılmalıdır.

Abonelik duraklatıldıktan sonra devam ettirilmeye çalışılırken ödeme hatası oluştuysa SUBSCRIPTION_ON_HOLD türüne sahip bir SubscriptionNotification mesajı gönderilir. Bu işlem, Hesap blokesi bölümünde açıklandığı şekilde yapılmalıdır.

Yeniden abone olun

Otomatik yenilenen abonelik temel planları için Google Play Store'da Yeniden abone ol düğmesi gösterilebilir. Bu düğme, kullanıcıların aboneliğe tekrar erişmesine olanak tanır. Bu durum, aboneliğin süresi çok uzun zaman önce dolduğunda gibi çeşitli nedenlerle yaşanabilir.

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

Düğme her zaman Yeniden abone ol olarak etiketlense de işlevi abonelik durumuna bağlıdır.

Abonelik iptal edilmiş olsa bile henüz süresi dolmamışsa kullanıcı abone olmaya devam eder ve abonelik avantajlarından yararlanmaya devam eder. Kullanıcı Yeniden abone ol'a dokunursa iptal işlemi 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 bir 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 dokümanlarındaki ve API'lerindeki yeniden abone olma olarak bilinir. Bu seçeneği Play Console'da veya API'yi kullanarak her temel plan için yapılandırabilirsiniz.

Süre dolmadan önce geri yükleme

Uygulamanız, kullanıcının abonelik almaya uygun olup olmadığını belirlemek için yalnızca queryPurchasesAsync() yöntemini kullanıyorsa queryPurchasesAsync() yöntemi, iptal edilen satın alma işlemlerini geçerlilik bitiş tarihlerinin öncesinde döndürmeye devam ettiğinden uygulamanız, geri yükleme işlemlerini otomatik olarak gerçekleştirmelidir. Geri yüklenen abonelikler, iptal edilmemiş gibi yenilenmeye devam eder.

Uygulamanız abonelik durumunu arka uçla senkronize ediyorsa SUBSCRIPTION_RESTARTED türüne sahip bir SubscriptionNotification mesajı dinlemeniz gerekir. Bu RTDN'yi aldıktan sonra uygulamanız bildirime yanıt verebilir, aboneliğin artık yenilenecek şekilde ayarlandığını kaydedebilir ve uygulamanızda yenileme mesajlarını 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 sona erdikten sonra yeniden abone olma

Otomatik yenilenen bir temel plan, Google Play Console veya API kullanılarak yeniden abone olmaya izin verecek şekilde yapılandırılmışsa kullanıcılar süresi dolmuş bir aboneliği Google Play Store'da yeniden satın alabilir.

Bunlar yeni satın alma işlemleridir. Google Play yeni bir satın alma jetonu yayınlar ve arka uç sunucunuz SUBSCRIPTION_PURCHASED türüne sahip bir RTDN alır. Bu tür uygulama dışı satın alma işlemlerinin satın alma durumu, orijinal aboneliğin süresi tamamen dolduğundan bu durumda orijinal satın alma işlemiyle ilişkili bir linkedPurchaseToken içermez. Bunlar, arka uç sisteminizin diğer satın alma işlemleri gibi işlemesi ve onaylaması gereken yeni satın alma işlemleridir.

Sürüm yükseltme, düşürme ve yeniden abone olma

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

Ayrıca, Google Play Developer API'sinden döndürülen abonelik kaynağı, kullanıcının yükseltme, düşürme veya yeniden abone olma işlemi gerçekleştirdiği eski satın alma işlemini belirten bir linkedPurchaseToken alanı içerir. Bu alandaki satın alma jetonunu kullanarak eski aboneliği arayabilir ve mevcut kullanıcı hesabını tanımlayabilirsiniz. Böylece yeni satın alma işlemini aynı hesapla ilişkilendirebilirsiniz.

Uygulamanızdaki bir kullanıcıya yükseltme, düşürme veya yeniden abone olma seçenekleri sunmadan önce mevcut aboneliği onaylamanız 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 abonelik satın alma işlemini başarıyla tamamlarsa bu yeni bir satın alma işlemidir ve 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 durumlarda kullanıcıları bilgilendirme hakkında bilgi edinmek için fiyat değişikliğiyle ilgili en iyi uygulamalar kılavuzuna göz atın.

Fiyat değişiklikleri mevcut abonelere etkinleştirme olarak uygulandığında, kullanıcı yeni fiyatı onaylamak veya reddetmek için işlem yaparsa bir RTDN alırsınız.

Kullanıcının etkinleştirme fiyat değişikliğini onaylamasını işleme

Bir kullanıcı abonelik fiyatınızın artışını kabul ettiğinde SUBSCRIPTION_PRICE_CHANGED_CONFIRMED türüne sahip bir SubscriptionNotification mesaj alırsınız. Kullanıcı onayı istenmeyen fiyat düşüşü olduğunda veya abonelik fiyatındaki artış yenilendiğinde SUBSCRIPTION_RENEWED türüne sahip bir SubscriptionNotification mesaj alırsınız. Bu bildirimi diğer yenileme işlemleri gibi ele alın.

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

Bir kullanıcı, daha yüksek fiyattan yenilemesi gerekmeden önce kullanıcı onayı istenen fiyat artışını kabul etmezse aboneliği otomatik olarak iptal edilir ve SUBSCRIPTION_CANCELED türüne sahip bir SubscriptionNotification mesaj alırsınız. Bu etkinliği İptaller bölümünde açıklandığı şekilde ele alın.

Kullanıcılar, kapsam dışında kalmayı seçerek fiyat artışından etkilenmemek için de aboneliklerini iptal edebilir.

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

Otomatik yenilenen aboneliklerde olduğu gibi, ön ödemeli planları her yeni satın alma işleminden sonra onaylamanız gerekir. Ön ödemeli planlarda, kullanıcının her seferinde satın alma akışında ilerlemesi gerektiğinden hem ilk satın alma işlemini hem de para ekleme işlemlerini eksiksiz şekilde işlemeniz gerekir.

Ön ödemeli plan sürelerinin kısa olması nedeniyle, satın alma işlemini en kısa sürede onaylamak önemlidir. Bir hafta veya daha uzun süreli ö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ı içinde kabul edilmelidir. Örneğin, geliştiricilerin üç günlük bir ön ödemeli planın satın alınmasını onaylamak için 1,5 günü vardır.

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

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

Ek satın alma işlemleri için yeni bir satın alma jetonu verilir ve yeni abonelik satın alma durumunun bir parçası olarak linkedPurchaseToken alanında önceki satın alma jetonunu alırsınız. Satın alma jetonu, abonelik kaydından geçerlilik süresinin sona ermesinden sonraki 60 gün sonrasına kadar geçerlidir. Bu tarihten sonra satın alma jetonu, Google Play Geliştirici 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
      }
    }
  ]
}

Hak talebinin ne zaman sona ereceğini expiryTime alanında görebilirsiniz. Ek satın alma işlemleri, hakkı biriktirerek uygunluk süresini artırır. Yani kullanıcı, orijinal hakkı sona ermeden önce para eklerse yeni süre önceki son kullanma tarihinin üzerine eklenir.

Uygulamanızda, kullanıcıyı ön ödemeli aboneliklerinin para eklemeyle uzatılabileceği konusunda bilgilendiren bir mesaj görüntüleyebilirsiniz. Bir kullanıcının ne zaman para ekleyebildiğini öğrenmek için abonelik kaynağındaki allowExtendAfterTime alanını kontrol edin.

Ön ödemeli planlar otomatik olarak yenilenmediği için iptal edilemez. Bir kullanıcı, ön ödemeli planı iptal etmek isterse planın son kullanma tarihine ulaşmasına izin verebilir.