Abonelik iptal nedenleri genellikle iade talebinden önce size ulaşır ve Google Play bu konuda Apple'dan çok daha fazlasını paylaşır
Google Play abonelik iptal nedenlerini iptal anketinden kaydeder, Apple ise yalnızca bir sona erme kodu gönderir. Her mağazanın size ne söylediğini, hangi sinyallerin yaklaşan bir iade veya ters ibrazı (chargeback) haber verdiğini ve her birinin size maliyetini burada bulabilirsiniz.

Önemli noktalar
- Google Play, aboneler iptal ederken neden ayrıldıklarını sorar ve yanıt geliştiriciye purchases.subscriptionsv2 içindeki canceledStateContext.userInitiatedCancellation.cancelSurveyResult üzerinden ulaşır.
- Google Play'in iptal anketinde geliştiricinin okuyabileceği beş yanıt vardır: yeterince kullanmama, teknik sorunlar, maliyetle ilgili nedenler, daha iyi bir uygulama bulma ve diğer. reasonUserInput içindeki serbest metin yalnızca kullanıcı diğer seçeneğini işaretlediğinde doldurulur.
- Google Play'den gelen SUBSCRIPTION_CANCELED bildirimi yalnızca satın alma jetonunu (purchase token) taşır. İptal nedeni purchases.subscriptionsv2.get ile çekilmelidir ve kullanıcı aboneliği geri yüklerse Google tüm iptal alanlarını temizler.
- Apple'ın App Store Server API'sinde iptal anketi yoktur. expirationIntent alanı beş koddan birini verir: müşteri iptal etti, faturalama hatası, fiyat artışına veya teklif dönüşümüne onay verilmedi, ürün mevcut değil ya da diğer.
- Apple'ın AUTO_RENEW_DISABLED alt türlü DID_CHANGE_RENEWAL_STATUS bildirimi, yalnızca müşterinin otomatik yenilemeyi kapattığını değil, müşteri iade talep ettikten sonra App Store'un otomatik yenilemeyi kapattığını da gösterebilir.
- İptal nedeni geliştiriciye iade kararında hiçbir söz hakkı vermez. Kanıt isteyen yalnızca iki akış vardır: 12 saat içinde yanıtlanan Apple'ın CONSUMPTION_REQUEST'i ve orders.reviewrefund üzerinden 24 saat içinde yanıtlanan Google Play'in ters ibraz incelemesi.
- Teknik sorunları gerekçe göstererek iptal eden Google Play abonesi parasını geri isteme olasılığı en yüksek kişidir. August 3, 2026 sonrasında verilen siparişlerde kazandığı bir ters ibraz, geliştiriciye satın alma fiyatından Play hizmet ücretinin düşülmüş hâline ek olarak bankanın ücretlerine mal olur.
Sonunda iade alan abonelerin çoğu önce aboneliğini iptal eder. Bu iptal bir neden taşır ve iki mağaza size bu konuda çok farklı miktarda bilgi verir. Google Play kısa bir anket yapar ve yanıtı serbest metin dahil sunucunuza iletir. Apple ise aboneliğin nasıl sona erdiğini söyleyen sayısal bir kod gönderir, müşterinin neden ayrılmak istediğini değil. İkisini de doğru okursanız, iade taleplerini hâlâ bir şey yapabilecekken gelirken görürsünüz.
Google Play abonelik iptal nedenleri hakkında size neler söyler
Bir kullanıcı Play abonelik merkezinde iptal ettiğinde Google ona nedenini sorar. Yanıt, purchases.subscriptionsv2.get ile aldığınız abonelik kaynağında, canceledStateContext altında yer alır. Bu nesne yalnızca abonelik iptal edilmiş veya süresi dolmuş durumdayken vardır ve aboneliği kimin sonlandırdığını söyler: kullanıcı, Google'ın sistemi, siz ya da plan değişikliği gibi bir değiştirme işlemi.
İptali kullanıcı yaptıysa userInitiatedCancellation nesnesi iki alan içerir. cancelTime ne zaman iptal ettiklerini söyler. cancelSurveyResult anket yanıtını tutar.
| Anket nedeni | Google'ın açıklaması | Genellikle neye işaret eder |
|---|---|---|
| CANCEL_SURVEY_REASON_NOT_ENOUGH_USAGE | Aboneliğin yeterince kullanılmaması | Düşük kullanım, yani hesaba harcanan maliyet az |
| CANCEL_SURVEY_REASON_TECHNICAL_ISSUES | Uygulamayı kullanırken teknik sorunlar | En güçlü iade ve ters ibraz sinyali |
| CANCEL_SURVEY_REASON_COST_RELATED | Maliyetle ilgili sorunlar | Fiyat hassasiyeti, bazen beklenmedik bir yenileme |
| CANCEL_SURVEY_REASON_FOUND_BETTER_APP | Kullanıcı daha iyi bir uygulama buldu | Bir rakip kazandı, nadiren anlaşmazlık çıkar |
| CANCEL_SURVEY_REASON_OTHERS | Diğer nedenler | reasonUserInput'u okuyun, kullanıcının kendi sözleri |
| CANCEL_SURVEY_REASON_UNSPECIFIED | Belirtilmemiş iptal anketi nedeni | Üzerinde çalışılacak bir yanıt yok |
Sağdaki sütun Google'ın değil, bizim yorumumuz. İlk iki sütun doğrudan API referansından alınmıştır.
Bildirim nedeni taşımaz
İptal edilen bir abonelik, type 3 olan SUBSCRIPTION_CANCELED gerçek zamanlı geliştirici bildirimini tetikler. Google, bu bildirimlerin yalnızca satın alma durumunun değiştiğini söylediğini açıkça belirtir. Yük size bir satın alma jetonu dışında işe yarar bir şey vermez, bu yüzden işleyicinizin anket yanıtını okumak için purchases.subscriptionsv2.get çağırması gerekir.
Play Console görünümü
Toplamları görmek için koda ihtiyacınız yok. Play Console'un abonelik raporlarında kaybı gönüllü, gönülsüz ve diğer olarak ayıran bir Cancellations kartı ve yanıt vermeyi seçen kullanıcılar için bir Cancellation survey responses kartı bulunur. Diğer seçeneğini işaretleyen kullanıcıların serbest metin yanıtları, Other responses kartından CSV olarak indirilebilir. Bu indirme, View financial data iznini gerektirir. Bu, siparişlerinizi okuyan bir araca vereceğiniz izinle aynıdır.
Apple size neler söyler ve neleri dışarıda bırakır
Apple, geliştiricilere geri bildirim veren bir iptal anketi yürütmez. En yakın alan, imzalı yenileme bilgisindeki expirationIntent'tir ve müşterinin ne düşündüğünü değil, aboneliğin nasıl sona erdiğini anlatır.
| expirationIntent | Apple'a göre anlamı | Karşılık gelen EXPIRED alt türü |
|---|---|---|
| 1 | Müşteri aboneliğini iptal etti | VOLUNTARY |
| 2 | Geçersiz ödeme bilgisi gibi bir faturalama hatası | BILLING_RETRY |
| 3 | Onay gerektiren bir fiyat artışına veya teklif dönüşümüne onay verilmedi | PRICE_INCREASE |
| 4 | Ürün yenileme sırasında satın alınabilir değildi | PRODUCT_NOT_FOR_SALE |
| 5 | Başka bir neden | Alt tür yok |
Müşterinin verdiği bir kararı anlatan tek kod 1'dir ve bu kod da motivasyon hakkında hiçbir şey söylemez. Uygulama sürekli çöktüğü için ayrılan bir müşteriyle projesini bitirdiği için ayrılan bir müşteri birebir aynı görünür.
AUTO_RENEW_DISABLED içinde saklı sinyal
Apple'ın daha yakından bakmaya değer bir bildirimi var. AUTO_RENEW_DISABLED alt türlü DID_CHANGE_RENEWAL_STATUS genellikle müşterinin otomatik yenilemeyi kapattığı anlamına gelir. Apple'ın belgeleri ikinci bir durum ekler: App Store da müşteri iade talep ettikten sonra otomatik yenilemeyi kapatır.
Yani iOS'ta yenilemenin kapanması, bir iade talebinin ilk izi olabilir. Satın alma bir tüketilebilir ürün veya otomatik yenilenen bir abonelikse ardından bir CONSUMPTION_REQUEST gelebilir ve o andan itibaren tüketim verilerini göndermek için 12 saatiniz olur. Uygulamanızda görünür bir işlem olmadan gelen bir yenileme kapatma olayını, o hesabın kullanım verilerini hazırlamak için bir ön uyarı olarak değerlendirmekte fayda var.
Apple ve Google yan yana
| Google Play | Apple App Store | |
|---|---|---|
| Kullanıcıya nedenini sorar | Evet, bir iptal anketi | Geliştiricinin görebildiği anket yok |
| Nedenin bulunduğu yer | purchases.subscriptionsv2 içinde canceledStateContext | Yenileme bilgisinde expirationIntent |
| Serbest metin | reasonUserInput, yalnızca diğer için | Yok |
| İptal eden | Kullanıcı, sistem, geliştirici veya değiştirme | Koddan ve alt türden çıkarılır |
| Bildirim | SUBSCRIPTION_CANCELED, ardından get çağrısı | DID_CHANGE_RENEWAL_STATUS, EXPIRED |
| Kullanıcı yeniden abone olursa kaybolur | Evet, geri yüklemede temizlenir | Yenileme bilgisi güncel durumu yansıtır |
| Panel | Cancellation survey responses kartı | Nedenler için yok |

