Apple'ın Send Consumption Information özelliği artık on iki değil beş alan istiyor ve işte her biri
Bir müşteri Apple'dan para iadesi istediğinde, Send Consumption Information yükü sizin yanıtınızdır. Apple bunu on iki alandan beşe indirdi, üçü zorunlu ve ikisi isteğe bağlı. İşte her alan, her birinin kabul ettiği değerler ve onu gönderdiğiniz 12 saatlik pencere.

Önemli noktalar
- Apple Send Consumption Information yükü artık on iki yerine beş alan taşıyor. Üçü zorunlu, customerConsented, deliveryStatus ve sampleContentProvided, ve ikisi isteğe bağlı, consumptionPercentage ve refundPreference.
- customerConsented katı bir kapıdır. Apple'ın kendi yönlendirmesi şudur: müşteri tüketim verilerini paylaşmayı kabul etmediyse, yükü hiç göndermezsiniz.
- deliveryStatus en güçlü sinyalinizi taşır. DELIVERED satın almanın çalıştığını söyler ve dört UNDELIVERED değeri, müşterinin çalışan bir ürünü hiç almadığını Apple'a bildirir.
- consumptionPercentage, eski dört basamaklı consumptionStatus enum'unu milliunits cinsinden kesin bir sayıyla değiştirdi; burada 100,000 milliunits öğenin tamamen tüketildiği anlamına gelir.
- refundPreference artık bir sayı değil, bir string'dir. Üç değer DECLINE, GRANT_FULL ve GRANT_PRORATED'dir ve bu bir karar değil, bir tercih belirtir. Karar hâlâ Apple'ındır.
- Yükü, işlem kimliğiyle anahtarlanmış Send Consumption Information uç noktasına bir PUT ile gönderirsiniz ve Apple boş bir gövdeyle 202 Accepted döndürür. Pencere, CONSUMPTION_REQUEST'ten sonra 12 saattir.
- Otomatik yenilenen abonelikler için Apple tüketimi geçen süreden kendisi hesaplar, bu yüzden consumptionPercentage tüketilebilir ve yenilenmeyen satın almalar için tasarlanmıştır.
Apple'ın, bir müşteri para iadesi istediğinde sizden istediği bilgi listesi epeyce kısaldı. Bir geliştiricinin bir App Store para iadesi kararına gönderebildiği tek yanıt olan Send Consumption Information yükünde eskiden on iki alan vardı. Artık beş alan var. Apple bunu WWDC24 civarında kırptı ve eski hesap profilleme sorularının çoğunu iki basit soruya ve bir sayıya indirdi. Daha az alan küçük bir düzenleme değildir. Apple'ın hangi kanıtı tarttığını değiştirir ve hangi alanlarda yanlış yapmayı göze alamayacağınızı değiştirir.
İşte bunun neden sadece bir şema notu değil, dikkatinize değer olduğu. Bu yük, bir Apple para iadesinde sizin tarafınızdaki hikayenin karara ulaştığı tek andır. Tüketilebilir bir ürünün iadesi, teslim etmek için zaten gerçek para harcadığınız geliri geri alır ve beş alan, ürünün teslim edildiğini ve kullanıldığını Apple'a bildirme biçiminizdir. 12 saatlik pencereyi kaçırın ya da bir alanı yanlış doldurun, Apple yalnızca müşterinin talebine göre karar verir.
Send Consumption Information nedir
Send Consumption Information, Apple sunucunuza bir CONSUMPTION_REQUEST bildirimi gönderdikten sonra çağırdığınız App Store Server API uç noktasıdır. Bu bildirim, bir müşterinin Apple'dan bir uygulama içi satın alma için para iadesi istediği ve Apple'ın karar vermeden önce sizin girdinizi istediği anlamına gelir. Küçük bir JSON gövdesini, yani ConsumptionRequest'i uç noktaya PUT ederek yanıt verirsiniz. Apple onu okur, müşterinin geçmişiyle tartar ve kararı verir. Para iadesine asla siz karar vermezsiniz. Siz gerçekleri sağlarsınız.
Gövde, arayüzün tamamıdır. Ayrı bir form, itiraz ya da sayılan ikinci bir gönderim yoktur. O tek yükte gönderdiğiniz her şey davanızın tamamıdır, bu yüzden her alanın anlamı, alan sayısının düşündürdüğünden daha çok önemlidir.
Apple'ın artık istediği beş alan
Mevcut ConsumptionRequest'in beş üyesi vardır. Üçü zorunlu ve ikisi isteğe bağlıdır. Apple'ın müşterinin hesabı, kıdemi, ömür boyu harcaması, ömür boyu iadeleri, oynama süresi hakkında eskiden sorduğu her şey, gönderdiğiniz veriden kaldırıldı.
| Alan | Zorunlu | Tür | Ne taşır |
|---|---|---|---|
| customerConsented | Evet | Boolean | Müşterinin tüketim verilerini Apple ile paylaşmayı kabul edip etmediği |
| deliveryStatus | Evet | String | Uygulamanızın çalışan bir ürün teslim edip etmediği |
| sampleContentProvided | Evet | Boolean | Satın almadan önce ücretsiz bir örnek veya deneme sunup sunmadığınız |
| consumptionPercentage | Hayır | Integer | Satın almanın ne kadarının tüketildiği, milliunits cinsinden |
| refundPreference | Hayır | String | Para iadesi talebi için tercih ettiğiniz sonuç |
customerConsented kapıdır
customerConsented bir Boolean'dır ve genel olarak herhangi bir şey gönderip göndermeyeceğinize karar veren alandır. Müşterinin tüketim verilerini Apple ile paylaşmanıza izin verip vermediğini kaydeder. Apple'ın yönlendirmesi nettir: müşteri onay vermediyse, tüketim bilgisini göndermeyin. Yani bu, davanızı güçlendirmek için true'ya çevirdiğiniz bir alan değildir. Zaten elinizde bulunması gereken gerçek bir evet ya da hayırı yansıtır ve buradaki bir false, yükün geri kalanının gönderilmemesi gerektiği anlamına gelir.
deliveryStatus para iadelerini hareket ettiren alandır
deliveryStatus bir string enum'dur ve sahip olduğunuz en güçlü kaldıraçtır. Uygulamanızın gerçekten çalışan bir uygulama içi satın alma teslim edip etmediğini Apple'a bildirir. Bir değer evet der. Diğer dört değer hayır der, her biri farklı bir nedenle ve her biri müşterinin meşru bir şikayeti olduğunu Apple'a bildirir.
| Değer | Apple'a ne bildirir |
|---|---|
| DELIVERED | Uygulama çalışan bir uygulama içi satın alma teslim etti |
| UNDELIVERED_QUALITY_ISSUE | Satın alma bir kalite sorunu nedeniyle teslim edilmedi |
| UNDELIVERED_WRONG_ITEM | Müşteri yanlış ürünü aldı |
| UNDELIVERED_SERVER_OUTAGE | Bir sunucu kesintisi teslimatı durdurdu |
| UNDELIVERED_OTHER | Satın alma başka bir nedenle teslim edilmedi |
sampleContentProvided bir adalet sorusunu yanıtlar
sampleContentProvided bir Boolean'dır. Müşteriye satın almadan önce ücretsiz bir örnek, bir deneme ya da satın almanın ne yaptığına dair net bir bilgi verip vermediğinizi kaydeder. Buradaki bir true küçük bir adalet sinyalidir: müşterinin ne satın aldığını bilme şansı olmuştur. Kendi başına hiçbir şeye karar vermez, ama yalnızca üç zorunlu alandan biridir, bu yüzden Apple onu her yanıtta açıkça istiyor.
consumptionPercentage artık bir durum değil, bir sayı
En çok değişen alan budur. Eski yükte consumptionStatus vardı, dört basamaklı bir enum: UNDECLARED, NOT_CONSUMED, PARTIALLY_CONSUMED, FULLY_CONSUMED. Yeni yük onu consumptionPercentage ile değiştiriyor, milliunits cinsinden ölçülen bir tam sayı. 100,000 milliunits, öğenin tamamen tüketildiği anlamına gelir, yani 50,000 yarısı ve 0 dokunulmamıştır. Kesin bir sayı dört yönlü bir kovadan iyidir, çünkü bir müşterinin bir kredi paketinin yüzde 90'ını tükettiğini söylemenize izin verir, kısmen tüketilmiş olarak aşağı yuvarlamak yerine.
İnsanların takıldığı bir uyarı. Otomatik yenilenen abonelikler için Apple tüketimi geçen süreden kendisi hesaplar, bu yüzden consumptionPercentage tüketilebilir ve yenilenmeyen satın almalar için tasarlanmıştır. Uygulandığı yerde gönderin ve uygulanmadığı yerde Apple'ın türetmesine izin verin.

