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 yaşam döngüleri boyunca birkaç farklı durumdan geçebilir.

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

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 bildirime eklenen satın alma jetonuyla purchases.subscriptionsv2.get API'yi çağırın. Bu uç nokta, satın alma jetonu için en son abonelik durumunu sunar ve abonelik yönetimi için bilgi kaynağı olarak kabul edilir.

Satın alma jetonu, abonelik kaydından itibaren süresi dolduktan sonraki 60 gün boyunca geçerlidir. Bu tarihten sonra satın alma jetonu artık Google Play Developer API'yi çağırmak için kullanılamaz.

Otomatik yenilenen 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 uygulamanızın onResume() yönteminde PurchasesUpdatedListener aracılığıyla yeni bir uygulama içi satın alma işlemi kaydetmiş veya satın alma işlemlerini manuel olarak getirerek yeni satın alma işlemini güvenli arka uçta gerçekleştirmelisiniz. 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 ayarlanmışsa satın alma işlemiyle ilişkilendirilen kullanıcı hesabı, abonelik kaynağındaki ExternalAccountIdentifiers nesnesiyle tanımlanabilir.

Play Faturalandırma Kitaplığı'nda ayrıca abonelik onaylama yöntemi, acknowledgePurchase() ve onay durumunu kontrol etme yöntemi (isAcknowledged()) bulunur. Bununla birlikte, daha iyi bir güvenlik için satın alma işlemlerini 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

Otomatik yenilenen abonelik yenilendiğinde 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 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 yenileme işlemiyle ilgili ödeme sorunları varsa Google, kullanıcıyı bilgilendirir ve abonelik süresi dolmadan önce düzenli olarak bir süre daha aboneliği yenilemeyi dener. Bu kurtarma süresi, bir ek yayınlanma süresinden sonra hesabı askıya alma süresinden oluşabilir. Ek süre boyunca kullanıcı, abonelikten yararlanma hakkına hâlâ erişebilir.

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

Abonelik durumunu arka ucunuzla senkronize etmek, reddedilen ödemeler hakkında daha fazla bilgi edinmenize olanak tanır ve siz istemeden gerçekleşen kayıpları azaltmaya çalışırken size daha fazla bağlam sağlar. Kullanıcı ek süre girdiğinde bildirim almak için SUBSCRIPTION_IN_GRACE_PERIOD türündeki SubscriptionNotification mesajlarını dinleyin. Kullanıcı ek süre içindeyken abonelik kaynağı autoRenewEnabled = true değerini içerir. Google Play, expiryTime değerini ek süre sona erene kadar dinamik olarak uzatır. Bunun nedeni, yararlanma hakkının kullanıcı iptal edene veya ek süre maksimum süre bitene kadar sürmesi gerektiğidir. Bu dönemde subscriptionState alanının değeri SUBSCRIPTION_STATE_IN_GRACE_PERIOD. 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çindeki kullanıcıları ödemelerinin reddedildiğini bildirir ve Play Store'da ödeme yöntemi sorunlarını düzeltmelerini ister. Kullanıcıdan ek süre girdiğinde, kullanıcının istemeden hata yapması ihtimaline karşı ödeme yöntemini düzeltmesini de isteyebilirsiniz. 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 kullanıcıya geçici bir atıştırmalık çubuğunda, ödemesinin reddedildiğini bildiren bir Play mesajı gösterilir. Bu mesajda ayrıca kullanıcının Google Play'deki ödeme yöntemini düzeltmesi için bir derin bağlantı da yer alır.

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

Kullanıcı, ek süre boyunca ödeme yöntemini düzeltmezsa abonelik hesabı askıya alınır ve yararlanma hakkını kaybeder.

Ek süre erişimi ve kurtarma

