Şunu düşünün. Bir müşteri yıllık planınızı satın alır, bir hafta kullanır, sonra Apple'dan parasını geri ister. Bunu, ödemeniz daha düşük geldiğinde öğrenirsiniz. Size hiçbir şey sorulmamıştır. Ya da öyle görünür.
Aslında Apple genellikle sorar. Sunucunuza CONSUMPTION_REQUEST adlı bir mesaj gönderir ve müşterinin satın aldığı şeyi gerçekte nasıl kullandığını bilmek ister. Sunucunuz dinlemiyorsa Apple sizsiz karar verir. Bu kılavuz, geliştiriciler için App Store iade sürecini adım adım ele alır ve insanların nerede takıldığına dikkat çeker. iOS'ta iadeye karşı savunma konusuna daha kapsamlı bir bakış için, RefundSensor'ın App Store iade savunması sayfası da bunu ele alır.
Hızlı Yanıt
CONSUMPTION_REQUEST bildirimi, Apple'ın bir müşteri iade talep ettiğinde kullanım ayrıntılarını istemek için kullandığı yöntemdir. Müşteri veri paylaşımını kabul ettiyse, sunucunuz 12 saat içinde Send Consumption Information API'sini çağırmalı ve teslimat ile kullanım bilgilerini bildirmelidir. Apple bu bilgileri değerlendirir ve son kararı verir. Bir iadeyi onaylayamaz veya sonucu garanti edemezsiniz.
Apple CONSUMPTION_REQUEST Nedir?
CONSUMPTION_REQUEST, App Store Server Notifications V2 içindeki bir bildirim türüdür. Apple, bir müşteri iade talebi başlattığında bunu gönderir ve her ürün türünü kapsar: tüketilebilir ürünler, tüketilemeyen ürünler, yenilenmeyen abonelikler ve otomatik yenilenen abonelikler.
Bunu bir emir değil, bir soru olarak düşünün. Apple size kimseye iade yapmanızı söylemiyor. Sadece ne bildiğinizi soruyor. Son kararı yine de Apple verir ve sizin yanıtınız, dikkate aldığı şeylerden sadece biridir.
Apple'ın İade İş Akışı Nasıl Çalışır
Burada iki şey gerçekleşir ve insanlar bunları birbirine karıştırır. Bildirimin alınması otomatiktir. Kullanım bilgilerinin geri gönderilmesi ise yalnızca sunucunuz bunu yaparsa gerçekleşir.
Müşteri Apple'dan iade talep eder.
Apple, V2 bildirim URL'nize bir CONSUMPTION_REQUEST gönderir.
Sunucunuz, o müşterinin kullanım verilerini paylaşmayı kabul edip etmediğini kontrol eder.
Kabul ettiyse, sunucunuz kullanım ayrıntılarını 12 saat içinde gönderir.
Apple kararını verir. İadeyi onaylarsa, ardından bir REFUND bildirimi gelir.
Adım Adım Uygulama Kılavuzu
İşte baştan sona kurulum süreci.
Bildirim URL'nizi ekleyin. App Store Connect'te sunucunuzun HTTPS URL'sini girin ve Version 2'yi seçin.
Hızlı yanıt verin. 200 ile 206 arasında bir durum koduyla yanıt verin. 40x veya 50x, Apple'ın yeniden denemesine neden olur.
İmzayı kontrol edin. V2 yükleri imzalı olarak gelir. İçindeki herhangi bir şeyi okumadan önce doğrulayın.
Müşteriyi bulun. İşlemi kendi veritabanınızdaki bir kullanıcıyla eşleştirin.
Onayı kontrol edin. Onay yoksa yanıt yok.
API'yi çağırın. App Store Connect'ten alınan bir In-App Purchase anahtarıyla kimlik doğrulaması yapılan bir App Store Server API isteğiyle verileri gönderin.
Kaydedin. Ne gönderdiğinizin ve ne zaman gönderdiğinizin kaydını tutun.
Bir Geliştirici Olarak Apple İade Talebine Nasıl Yanıt Verilir
Her zaman onayla başlayın. Ardından Apple'a gerçekte ne olduğunu anlatın. Buradaki değer, somut ve dürüst verilerden gelir, bu yüzden şişirmeyin.
İki durumu ele alalım.
Bir oyuncu bir coin paketi satın alır ve bir gün içinde büyük kısmını tüketir. Yoğun kullanımı bildirin. Apple'dan talebi reddetmesini istemek makul bir tercihtir.
Bir abone bir yıllık ödeme yapar ama sunucunuz çökmüştür ve içerik hiç yüklenmemiştir. Teslim edilmediğini bildirin. Bu durumda iadeyi onaylamak dürüst bir yanıt olabilir.
İade tercihiniz bir öneridir. Apple bunu takip etmek zorunda değildir.
Apple Send Consumption Information API Açıklaması
Send Consumption Information endpoint adlı uç nokta, bir işlem kimliğine bağlı bir PUT isteğidir (/inApps/v2/transactions/consumption/{transactionId}). Bir CONSUMPTION_REQUEST geldikten sonra bunu çağırırsınız ve Apple yanıtı 12 saat içinde ister.
Gövde, beş alana sahip bir ConsumptionRequest nesnesidir:
customerConsented: müşteri verilerin paylaşılmasını kabul etti mi? true olması gerekir. Aksi halde Apple, çağrıyı bir HTTP 400 hatasıyla reddeder.
deliveryStatus: uygulamanız çalışan bir satın alma teslim etti mi?
sampleContentProvided: önce ücretsiz bir örnek veya deneme sundunuz mu?
consumptionPercentage: milliunit cinsinden ne kadar kullanıldığı.
refundPreference: istediğiniz sonuç.
Birkaç kural insanları zor duruma düşürür. deliveryStatus DELIVERED değilse, consumptionPercentage değerini 0 olarak ayarlayın; aksi halde istek başarısız olur. GRANT_PRORATED ile otomatik yenilenen bir abonelik için consumptionPercentage'ı boş bırakın, çünkü Apple bunu kendisi hesaplar. Onay konusu ise size aittir. Apple ayrıca bunun için App Tracking Transparency isteminin kullanılmamasını söyler.
App Store Server Notifications V2 Entegrasyonu
App Store Server Notifications V2, Apple'ın sunucunuza ulaşma yoludur. TLS 1.2 veya üzerini destekleyen güvenli bir HTTPS URL'ye ihtiyacınız olacak.
CONSUMPTION_REQUEST, birçok türden sadece biridir. REFUND ve REFUND_REVERSED gibi diğerleri, bir durumun nasıl sonuçlandığını size bildirir. İade kodunun yenileme koduyla birbirine karışmaması için her türe kendi işleyicisini verin. App Store Connect tarafını iş başında görmek ister misiniz? Refund Sensor Apple kurulum kılavuzu anahtarları ve bildirim URL'sini ele alır.
Kaçınılması Gereken Yaygın Hatalar
Bildirimde durup kalmak. Sunucunuz veri geri göndermeden bir CONSUMPTION_REQUEST hiçbir şey yapmaz.
Onayı göz ardı etmek. Müşteriden onay yoksa yanıt da yoktur.
12 saati kaçırmak. Bu bildirimler gece ve hafta sonları gelir. Bir kuyruk kullanın ve uyarılar kurun.
İşe yaramayan kombinasyonlar göndermek. Teslim edilmemiş bir satın alma üzerinde kullanım yüzdesi göndermek başarısız olur.
İmza kontrollerini atlamak. Önce doğrulayın, sonra güvenin.
Yavaş yanıt vermek. Hızlıca bir başarı kodu döndürün ve ağır işi arka planda yapın, aksi halde Apple yeniden denemeye devam eder.
Kullanıcıyı bulmanın bir yolu olmaması. Bir işlemi bir müşteriyle eşleştiremiyorsanız, bildirecek gerçek bir şeyiniz yoktur.
App Store İade İş Akışları Nasıl Otomatikleştirilir
Kimse 12 saatlik bir saati elle takip etmek istemez. App Store iade iş akışlarını otomatikleştirmek istiyorsanız, işi küçük parçalara bölün:
Bildirimi kabul edin ve hemen bir başarı kodu döndürün.
Olayı bir kuyruğa bırakın.
Bir çalışan (worker) bunu doğrular, kullanıcıyı bulur ve onayı kontrol eder.
Çalışan, saklanan kullanım verilerinden isteği oluşturur ve API'yi çağırır.
Sonucu kaydedin ve başarısız olursa birini uyarın.
Tutarlı yanıtlar, net bir denetim izi elde edersiniz ve saat 3'te kimse ayakta kalmaz. Bunu kendiniz oluşturabilir veya bu süreci RefundSensor gibi bir hizmete teslim edebilirsiniz.
Geliştiriciler için En İyi Uygulamalar
Gerçek kullanım verilerini saklayın: oturumlar, harcanan krediler, açılan içerik. Hiç tutmadığınız sayıları bildiremezsiniz.
Şartlarınıza veya ilk kullanım sürecinize açık bir onay adımı ekleyin ve onayın ne zaman verildiğini kaydedin.
İade kurallarınızı durumdan duruma karar vermek yerine bir kez yazıp koda yerleştirin.
Canlıya almadan önce sandbox bildirimleriyle test edin.
Alıcıyı daha sonra tanımlayabilmek için her satın almaya bir account token ekleyin. Bu appAccountToken kılavuzu bunun nasıl yapılacağını açıklar.
İade sonuçlarını ayda bir kez inceleyin. Sıra dışı artışlar, bozuk bir özelliğe veya kafa karıştırıcı bir ödeme duvarına işaret edebilir.
Sonuç
Apple iade iş akışı iki yarıya indirgenir. Apple, CONSUMPTION_REQUEST'i gönderir ve siz yanıt verip vermeyeceğinizi seçersiniz. Müşteri onay verdiyse, dürüst verileri 12 saat içinde Send Consumption Information API üzerinden gönderin. Kararı yine de Apple verir.
İyi bir ilk adım: V2 bildirim URL'nizin aktif olduğunu ve sunucunuzun bir işlemi bir kullanıcıyla eşleştirebildiğini doğrulamaktır. Bu iki kontrol, ileride çok baş ağrısından sizi kurtarır.
Sık sorulan sorular
Bir müşteri iade talep ettiğinde Apple'ın gönderdiği bir V2 mesajıdır. Sizden kullanım ayrıntılarını ister.
Apple, bildirimden sonra 12 saat içinde yanıt vermenizi ister.
Evet. Onay yoksa yanıt vermeyin. customerConsented alanı true dışında bir değere ayarlanmış bir istek reddedilir.
Mutlaka değil. Apple, kararını vermek için verilerinizi kullanır ama son kararı kendisi verir.
Tüketilebilir ürünler, tüketilemeyen ürünler, yenilenmeyen abonelikler ve otomatik yenilenen abonelikler.