İptalin iadeye dönüştüğü yer
İptal bir sonraki ödemeyi durdurur. Sonuncusunu geri vermez. Paranın geri dönüp dönmeyeceği, müşterinin sonra hangi iade akışına ulaştığına bağlıdır ve bu akışların çoğu siz olmadan işler.
- Google Play'de alıcı, satın almadan sonraki 48 saat içinde kendi başına iade alabilir ve kararı Google verir.
- Google'ın veya Apple'ın destek ekibi üzerinden yapılan iadelere mağaza karar verir.
- Apple'ın CONSUMPTION_REQUEST'i 12 saatlik bir süreyle tüketim verilerinizi ister.
- Google Play'in ters ibraz incelemesi orders.reviewrefund üzerinden 24 saatlik bir süreyle kanıt ister. Bankanın ters ibraz kararı kesindir.
İptal nedeni bu kuralların hiçbirini değiştirmez. Değiştirdiği şey, hangi müşterinin mutsuz olduğunu ne kadar erken öğrendiğiniz ve kanıt isteyen iki akıştan biri geldiğinde kanıtınızın hazır olup olmadığıdır.
Her nedenin size maliyeti
Anket yanıtı, bir hesaba hizmet vermenin şimdiye kadar ne kadara mal olduğunu da kabaca gösterir. Bu, bir iadeden sonra elinizde kalan yüktür.
Teknik sorunlar
En pahalı neden budur. Müşteri ürünü sorunlarla karşılaşacak kadar kullanmıştır, yani oturumlarının arkasındaki işlem gücünü, isteklerinin yaptığı model API çağrılarını, oluşturdukları her şeyin depolamasını ve içeriğini kullandıkları içerik üreticisine borçlu olunan ödemeleri zaten ödemişsinizdir. Ardından iade alırlarsa fiyat geri gider, bu maliyetler sizde kalır. Google Play'de bankalarına giderlerse, August 3, 2026 sonrasında verilen bir sipariş size satın alma fiyatından Play hizmet ücretinin düşülmüş hâline ek olarak bankanın ücretlerine mal olur.
Maliyetle ilgili
Fiyat şikâyeti, arkasında beklenmedik bir yenileme saklamıyorsa göründüğünden daha az maliyetlidir. Bu klasik bir ters ibraz hikâyesidir, bu yüzden iptalin bir yenileme ödemesinin hemen ardından gelip gelmediğini ve yenileme hatırlatıcılarınızın gönderilip gönderilmediğini kontrol edin.
Yeterince kullanmama
Düşük kullanım, düşük hizmet maliyeti demektir. Bu yüzden buradaki bir iade çoğunlukla kazanmak için fazla harcamadığınız parayı geri verir. Ayrıca Apple isterse dürüst tüketim verilerinin müşterinin neyi kullanıp neyi kullanmadığını tam olarak gösterdiği neden de budur.
Daha iyi bir uygulama buldu
Bu müşteriler nadiren itiraz eder. Bir rakibe geçmişlerdir. Bu neden ürün kararları için faydalıdır, iade savunması için ise neredeyse hiç işe yaramaz.
İptal nedenlerini okumak için bir rutin
- Her Google Play SUBSCRIPTION_CANCELED bildiriminde purchases.subscriptionsv2.get çağırın ve canceledStateContext'i satın alma jetonu ve cancelTime ile birlikte kaydedin.
- Neden diğer olduğunda reasonUserInput'u olduğu gibi kaydedin. İki mağazanın size verdiği tek serbest metin budur.
- AUTO_RENEW_DISABLED içeren her Apple DID_CHANGE_RENEWAL_STATUS bildiriminde olayı kaydedin ve bir CONSUMPTION_REQUEST gelme ihtimaline karşı o hesabın kullanım verilerini çekin.
- Her Apple EXPIRED bildiriminde alt türü ve expirationIntent'i kaydedin, böylece gönüllü kayıp ile faturalama hataları birbirine karışmaz.
- Teknik sorunları gerekçe gösteren Google Play iptallerinde o hesabın hata kayıtlarını inceleyin ve müşteri bankasına gitmeden önce ona ulaşın.
- Hesap bazında kullanım kayıtları tutun, böylece bir CONSUMPTION_REQUEST 12 saat içinde, bir ters ibraz incelemesi de 24 saat içinde yanıt bulur.
Sık sorulan sorular
- Bir Google Play abonesinin neden iptal ettiğini nasıl görebilirim?
- purchases.subscriptionsv2.get çağırın ve canceledStateContext.userInitiatedCancellation.cancelSurveyResult'u okuyun. reason alanı anket yanıtını, reasonUserInput ise kullanıcı diğer seçeneğini işaretlediğinde serbest metni tutar. Play Console da toplamları Cancellation survey responses kartında gösterir.
- Apple, geliştiricilere müşterinin aboneliği neden iptal ettiğini söyler mi?
- Hayır. Apple'ın geliştiricinin görebildiği bir iptal anketi yoktur. expirationIntent alanı aboneliğin nasıl sona erdiğini müşteri iptal etti, faturalama hatası, fiyat artışına onay verilmedi, ürün mevcut değil veya diğer kodlarıyla söyler, ama müşterinin motivasyonunu söylemez.
- SUBSCRIPTION_CANCELED bildirimi iptal nedenini içerir mi?
- Hayır. Google Play'in gerçek zamanlı geliştirici bildirimleri yalnızca satın alma durumunun değiştiğini söyler. Nedeni okumak için aboneliği purchases.subscriptionsv2.get ile çekin ve hemen saklayın, çünkü kullanıcı aboneliği geri yüklerse Google iptal alanlarını temizler.
- Apple'ın AUTO_RENEW_DISABLED bildirimi bir iade talebi anlamına gelebilir mi?
- Evet. Apple'ın belgelerine göre AUTO_RENEW_DISABLED alt türü hem müşterinin otomatik yenilemeyi kapatmasını hem de müşteri iade talep ettikten sonra App Store'un bunu kapatmasını kapsar.
- Bir abone iptal ettiğinde erişimini kaldırabilir miyim?
- Google Play'de hâlâ hak sahibiyken hayır. Google, iptal eden bir abonenin faturalama döneminin sonuna kadar erişimini koruduğunu ve erişimi erken kaldırmanın Google Play abonelik politikasını ihlal ettiğini söyler. Erişimin ne zaman biteceğine karar vermek için expiryTime'ı kullanın.
Kaynaklar ve ek okumalar
- Google Play Developer API: purchases.subscriptionsv2
- Google Play Billing: Subscription lifecycle
- Google Play Billing: Real-time developer notifications reference
- Play Console Help: Review in-app subscription performance
- Apple Developer: expirationIntent
- Apple Developer: notificationType
- Apple Developer: Send Consumption Information
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
App Store ve Google Play için geri ödeme otomatik pilotu
Okumaya devam edin
Aşırı iade talepleri size iadelerin kendisinden daha pahalıya patlayabilir, çünkü iki uygulama mağazası da bunları bir kalite sinyali olarak görür
Apple'ın 5.6.4 numaralı yönergesi aşırı iade taleplerini bir uygulamanın kalite standartlarını karşılamadığının işareti olarak sayar. Google'ın Dağıtım Sözleşmesi de yeni geliştiricilerin uygulamalarını iade oranlarına göre kaldırma yetkisi verir. Her mağazanın ne dediğini, kaldırılmanın neye mal olduğunu ve riskten nasıl uzak durulacağını anlatıyoruz.
Bir iade üzerine işlem yapmadan önce App Store sunucu bildirimlerini doğrulayın, çünkü webhook URL'nize herkes istek gönderebilir
Bir iade bildirimi, imzasını kontrol edene kadar yalnızca bir HTTPS isteğidir. App Store sunucu bildirimlerini ve Google Play RTDN mesajlarını nasıl doğrulayacağınızı, her mağazanın neyi imzaladığını ve sahte ya da yanlışlıkla reddedilen bir iadenin size neye mal olduğunu anlatıyoruz.