Şekil 2'de ek süre dönemine giren ve kullanıcı, ödeme yöntemini düzelttiğinde eski haline dönen bir abonelik için zaman çizelgesi gösterilmektedir. Ek süre sona erdiğinde kullanıcı, abonelik avantajlarını kaybetmeli ve askıya alınmış hesap moduna geçmelidir.

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

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

  • Ek süre boyunca kullanıcı, abonelik avantajlarına erişmeye devam edebilir.
  • Ek süre içinde bir abonelik kurtarılırsa yenileme tarihi sıfırlanmaz.
  • Ek süreyi uzatırsanız (örneğin, 7 günden 14 güne) ek süre içindeki kullanıcılar abonelik avantajlarına daha uzun sürede erişebilir.
  • Ek süreyi kısaltırsanız eski ek süreyi aşacak kadar eski 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 bulunan 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 ek süre belirleyebilirsiniz ancak Play, ödeme denemeleri için yeterli sürenin geçmesi 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 durumundaki değişikliklerle senkronize olmanın en iyi yolu, gerçek zamanlı geliştirici bildirimlerini (RTDN) dinleyip bunlara tepki vermektir. Aboneliğin durumunu daha doğru şekilde almak için purchases.subscriptionsv2.get() yöntemini süre sonu zamanı yerine RTDN zamanında çağırın.

24 saatlik sessizde kalma süresinin ardından abonelik durumuna göre 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 yenilenirse)

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

Hesabı askıya alma

Abonelik yenileme işlemlerinde ödeme sorunları varsa ek süre sona erdikten sonra hesabı askıya alma süresi başlar. Bir abonelik askıya alınmış hesap durumuna geçtiğinde, abonelikten yararlanma hakkına erişimi engellemeniz gerekir.

Kullanıcı, abonelik beklemedeyken de bu değişiklikleri yapabileceği için, askıya alınmış hesap sırasında abonelik, iptal veya aboneliklerinizin yeniden satın alınması işlemlerini gerçekleştirmeye devam etmeniz gerekir.

RTDN'ler, kullanıcı hesabı askıya alma dönemine girdiğinde sizi bilgilendirir. Bu sayede, aboneliğe erişiminin neden askıya alındığı konusunda kullanıcıyı en kısa sürede bilgilendirebilirsiniz. Bunu yapmanın doğrudan yolu In-App Messaging API'yi kullanmaktır. Kullanıcınız uygulamayı açtığında bu API'yi çağırdığınızda geçici bir atıştırmalık çubuğunda kullanıcıya ödemesinin reddedildiğini bildiren bir mesaj gösterilir. Bu mesajda, kullanıcının Google Play'deki ö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ışında erişebiliyorsa farklı yüzeylerde erişimlerini kaybettiklerini fark edebilirler. Kullanıcıya, ödemenin reddedilmesi nedeniyle aboneliğinin artık etkin olmadığını bildirmek için bir push bildirimi veya e-posta gönderebilirsiniz.

Abonelik, hesap askıya alındığı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 hesap askıya alma özelliğini varsayılan olarak desteklemeniz gerekir.

Gerçek zamanlı geliştirici bildirimleri sayesinde, bir aboneliğin 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 bekletme sırasında abonelik kaynağının expiryTime alanı geçmiş bir zaman damgasına, subscriptionState alanı ise SUBSCRIPTION_STATE_ON_HOLD olarak ayarlandı:

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

Kullanıcıların tekrar erişebilmek için ödeme yöntemlerini düzeltmesi gerekir. Play, hesaplarını askıya alan kullanıcıları ödemelerinin reddedildiğini bildirir. Sizin de ödeme yöntemlerini düzeltmelerini istemeniz gerekir.

Kullanıcı, ödeme yöntemini düzelttikten sonra abonelik etkin duruma döner ve abone olduğunuz içeriğe tekrar erişim sağlamanız gerekir. Bu durumda, aynı satın alma işlemi tekrar etkin hale geldiği ve SUBSCRIPTION_RECOVERED türünde bir RTDN aldığınız için satın alma jetonu, askıya alınmış hesap başlatılmadan öncekiyle aynıdır.

