Tüm makaleler
Playbook8 dk okuma

Uygulamanız hâlâ App Store Server Notifications V1 kullanıyorsa, Apple abonelik iadeleri hakkında size hiçbir zaman soru sormaz

Apple, App Store Server Notifications V1'i Haziran 2023'te kullanımdan kaldırdı ve V1 hiçbir zaman abonelikler için CONSUMPTION_REQUEST, REFUND_DECLINED veya REFUND_REVERSED desteği almadı. Bir V1 sunucusunun neleri kaçırdığını, bunun maliyetini ve tek bir iadeyi bile kaybetmeden V2'ye nasıl geçeceğinizi anlatıyoruz.

Modern bir sunucu kabininin yanında açılmamış mektuplarla taşan eski bir posta kutusu, App Store Server Notifications V1'de kaybolan iade sinyallerini temsil ediyor

Önemli noktalar

  • Apple, App Store Server Notifications V1'i ve verifyReceipt uç noktasını 5 Haziran 2023'te kullanımdan kaldırdı. İkisi de hâlâ çalışıyor, yeni özellik almıyor ve açıklanmış bir kullanım sonu tarihi yok.
  • Apple'ın V1 belgeleri CONSUMPTION_REQUEST bildirimini yalnızca tüketilebilir uygulama içi satın almalar için listeler. Otomatik yenilenen abonelikler için tüketim talepleri Nisan 2024'te App Store Server Notifications V2'ye eklendi.
  • REFUND_DECLINED ve REFUND_REVERSED yalnızca App Store Server Notifications V2'de bulunur. Bu yüzden bir V1 sunucusu, Apple'ın bir iadeyi reddettiğini ya da geri aldığını hiçbir zaman öğrenmez.
  • V1'de, otomatik yenilenen bir aboneliğin Apple tarafından iadesi CANCEL olarak gelir. V2'de ise imzalı işlem üzerinde revocationDate ve revocationReason ile birlikte REFUND olarak gelir.
  • Apple, başarısız bir V2 bildirimini yaklaşık bir hafta boyunca beş kez yeniden dener: 1, 12, 24, 48 ve 72. saatlerde. Başarısız bir V1 bildirimi ise 6, 24 ve 48. saatlerde olmak üzere üç kez yeniden denenir ve Get Notification History ile kurtarılamaz.
  • Bir uygulama App Store Connect'te V2'ye geçtikten sonra yeni bildirimler hemen V2 biçiminde gelir. Hâlihazırda yeniden deneme sürecindeki V1 bildirimleri ise yaklaşık 78 saat boyunca gelmeye devam edebilir.

App Store Server Notifications'ın Version 1'i iadeleri hâlâ iletiyor, ancak bir abonelik iadesine itiraz etmenizi sağlayan tek bildirimi dışarıda bırakıyor. Apple, V1'i 5 Haziran 2023'te verifyReceipt uç noktasıyla birlikte kullanımdan kaldırdı ve o tarihten bu yana eklediği her iade özelliğini yalnızca V2'ye ekledi. App Store Connect ayarlarınızda hâlâ Version 1 yazıyorsa, Apple sunucunuza hiçbir zaman CONSUMPTION_REQUEST göndermeden bir abonelik iadesine karar verebilir. Orada bir mücadeleyi kaybetmezsiniz. O mücadeleye hiç davet edilmezsiniz.

App Store Server Notifications V1'in kullanımdan kaldırılması ne anlama geliyor

Kullanımdan kaldırılmak, kapatılmak demek değil. Bir Apple mühendisi Haziran 2023'te geliştirici forumlarında, verifyReceipt ve V1 bildirimlerinin bir kullanım sonu tarihi açıklanana kadar çalışmaya devam edeceğini, bu tarihin henüz belirlenmediğini ve geliştiricilere önceden haber verileceğini yazdı. Üç yılı aşkın bir süre sonra bile App Store Connect, sunucu URL'si ayarlarken "Version 1 (deprecated)" seçeneğini hâlâ sunuyor.