refundPreference bir karar değil, bir tercih belirtir
refundPreference isteğe bağlı bir string'dir ve Apple'a hangi sonucu tercih edeceğinizi bildirdiğiniz yerdir. O da biçim değiştirdi. Eski alan, prefer-grant, prefer-decline ve no-preference gibi değerlere sahip bir sayıydı. Yenisi, üç değeri olan adlandırılmış bir string'dir.
| Değer | Ne istediğiniz |
|---|---|
| GRANT_FULL | Apple'ın tam para iadesi vermesini tercih edersiniz |
| GRANT_PRORATED | Kullanılanı yansıtan kısmi bir iadeyi tercih edersiniz |
| DECLINE | Apple'ın para iadesini reddetmesini tercih edersiniz |
Apple neyi çıkardı ve bu neden önemli
Eski ConsumptionRequest'in on iki alanı vardı. Bunların yedisi gönderdiğiniz veriden gitti. accountTenure, lifetimeDollarsPurchased, lifetimeDollarsRefunded, playTime, userStatus, platform ve appAccountToken, yükün hesap profilleme yarısıydı; bir müşteriyi hesabının ne kadar eski olduğuna, ne kadar harcadığına, ne kadar iade aldığına ve uygulamayı ne kadar kullandığına göre kovalara ayırmanızı isteyen alanlardı.
Apple onları not almaya değer bir nedenle çıkardı. O alanlar geliştiricilerden müşterinin bir profilini teslim etmesini istiyordu ve çoğu geliştirici ya onları bildirmeden bıraktı ya da tahmin etti. Kalan beşi satın alma ve teslimat hakkındadır, kendi sistemlerinizden gerçekten doğrulayabileceğiniz gerçeklerdir. Kayma, müşterinin kim olduğundan bu belirli satın almada ne olduğuna doğrudur.
| Eski yük | Mevcut yük | |
|---|---|---|
| Toplam alan | 12 | 5 |
| Zorunlu alanlar | Fiilen hiçbiri zorunlu değildi | 3 |
| Tüketim sinyali | consumptionStatus, dört kova | consumptionPercentage, kesin milliunits |
| Para iadesi tercihi | Sayısal enum | Adlandırılmış string, 3 değer |
| Hesap profilleme | kıdem, ömür boyu harcama, iadeler, oynama süresi, durum | Kaldırıldı |
Uç nokta ve saat
Yükü, ihtilaflı satın almanın işlem kimliğiyle anahtarlanmış olarak Send Consumption Information uç noktasına bir HTTP PUT ile gönderirsiniz: PUT /inApps/v1/transactions/consumption/{transactionId}. Başarı 202 Accepted döndürür ve yanıt gövdesi boştur. O boş yanıt beklenendir, bir hata değil. Apple'ın verilerinizi kuyruğa aldığını doğrular ve daha sonra bir REFUND ya da REFUND_DECLINED bildirimi olarak gelen nihai sonuç hakkında size hiçbir şey söylemez.
Saat, uzatamayacağınız kısımdır. Apple size yanıt vermek için CONSUMPTION_REQUEST'ten itibaren 12 saat verir. Yalnızca ilk yanıtınız kullanılır, bu yüzden ilk yükün eksiksiz ve doğru olanı olması gerekir. Apple aynı satın alma için CONSUMPTION_REQUEST'i birden fazla kez gönderebilir, ama her birinin son tarihi sabittir ve manuel bir inceleme, saat dilimleri ve hafta sonları arasında 12 saate nadiren sığar.
Yanlış işlenmiş bir alan size neye mal olur
Para, iade gerçekleşmeden önce çoktan gitmişti
Tüketilebilir bir ürünün iadesi temiz bir geri alma değildir. Bir müşteri bir kredi paketi ya da bir grup AI üretimi için parasını geri istediğinde, siz onu teslim etmek için zaten harcamışsınızdır: her istekte GPU çıkarımı, jeton başına faturalandırılan üçüncü taraf model API çağrıları, ürettiğiniz her ne varsa onun için depolama ve bu kullanıma bağlı her türlü içerik üreticisi ya da iş ortağı ödemesi. Mağaza fiyatı müşteriye geri döner. Teslimat maliyetiniz size geri dönmez. Yani itiraz edebileceğiniz bir iade, başabaş bir olay değildir, hesaba hizmet etmek için ödediğiniz her şeyin net bir kaybıdır.
Beş alan, iki kez ödemekten kaçınma biçiminizdir
DELIVERED olarak ayarlanmış deliveryStatus ve yüksek bir consumptionPercentage, müşterinin ürünü aldığını ve kullandığını Apple'a bildiren iki gerçektir. Bunlar, hesaplamanın, API çağrılarının ve depolamanın hepsinin işini yaptığına dair kanıtınızdır. Yükü göndermeden bırakın ve Apple bunu asla duymaz. Müşterinin talebine göre karar verir, iadenin geçme olasılığı daha yüksektir ve siz hem geri alınan geliri hem de onun arkasındaki teslimat maliyetini yüklenirsiniz.
Ters ibrazlar daha kötü kapıdır ve sessizlik oraya işaret eder
Apple'ın para iadesi akışı üzerinden tatmin olamayan bir müşteri, yine de bankasıyla ödemeye itiraz edebilir. Bir kart ters ibrazı nihaidir, sabit bir itiraz ücreti taşır ve kararı Apple'ın ve sizin elinizden alır. CONSUMPTION_REQUEST'i iyi yanıtlamak, anlaşmazlığı söz sahibi olduğunuz Apple'ın sistemi içinde tutar. Onu görmezden gelmek, sınırdaki durumları hiç söz sahibi olmadığınız tek kanala doğru iter.
RefundHalt bunu nasıl ele alır
Beş alan, onları doğru şekilde, 12 saat içinde, her CONSUMPTION_REQUEST'te, doğru işleme anahtarlanmış olarak doldurmanız gerekene kadar basit görünür. RefundHalt bildirimi yakalar, o satın alma için kendi teslimat ve kullanım kayıtlarınızı okur ve pencere kapanmadan önce yükü otomatik olarak gönderir. deliveryStatus günlüklerinizin gerçekten gösterdiğini yansıtır, consumptionPercentage bir tahminden değil gerçek kullanımdan gelir ve refundPreference bir kez belirlediğiniz politikayı izler. İtiraz edilebilir iadenin kanıtla incelenmesini elde edersiniz, kaçırılan bir son tarihi ve sizsiz verilen bir kararı değil.
Sık sorulan sorular
- Apple Send Consumption Information'da artık kaç alan var?
- Beş. Üçü zorunlu, customerConsented, deliveryStatus ve sampleContentProvided, ve ikisi isteğe bağlı, consumptionPercentage ve refundPreference. Yükün önceki sürümünde on iki alan vardı ve Apple accountTenure, lifetimeDollarsPurchased ve userStatus gibi hesap profilleme alanlarını kaldırdı.
- Bir tüketim isteğinde deliveryStatus ne anlama gelir?
- deliveryStatus, uygulamanızın çalışan bir uygulama içi satın alma teslim edip etmediğini Apple'a bildirir. DELIVERED, ettiği anlamına gelir. Dört UNDELIVERED değeri, UNDELIVERED_QUALITY_ISSUE, UNDELIVERED_WRONG_ITEM, UNDELIVERED_SERVER_OUTAGE ve UNDELIVERED_OTHER, her biri belirtilen bir nedenle etmediğini söyler. Yükteki en güçlü sinyaldir, bu yüzden kendi günlüklerinizle eşleşmelidir.
- consumptionPercentage bir yüzde mi yoksa ham bir sayı mı?
- milliunits cinsinden ölçülen bir tam sayıdır, düz bir yüzde değil. 100,000 milliunits, müşterinin satın almayı tamamen tükettiği anlamına gelir, yani 50,000 yarısı ve 0 dokunulmamıştır. Yalnızca tüketilmemişten tamamen tüketilmişe dört kovası olan eski consumptionStatus enum'unun yerini aldı.
- refundPreference'ı DECLINE olarak ayarlamak para iadesini durdurur mu?
- Hayır. refundPreference tercih ettiğiniz sonucu belirtir, hiçbir şeye karar vermez. DECLINE, Apple'a iade etmemesini tercih ettiğinizi söyler ve GRANT_FULL ya da GRANT_PRORATED tersini söyler, ama Apple tercihinizi müşterinin geçmişiyle ve kendi politikasıyla tartar ve nihai kararı verir.
- Müşteri tüketim verilerini paylaşmaya onay vermediyse ne olur?
- O zaman yükü göndermemelisiniz. customerConsented zorunlu bir Boolean'dır ve Apple'ın yönlendirmesi şudur: müşteri tüketim verilerini paylaşmayı kabul etmediyse, CONSUMPTION_REQUEST'e hiç yanıt vermezsiniz. Onay, zaten elinizde bulunması gereken gerçek bir evet ya da hayırdır, davanıza yardımcı olmak için true'ya ayarladığınız bir değer değil.
- Tüketim bilgisini göndermek için ne kadar zamanım var?
- Apple CONSUMPTION_REQUEST bildirimini gönderdiğinden itibaren 12 saat. Send Consumption Information uç noktasına bir PUT ile yanıt verirsiniz ve başarı boş bir gövdeyle 202 Accepted döndürür. Yalnızca ilk yanıtınız kullanılır, bu yüzden ilk yükün eksiksiz olması gerekir ve manuel bir süreç pencereye nadiren sığar.
Kaynaklar ve ek okumalar
- Apple Developer: ConsumptionRequest
- Apple Developer: Send Consumption Information
- Apple Developer: Send Consumption Information V1
- Apple Developer: deliveryStatus
- Apple Developer: consumptionPercentage
- Apple Developer: refundPreference
- Apple Developer: Explore App Store server APIs for In-App Purchase (WWDC24)
RefundHalt
App Store ve Google Play için geri ödeme otomatik pilotu
Okumaya devam edin
Bir müşterinin tüm App Store iade geçmişini döndüren tek bir uç nokta var ve işte size verdiği şey
Apple'ın Get Refund History uç noktası, bir müşterinin tüm App Store iade geçmişini imzalı işlemler olarak döndürür. İşte her alan, revision belirtecinin sayfalamayı nasıl yaptığı, bunun neden uygulama başına değil müşteri başına olduğu ve kaçırdığınız bir iadenin size neye mal olduğu.
Uygulamanız uygulama içi bir iade talebi sayfası gösterebilir, işte müşteri gönder'e dokunduktan sonra Apple ne yapıyor
Apple'ın uygulama içi iade talebi, müşterinin uygulamanızdan çıkmadan, Apple'ın oluşturup incelediği bir sayfada iade istemesine olanak tanır. İşte beginRefundRequest'in döndürdükleri, sunucunuzda başlattığı CONSUMPTION_REQUEST ve 48 saat sayaçları ve bu düğmeyi yayınlamaya değip değmeyeceği.