App Store iade talebi: geliştirici ne görür?
Yazan: Mehdi Azizi
tarihinde yayınlandı, 8 dk.
App Store'da iadeye yalnızca Apple karar verir. Geliştiriciye CONSUMPTION_REQUEST gelir, 12 saat içinde yanıt verebilir, kararı REFUND ile öğrenir.
App Store'da iadeyi onaylayan ya da reddeden her zaman Apple'dır, asla geliştirici değil. Müşteri talebini Apple'ın sitesinden ya da senin uygulamandan yapar. Apple'ın sunucu bildirimlerini kurduysan, talep anında bir CONSUMPTION_REQUEST bildirimi alırsın, karar verildiğinde de REFUND ya da REFUND_DECLINED. Bu ikisinin arasında, müşteri onay verdiyse kullanım verilerini ve tercihini göndermek için 12 saatin var.
Onaylanan bir iade, satın alımı müşterinin aktif haklarından çıkarır ve satış raporlarında eksi olarak görünür. Bu rehber her adımı, Apple'a neler gönderebileceğini ve kötüye kullanım amaçlı taleplere karşı neler yapmana izin verildiğini anlatıyor. Kurallar, 3 Kasım 2026'da yeniden okuduğum Apple sayfalarından geliyor. Gerçek örnek ise ekimde uygulamalarıma kurduğum bir uyarıdan.
App Store iadesine kim karar verir?
Apple, yalnızca Apple. Apple'ın destek sayfası müşterinin izlediği yolu anlatıyor: reportaproblem.apple.com'a giriş yapar, "Request a refund" seçeneğini seçer, bir neden belirtir, sonra ilgili satın alımı seçer. Apple, yanıt için 24 ila 48 saat beklemesini önerir.
Müşteri iadeyi senin uygulamandan da isteyebilir. StoreKit bunun için iOS 15'ten beri kullanılabilen bir talep sayfası sunuyor. Apple, bunu hesap ayarlarından ya da bir yardım menüsünden açmanı öneriyor. Sayfa satın alımı ve bir neden listesini gösterir, Apple da karar vermek için 48 saate kadar süre alır.
İki durumda da senin onaylaman gereken bir şey yok. Sadece bilgi ve tercih verebilirsin, bunlar da Apple'ın kararındaki birçok kriterden yalnızca biri olur.
Adım adım kim ne görür
| Adım | Müşteri tarafı | Geliştirici tarafı |
|---|---|---|
| Talep | Apple formu ya da uygulamadaki sayfa | CONSUMPTION_REQUEST bildirimi |
| 12 saat içinde | Bekleme | Kullanım verileri gönderilebilir |
| 48 saat içinde | Apple'ın yanıtı | REFUND ya da REFUND_DECLINED bildirimi |
| Onaydan sonra | Para ödeme yöntemine iade edilir | Satın alım aktif haklardan çıkar, eksi birimler |
| İtirazdan sonra | İade Apple tarafından iptal edilir | REFUND_REVERSED bildirimi, erişim geri verilmeli |
App Store Connect sana yalnızca onaylanmış iadeleri gösterir, Sales and Trends içinde. Talebin kendisi yalnızca sunucu bildirimleriyle gelir. Bildirimler olmadan iadeyi iş işten geçtikten sonra öğrenirsin.
İadeyle ilgili sunucu bildirimleri
App Store Server Notifications V2 burada işine yarayan beş tür gönderir. Bunları App Store Connect'te tanımladığın HTTPS adresinde alırsın: biri production, biri sandbox için.
| Bildirim | Ne haber verir | Sen ne yaparsın |
|---|---|---|
CONSUMPTION_REQUEST | Müşteri iade istiyor | Onay varsa 12 saat içinde yanıt ver |
REFUND | Apple işlemi iade etti | İade edilen içeriği ya da erişimi kaldır |
REFUND_DECLINED | Apple talebi reddetti | Hiçbir şey, erişim devam eder |
REFUND_REVERSED | Apple, müşterinin itirazından sonra iadeyi iptal ediyor | Kaldırdığın şeyi geri ver |
REVOKE | Family Sharing ile paylaşılan bir satın alım artık kullanılamıyor | Aile üyesinin erişimini kaldır |
Sunucun 200 ile 206 arasında bir HTTP koduyla yanıt vermeli. Bildirimlere yanıt verme sayfasına göre aksi halde Apple, bir önceki denemeden 1, 12, 24, 48 ve 72 saat sonra olmak üzere beş kez yeniden dener. Sandbox'ta yalnızca bir kez gönderir.
Consumption API: Apple'a neler söyleyebilirsin
Talep geldiğinde Send Consumption Information ile yanıt verebilirsin. Kural Apple'ın tek bir cümlesine sığıyor: "Respond within 12 hours of receiving the CONSUMPTION_REQUEST notification." API'nin 2. sürümü, abonelikler dahil tüm ürün türleri için geçerli.
İsteğin alanları:
| Alan | Zorunlu | Apple'a ne söyler |
|---|---|---|
customerConsented | Evet | Müşteri verilerinin paylaşılmasına onay verdi |
deliveryStatus | Evet | Satın alım teslim edildi ve çalışıyor, ya da neden teslim edilmedi |
sampleContentProvided | Evet | Satın almadan önce bir deneme, örnek ya da açıklama sunuldu |
consumptionPercentage | Hayır | Kullanılan kısım, %0 ila %100 için 0 ila 100 000 |
refundPreference | Hayır | Tercihin: DECLINE, GRANT_FULL ya da GRANT_PRORATED |
İki ayrıntı önemli. deliveryStatus değeri DELIVERED değilse, kullanılan kısım sıfır olmalı. Bir aboneliğin kısmi (orantılı) iadesinde ise kullanılan kısmı göndermezsin: Apple onu kendisi hesaplar.
Her şeyin şartı onay. Apple şöyle yazıyor: "You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API." Onay yoksa yanıt vermezsin. Apple bu onayı reklam takibi penceresiyle toplamayı da yasaklıyor: "Don't use the AppTrackingTransparency prompt to obtain consent".
RevenueCat kullanıyorsan
RevenueCat ile Apple'ın bildirimlerini alan ve talebe yanıt veren RevenueCat'in kendisidir, Refund Control ile. Dört politikadan birini seçersin: tam iadeyi tercih etmek, reddi tercih etmek, yalnızca kullanım verilerini göndermek ya da hiç yanıt vermemek.
Veri paylaşımını açmak, müşterilerinden onay aldığını teyit etmek anlamına gelir. RevenueCat bunu kendisi söylüyor: "Enabling consumption data sharing confirms that you obtained consent from your Customers." Ayrıca "Prefer no refund" seçeneğini hedeflenmiş bir gruba ayırmanı öneriyor ve bu tercih müşterilerinin çoğunu etkilediğinde seni uyarıyor.
Bildirimleri kendi sunucunda da almak için RevenueCat, uygulama ayarlarında bir "Apple Server Notification Forwarding URL" alanı sunuyor. Bu alan Apple bildirimleriyle ilgili sayfasında anlatılıyor. Ben de bunu kullanıyorum. RevenueCat ile abonelik kurulumu RevenueCat ve iOS uygulama içi abonelik yazısında.
Gelirine ve aboneliğe etkisi
Erişime etkisi. currentEntitlements dokümantasyonuna göre "Products that the App Store has refunded or revoked don't appear in the current entitlements". Uygulaman hakları currentEntitlements ile kontrol ediyorsa, iade edilen erişim kendiliğinden kaybolur. İşlem, geri alınma tarihini ve nedenini revocationDate ve revocationReason alanlarında taşır.
Raporlara etkisi. Satış raporu yardım sayfasına göre bir iade, eksi birim ve eksi müşteri fiyatıyla görünür. Aboneliklerde abonelik verileri sayfası tam ve kısmi iadeleri olaylar arasında sayar ve bunları günlük birimlerden düşer.
İtibarına etkisi. Guideline 5.6.4, aşırı iade taleplerini yetersiz kalitenin işaretleri arasında sayıyor. Yüksek bir iade oranı yalnızca para kaybı değil: Apple bunu, davranış kurallarına uyup uymadığını değerlendirirken hesaba katabilir.
Benim örneğim: uygulamalarıma kurduğum uyarı
12 Ekim 2026'da uygulamalarıma bir uyarı kurdum. RevenueCat, Apple'ın bildirimlerini devoria.fr üzerindeki bir route'a iletiyor. Bu route Apple'ın imzasını doğruluyor, sonra bana tutar içermeyen bir uyarı gönderiyor. Talebi yalnızca sonucunu değil, geldiği anda görmek istiyordum.
18 Ekim'de ilk gerçek talep, trading simülatörüm TradaZen'e geldi. 7 günlük ücretsiz denemenin sonunda ödenmiş yıllık bir abonelik. Belirtilen neden: istemeden yapılmış bir satın alım. Üç ders:
- Aynı talep birden fazla kez gelebilir. Aynı akşam aynı uyarıyı üç kez aldım. O günden beri her uyarı, bildirim türü ve işlem kimliğine göre tekilleştiriliyor.
- Karar bir günden kısa sürede geldi. Apple talepten yaklaşık 22 saat sonra reddetti. Müşteri erişimini korudu.
- Ret son nokta değil. Aynı müşteri iki gün sonra aynı işlem için yeniden talepte bulundu.
Denemenin sonundaki bir "istemeden satın alım" talebi, Apple'a verilen yanıtla kazanılmaz. İlk ödemeden önce, paywall'da önlenir.
Kuralları çiğnemeden kötüye kullanım taleplerini azaltmak
İzin verilenler:
- Müşteri onay verdiyse her talebe doğru verilerle yanıt vermek.
- Hedefli bir tercih belirtmek, örneğin herkese ret yerine, zaten kullanılmış bir satın alım için ret.
- Her
REFUNDbildirimini bir müşteri hesabına bağlamak. Apple'ın iade bildirimleri sayfası tekrarlanan iadeleri fark etmek için bunu öneriyor. - Satın almadan önce neyin satın alındığını açıkça söylemek. Guideline 3.1.2(c), abone olmayı teklif etmeden önce kullanıcının o fiyata ne aldığını açıklamanı istiyor.
Yasak olanlar:
- Bir talebi reddettirmek için yanlış veri göndermek ya da onay olmadan yanıt vermek.
- Onayı reklam takibi penceresiyle toplamak, Apple bunu açıkça hariç tutuyor.
- Satın alıma tuzak kurmak. Guideline 5.6, müşterileri istemedikleri satın alımlara itmeyi ya da teslim edilmeyen şeyi ücretlendirmeyi yasaklıyor.
- İade isteyen bir müşteriye baskı yapmak. Aynı kural, müşteri hizmetlerinde yıldırma olmadan saygı gösterilmesini şart koşuyor.
En iyi kaldıraç yine de önceden devreye giriyor: fiyatı, ilk ödeme tarihini ve nasıl iptal edileceğini söyleyen bir paywall. Kaçınman gereken hatalar paywall hataları yazısında, deneme kuralları da App Store'da ücretsiz deneme yazısında.
Production'dan önce test etmek
Talepleri test etme sayfasına göre sandbox ve Xcode'daki StoreKit testleri iade taleplerini kabul ediyor. Sandbox'ta herhangi bir neden otomatik onayı tetikler. Bir reddi simüle etmek için "Other" seçeneğini seç ve DECLINE yaz. Kısmi (orantılı) iade için GRANT_PRORATED yaz. Sandbox'ta kullanım yanıtın beş dakika içinde gönderilmeli.
Daha az iade edilen bir abonelik
iOS & Android Kit, onboarding, paywall ve abonelikleri hazır kodlanmış haliyle benim uygulamalarımın kodundan yola çıkıyor ve App Store'a kadar dört adımda, kendi temponda ilerliyor. Tüm kurulum iOS uygulama içi abonelik sayfasında, Apple'ın abonelik kuralları da guideline 3.1.2 yazısında ayrıntılı anlatılıyor.
Paywall'unu yayına almadan önce ücretsiz teşhisini yap: projeni gerçekte neyin tıkadığını söyler ve sana Apple reddine karşı kontrol listemi gönderir.
Sık sorulan sorular
Geliştirici bir App Store iadesini reddedebilir mi?
Hayır. Kararı yalnızca Apple verir. Kullanım verilerini ve örneğin DECLINE gibi bir tercihi gönderebilirsin, bunlar birkaç kriterden biri olarak sayılır. Son sözü Apple söyler.
Geliştiriciye bir iade talebi bildirilir mi?
Evet, App Store Server Notifications V2'yi kurduysa. Apple talep anında CONSUMPTION_REQUEST, karar verildiğinde REFUND ya da REFUND_DECLINED gönderir. Bildirimler olmadan yalnızca onaylanmış iadeleri raporlarında görürsün.
Apple bir iade talebini ne kadar sürede işler?
Apple müşteriye 24 ila 48 saat diyor. StoreKit dokümantasyonu en fazla 48 saatten söz ediyor. Senin tarafında, kullanım verilerini göndermek için 12 saatin var.
İadeden sonra erişime ne olur?
İade edilen satın alım müşterinin aktif haklarından çıkar: StoreKit 2 onu artık currentEntitlements içinde döndürmez. Apple daha sonra iadeyi iptal ederse REFUND_REVERSED alırsın ve erişimi geri vermen gerekir.
Apple'a yanıt vermek için müşterinin onayı gerekir mi?
Evet. Apple, Consumption API ile herhangi bir veri paylaşmadan önce geçerli bir onay istiyor. Onay yoksa bildirime yanıt vermezsin. Reklam takibi penceresi bu onayı toplamak için kullanılamaz.
İadeler uygulamamın aleyhine sayılır mı?
Sayılabilir. Guideline 5.6.4 aşırı iade taleplerini, Apple'ın davranış kurallarına uyumu değerlendirirken hesaba katabileceği yetersiz kalite işaretleri arasında sayıyor.