Kurtarma işleminden sonra Play Faturalandırma Kitaplığı, aboneliği queryPurchasesAsync() yöntemiyle tekrar geri verir. Bir kullanıcının abonelik almaya hakkı olup olmadığını belirlemek için bu yöntemi kullanırsanız askıya alınmış hesap durumundan kurtarılan aboneliğin kurtarılması işlemini otomatik olarak uygulamanız 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ı dinleyin. Bu bildirimi aldıktan sonra abonelik için sorgulama yaparsanız expiryTime alanı gelecekteki bir zaman damgasına 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ı, hesabı askıya alma süresi sona ermeden ödeme yöntemini düzeltmezse bunun yerine SUBSCRIPTION_CANCELED türünde bir RTDN alırsınız. İptal işlemiyle ilgili talimatlar için İptaller sayfasına göz atın. Bu şekilde iptal edilen bir aboneliği sorguladığı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 sırasında iptal işlemiyle ilgili olarak bilgilendirildikten hemen sonra, SUBSCRIPTION_EXPIRED türünde bir RTDN alırsınız. Bunun nedeni, kullanıcının ücretli yararlanma hakkı olmaması ve aboneliğin iptal işlemiyle birlikte kaybedilmesidir. Bu süre sonunu her zamanki gibi kaldırabilirsiniz.

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

Askıya alınmış hesap erişimi ve kurtarma

Şekil 3'te, askıya alınmış hesap durumuna alınan ve kullanıcı ödeme yöntemini düzelttikten sonra iyileşen bir abonelik için bir zaman çizelgesi gösterilmektedir.

Şekil 3. Hesabı askıya alınan ve sona ermeden kurtarılan bir aboneliğin zaman çizelgesi.

Önceki örneğe benzer şekilde, Şekil 4'te hesap askıya alınmadan önce ek süre girilen ve beklemedeyken kurtarılan bir aboneliğin zaman çizelgesi gösterilmektedir.

Şekil 4. Ek süre girip ardından askıya alınmış hesap durumuna giren ve son olarak askıya alınmış hesap sona ermeden önce iyileşen bir aboneliğin zaman çizelgesi.

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

  • Bir abonelik askıya alınma durumuna girmeden önce, Google Play 48 saate kadar ödeme yönteminden ödeme almak için ek denemeler yapar. Bu süre boyunca kullanıcı abonelik avantajlarından yararlanmaya devam eder. Bu yeniden deneme süresi geçtikten sonra abonelik askıya alınır ve kullanıcı abonelik avantajlarına erişimi kaybeder.
  • Aboneliğin, başarısız bir ödeme şekline sahip duraklatılmış bir durumdan devam etmesi halinde abonelik doğrudan "hesap askıya alma" durumuna girer.
  • Hesabı askıya alınan bir abonelik kurtarıldığında yenileme tarihi sıfırlanır.

Süre sonları

Abonelik süresi dolduğunda kullanıcı aboneliğe erişimini kaybeder. Bu durumda SUBSCRIPTION_EXPIRED türünde 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 öğesinin SUBSCRIPTION_STATE_EXPIRED olduğunu onayladıktan sonra yararlanma hakkını kaldırın ve satın alma durumunu arka uçunuzda 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ı, aboneliğini gönüllü olarak Play abonelik merkezinden iptal edebilir veya hesabı askıya alındıktan sonra iyileşmediyse aboneliğinin otomatik olarak iptal edilmesini sağlayabilir. Geliştiriciler purchases.subscriptions.cancel aracılığıyla 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öngüsü sona erdiğinde erişim iptal edilmelidir.

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 ayarlanır. expiryTime alanında ise kullanıcının aboneliğe erişimini kaybetmesi gereken tarih bulunur. Bu tarih geçmişteyse kullanıcı yararlanma hakkını hemen kaybeder. Örneğin, bir kullanıcı ödemenin reddedilmesi nedeniyle hesabı askıya alınmış bir 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,
      ...
    }
  ],
}

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 da iletişim stratejilerinin bilinmesine yardımcı olabilir.

Bir abonelik iptal edilmiş ancak henüz süresi sona ermemişse queryPurchasesAsync() üzerinden iade edilir. Uygulamanızda kullanıcıya aboneliğinin iptal edildiğini bildiren ve abonelik süresinin sona erme tarihini belirten bir mesaj görüntüleyebilirsiniz.

İptal sayısı

Bir abonelik, arka ucunuzun purchases.subscriptions.revoke ile aboneliği iptal etmesi veya satın alma işleminin geri alınması 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ş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