Kullanımdan kaldırılmanın asıl anlamı donmaktır. Haziran 2023'ten bu yana Apple'ın bildirim değişiklik günlüğündeki her değişiklik bir V2 değişikliğidir: imzalı işlemde yeni alanlar, yeni bildirim türleri, Nisan 2026'da eklenen 12 aylık taahhüt verileri. Bir V1 sunucusu bunların hiçbirini görmez.

Bir V1 sunucusunun hiçbir zaman almadığı iade sinyalleri

Apple'ın her sürüme ait belgelerine göre, aynı iade olaylarının bir V1 sunucusuna ve bir V2 sunucusuna nasıl ulaştığı aşağıda.

İade olayıVersion 1Version 2
Müşteri Apple'dan tüketilebilir bir ürünün iadesini isterCONSUMPTION_REQUESTCONSUMPTION_REQUEST
Müşteri Apple'dan otomatik yenilenen bir aboneliğin iadesini isterV1 belgelerinde listelenmiyorCONSUMPTION_REQUEST, Nisan 2024'ten beri
Apple otomatik yenilenen bir aboneliği iade ederCANCELREFUND
Apple tüketilebilir, tüketilemeyen veya yenilenmeyen bir aboneliği iade ederREFUNDREFUND
Apple, müşterinin uygulamanızda başlattığı bir iadeyi reddederMevcut değilREFUND_DECLINED
Apple daha önce onayladığı bir iadeyi geri alırMevcut değilREFUND_REVERSED
Bir kesinti sırasında kaçırdığınız bildirimleri kurtarırsınızMevcut değilGet Notification History

V1 hâlâ CONSUMPTION_REQUEST alıyor mu?

Evet, tüketilebilir ürünler için. Apple'ın V1 başvuru belgesi CONSUMPTION_REQUEST'i, müşteri tüketilebilir bir uygulama içi satın alma için iade talebi başlattığında gönderilen bildirim olarak tanımlar. Bir Apple mühendisi 2023'te forumlarda, uygun iadeler için V1 tüketim taleplerinin gönderildiğini doğruladı. Eksik olan abonelikler. Apple'ın değişiklik günlüğü abonelik tüketim taleplerini 11 Nisan 2024 tarihine ve V2'ye bağlar. Send Consumption Information belgeleri de Apple'ın talebi V2 uç noktanız üzerinden gönderdiğini belirtir.

V1'de CANCEL neden kolayca yanlış anlaşılır

V1'de Apple bir aboneliği iade ettiğinde bildirim türü CANCEL olur ve çoğu zaman DID_CHANGE_RENEWAL_STATUS ile birlikte gelir. Pek çok sunucu her iptali, müşterinin otomatik yenilemeyi kapatması olarak ele alır ve erişimi dönem sonuna kadar açık bırakır. V2 bu belirsizliği ortadan kaldırır. İade REFUND olarak gelir, yenilemeyi kapatan müşteri ise AUTO_RENEW_DISABLED alt türüyle DID_CHANGE_RENEWAL_STATUS olarak gelir.

V1'de kalmanın parasal maliyeti

Her App Store iadesine Apple karar verir. CONSUMPTION_REQUEST, kullanım verilerinizin bu karara ulaştığı tek noktadır ve Apple sizden 12 saat içinde yanıt vermenizi ister. V1'de abonelik iadeleri bu adımı atlar.

Aşağıda temsili rakamlarla hazırlanmış bir örnek var. Uygulamanızın, yapay zekâ ile görsel üretimi içeren $9.99 tutarında aylık bir abonelik sattığını varsayalım. Bir abone bir ayda 400 üretim yapıyor ve her biri model çıkarımı için size gerçek para olarak mal oluyor. Sonra Apple'dan iade istiyor.