Bir kullanıcının yararlanma hakkını uzatmak istemenizin çeşitli nedenleri olabilir. Örneğin, kullanıcılara özel bir promosyon kapsamında ücretsiz erişim sunmak isteyebilirsiniz. Örneğin, bir film satın almaları için bir hafta ücretsiz kullanım hakkı tanıyabilir veya bir iyi niyet jesti olarak müşterilere ücretsiz erişim sunabilirsiniz. Otomatik yenilenen aboneliğin bir sonraki faturalandırma tarihine geçmek için Play Developer API'sindeki purchases.subscriptions.defer yöntemini kullanabilirsiniz. Bu işlemi gerçekleştirdiğinizde 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 ücretlendirilmez. Abonelik yenileme tarihi, yeni tarihi yansıtacak şekilde güncellenir.

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

Ertelenen abonelik iç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 yinelenen döneme bağlı olarak bir hafta ila üç ay süreyle duraklatmayı seçebilirler.

Abonelik duraklatma işleminin geçerli olması için mevcut fatura döneminin bitmesi gerekir. Abonelik duraklatılmış haldeyken kullanıcı aboneliğe erişemez ve yenileme ücretini ödemez. Duraklatma süresinin sonunda abonelik devam eder ve Google, aboneliği yenilemeyi dener. Yeniden başlatma başarılı olursa abonelik yeniden etkin hale gelir. Ödeme sorunu nedeniyle devam ettirilemezse kullanıcı şekil 5 ve 6'da gösterildiği gibi hesabı askıya alma durumunu girer:

Şekil 5. Kullanıcı aboneliğini duraklatır ve daha sonra devam ettirir.
Şekil 6. Kullanıcı aboneliğini duraklatır ve ardından hesabı askıya alma moduna girer.

Kullanıcılar Şekil 6'da gösterildiği gibi duraklatma süresi boyunca istedikleri zaman abonelikleri manuel olarak devam ettirebilirler. Kullanıcı, hizmeti manuel olarak devam ettirdiğinde fatura tarihi, manuel devam ettirme tarihine dönüşür.

Kullanıcının aboneliği duraklatıldığında Play Faturalandırma Kitaplığı, aboneliği queryPurchasesAsync() yöntemi üzerinden geri göndermez. Abonelik devam ettirilirse queryPurchasesAsync() yöntemi aboneliği tekrar döndürür.

Kullanıcının aboneliğini duraklattığında haberdar olmak için RTDN'leri dinleyin. Bu bildirimlerle, uygulamanızdaki kullanıcılarınıza aboneliklerini duraklattıklarını ve bunlara erişim sahibi olmadıklarını bildirebilirsiniz. Ayrıca Google Play'e derin bir bağlantı kullanarak kullanıcının dilediği zaman aboneliğini manuel olarak devam ettirebilmesi için bir yöntem sağlamalıdır.

Kullanıcınız aboneliğini duraklatma işlemi başlattığında SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED türünde bir SubscriptionNotification mesajı gönderilir. Şu anda kullanıcının bir sonraki yenileme tarihine kadar aboneliklerine erişmeye devam etmesi gerekir ve abonelik kaynağı autoRenewEnabled = true değerini içerir. 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ı, aboneliğine erişimi kaybeder ve abonelik kaynağı autoRenewEnabled = true değerini içerir, subscriptionState alanı da 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 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 işlem, Hesabı askıya alma bölümünde anlatıldığı ş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örüntülenebilir. Bu düğme, kullanıcıların bir aboneliğe tekrar erişmelerine olanak sağlar. Bu bilgiler çeşitli nedenlerle görünmeyebilir (örneğin, bir aboneliğin uzun süre önce sona ermesi).

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

Düğme her zaman Yeniden abone ol olarak etiketlenmiş olsa da işlevi abonelik durumuna göre değişir.