Maliyet kalemiV1 sunucusuV2 sunucusu
Ödemedeki payınızApple onaylarsa iade edilirApple onaylarsa iade edilir
O ay kullanılan işlem gücü, API çağrıları ve depolamaZaten ödendi, geri alınamazZaten ödendi, geri alınamaz
400 üretimi Apple'a gösterme şansıYokBir CONSUMPTION_REQUEST, 12 saat
Apple'ın iadeyi reddettiğini öğrenmekAslaREFUND_DECLINED
Bir iadenin geri alındığını öğrenmekAslaREFUND_REVERSED

Kaybettiğiniz ödeme liste fiyatı değil, sizin payınızdır. Apple, abonenin ücretli hizmetinin ilk yılında abonelik fiyatının geçerli vergiler düşüldükten sonra %70'ini, sonrasında veya App Store Small Business Program üyeleri için %85'ini öder. İşlem gücü faturası bununla birlikte küçülmez. Çıkarım, üçüncü taraf API çağrıları ve dosya depolama, müşteri bunları kullandığında ödenmişti.

Eksik olan iki sonuç bildirimi de para kaybettirir. REFUND_REVERSED olmadan, iade üzerine erişimi iptal eden bir sunucu, Apple iadeyi geri aldığında erişimi hiçbir zaman geri vermez. Böylece ödeme yapan bir müşteri dışarıda kalır ve desteğe yazar. REFUND_DECLINED olmadan da hâlâ beklemede olan bir iadeyi Apple'ın reddettiği bir iadeden ayırt edemezsiniz.

Bir geliştiricinin elleri, açık bir dizüstü bilgisayarın yanında bir ağ kablosunu eski bir yama paneli portundan yenisine taşıyor

Tek bir iadeyi kaybetmeden V1'den V2'ye nasıl geçilir

V2'ye geçmek bir sunucu değişikliği ile tek bir ayardan ibarettir. Aralık 2025'te bir App Store Commerce Engineer'ın forumlarda paylaştığı Apple'ın kendi rehberi, geçiş yaptığınız gün neler olduğunu açıklar.

Ayarı değiştirmeden önce V2 uç noktasını oluşturun

  • Gövdesinde signedPayload taşıyan bir POST isteğini kabul edin. V2 yükleri Apple tarafından imzalanmış JWS'dir, bu yüzden içindeki herhangi bir şeye güvenmeden önce imzayı doğrulayın. Apple'ın App Store Server Library'si bunu sizin için yapar.
  • CANCEL işlemesini REFUND ile eşleyin, REFUND_DECLINED ve REFUND_REVERSED'i de yeni durumlar olarak ele alın.
  • Abonelikler için CONSUMPTION_REQUEST'e Send Consumption Information ile yanıt verin ve bunu yalnızca müşteri Apple ile veri paylaşımına onay verdiyse yapın. Apple, onay olmadan yanıt vermemeniz gerektiğini söylüyor.
  • Başarı durumunda HTTP 200 ile 206 arasında bir kod döndürün. Herhangi bir 40x veya 50x, Apple'ın yeniden denemesine yol açar.

Ayarı App Store Connect'te değiştirin

App Store Connect'te uygulamanızı açın, General altında App Information'ı seçin, App Store Server Notifications bölümünü bulun ve Version 2 seçili olarak Production Server URL'yi V2 uç noktanıza ayarlayın. Test etmek istiyorsanız önce sandbox URL'si için de aynısını yapın ve sunucunuzun yanıt verdiğini doğrulamak için Request a Test Notification'ı kullanın.

V1 işleyicisini yaklaşık üç gün çalışır durumda tutun

Geçişten sonra yeni bildirimler, eski ya da yeni her abonelik için hemen V2 biçiminde gelir. Hâlihazırda yeniden deneme sürecindeki V1 bildirimleri ise başarılı olana veya denemeleri tükenene kadar V1 biçiminde gelmeye devam eder. Apple, olası son V1 yeniden denemesini yaklaşık 78. saate koyar, yani 6 + 24 + 48. Eski işleyiciyi bu sürenin ötesinde de çalıştırın, sonra kaldırın.

Hazır başlamışken verifyReceipt'i de değiştirin

verifyReceipt da aynı gün kullanımdan kaldırıldı. Hâlâ yanıt veriyor, ancak Apple sunucuları bunun yerine App Store Server API'ye yönlendiriyor. Get Transaction Info tek bir imzalı işlem döndürür, Get Transaction History bir müşterinin geçmişini döndürür ve Get Refund History bir müşterinin iade edilen tüm satın almalarını listeler. V2 bildirimleriyle birlikte bunlar, çoğu sunucunun makbuzları kullandığı her şeyi karşılar. Buna eskiden makbuzda bir iadeyi işaretleyen cancellation_date alanı da dahildir.

RefundHalt, App Store Server Notifications V2'ye bağlanır ve uygulamanızın zaten kaydettiği kullanım verilerini kullanarak her CONSUMPTION_REQUEST'e 12 saatlik süre içinde yanıt verir. Hâlâ V1 kullanıyorsanız, tüm bunları mümkün kılan adım geçiştir.

Sık sorulan sorular

App Store Server Notifications V1 kapatılıyor mu?
Henüz değil. Apple, V1'i ve verifyReceipt'i 5 Haziran 2023'te kullanımdan kaldırdı ve ikisi de hâlâ çalışıyor. Apple henüz bir kullanım sonu tarihi olmadığını ve geliştiricilere önceden haber verileceğini söyledi. Bu arada V1 yeni özellik almıyor.
V1'de CONSUMPTION_REQUEST bildirimleri alır mıyım?
Apple'ın V1 belgelerine göre yalnızca tüketilebilir ürünler için. Otomatik yenilenen abonelikler için tüketim talepleri Nisan 2024'te V2'ye eklendi ve Apple bunları V2 uç noktanız üzerinden gönderir. Abonelik satıyor ve V1'de kalıyorsanız, bu iade taleplerine yanıt veremezsiniz.
Bir abonelik iadesi V1'de ve V2'de nasıl görünür?
V1'de CANCEL olarak gelir, çoğu zaman DID_CHANGE_RENEWAL_STATUS ile birlikte. V2'de ise imzalı işlem üzerinde revocationDate ve revocationReason ile birlikte REFUND olarak gelir. V2 ayrıca Apple uygulamanızda başlatılan bir iadeyi reddettiğinde REFUND_DECLINED, onayladığı bir iadeyi geri aldığında ise REFUND_REVERSED gönderir.
V1'den V2'ye geçtiğimde bildirimlere ne olur?
Geçişten kısa süre sonra yeni bildirimler tüm abonelikler için V2 biçiminde gelir. Hâlihazırda yeniden denenen V1 bildirimleri, başarılı olana veya denemeleri tükenene kadar V1 biçiminde gelmeye devam eder. Apple bu süreyi geçişten sonra yaklaşık 78 saat olarak belirtir. Bu süre boyunca iki işleyiciyi de çalışır durumda tutun.
V2'ye geçtikten sonra V1'e geri dönebilir miyim?
Evet, Apple'ın TN3180 teknik notunda açıklandığı gibi App Store Connect API'nin Modify an App uç noktası aracılığıyla. Apple bunu olağan dışı bir durum olarak nitelendiriyor ve V1'i hâlâ kullanımdan kaldırılmış olarak işaretliyor. Bu yüzden geri dönmek, abonelik tüketim taleplerinden ve daha yeni iade bildirimlerinden vazgeçmek anlamına gelir.

Kaynaklar ve ek okumalar

RefundHalt

App Store ve Google Play için geri ödeme otomatik pilotu

Okumaya devam edin

Bir sonraki geri ödeme talebi şimdiden yolda.

İtiraz edemediğiniz bir geri ödemeyle ilgili başka bir destek e-postasını okumak için gereken sürede RefundHalt'ı kurun.