Bir abonelik iptal edilmiş ancak henüz süresi dolmamış olsa da kullanıcının aboneliği devam eder ve abonelik avantajlarından faydalanır. Kullanıcı "Yeniden Abone Ol"a dokunursa iptal işlemi etkili bir ş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 abonelik süresi dolduktan sonra, kullanıcıların aynı abonelik temel planını satın almalarına izin verebilirsiniz. Bu işlem, Play geliştirici belgelerinde ve API'lerde yeniden abone ol olarak bilinmektedir. Bu seçeneği her temel plan için Play Console'da veya API'yi kullanarak yapılandırabilirsiniz.

Süresi bitmeden geri yükle

Uygulamanız, bir kullanıcının abonelik hakkına sahip 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ş tarihlerinden önce iade etmeye devam ettiğinden geri yükleme işlemlerini otomatik olarak gerçekleştirmelidir. 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 aldıktan sonra uygulamanız bildirime yanıt verebilir, aboneliğin yenilenecek şekilde ayarlandığını kaydedebilir ve uygulamanızda geri yükleme 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 ol

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

Bunlar yeni satın alınanlardır. Google Play yepyeni bir satın alma jetonu yayınlar ve arka uç noktanız SUBSCRIPTION_PURCHASED türünde bir RTDN alır. Bu uygulama dışı satın alma türü için satın alma durumu, orijinal satın alma işleminin süresi dolduğu için orijinal satın alma işlemiyle ilişkili bir linkedPurchaseToken içermez. Bunlar, arka ucunuzun diğer tüm satın alma işlemleri gibi işlemesi ve onaylaması gereken yeni satın almalardır.

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

Bir kullanıcı, abonelik süresi sona ermeden önce uygulamanızın sürümünü yükselttiğinde, düşürdüğünde veya uygulamanızı iptal ettikten sonra 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 Geliştirici API'sinden 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 onaylamanız gerekir. Mevcut abonelik hâlâ onay bekliyorsa plan değişikliği veya yeniden abone olma engellenir.

Kullanıcı yükseltme, düşürme veya yeniden abone olma işlemlerini başarıyla yaparsa bu yeni satın alma işlemini onaylamanız gerekir. Bunu yapmanın önerilen yolu Google Play Geliştirici API'sini 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.

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

Kaydolan fiyat değişikliğinin kullanıcı onayını işleme

Bir kullanıcı abonelik fiyat artışınızı 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ındaki artış yenilendiğinde SUBSCRIPTION_RENEWED türünde bir SubscriptionNotification mesajı alırsınız. Bu bildirimi diğer herhangi bir yenileme gibi değerlendirin.

Fiyat artışının kabul edilmediği durumları ele alma

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

Kullanıcılar, fiyat artışının kapsamı dışında kalmayı seçmek için aynı yöntemi izleyerek aboneliklerini de iptal edebilirler.

Ö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 seferinde satın alma sürecinden geçmesi gerektiğinden hem ilk satın alma işlemini hem de para ekleme işlemini eksiksiz bir şekilde gerçekleştirmeniz gerekir.

Ö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 3 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 bir planı satın aldıklarını onaylamak için 1,5 gün süreleri vardır.

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

Her ön ödemeli plan aboneliği satın alındığında (her para ekleme dahil) RTDN istemcinize SUBSCRIPTION_PURCHASED türünde bir SubscriptionNotification mesajı gönderilir. En son ön ödemeli plan abonelik durumunu kontrol etmek için purchases.subscriptionsv2.get yöntemini çağırın.

Para ekleme 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ındaki önceki satın alma jetonunu alırsınız. Satın alma jetonu, abonelik kaydından itibaren süresi dolduktan 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 sona erdiği zamanı expiryTime alanında görebilirsiniz. Para ekleme satın alma işlemleri, biriktirerek yararlanma süresini artırır. Diğer bir deyişle, kullanıcı asıl yararlanma hakkı sona ermeden önce parayı doldurursa yeni süre önceki son kullanma tarihinin üzerine eklenir.

Uygulamanızda ön ödemeli aboneliklerinin para eklenerek uzatılabileceğini bildiren bir mesaj görüntüleyebilirsiniz. Bir 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 yenilenmez ve bu nedenle iptal edilemez. Kullanıcı ön ödemeli planı iptal etmek istiyorsa planın geçerlilik bitiş tarihine ulaşmasına izin verebilir.