Tüm makaleler
Deep dive7 dk okuma

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.

Çoğu sayfası koparılmış ince bir kağıt form yığınının yanında bir akıllı telefon, Apple'ın Send Consumption Information yükünün on iki alandan beşe indirilmesini gösteriyor

Ö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ı.

AlanZorunluTürNe taşır
customerConsentedEvetBooleanMüşterinin tüketim verilerini Apple ile paylaşmayı kabul edip etmediği
deliveryStatusEvetStringUygulamanızın çalışan bir ürün teslim edip etmediği
sampleContentProvidedEvetBooleanSatın almadan önce ücretsiz bir örnek veya deneme sunup sunmadığınız
consumptionPercentageHayırIntegerSatın almanın ne kadarının tüketildiği, milliunits cinsinden
refundPreferenceHayırStringPara 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ğerApple'a ne bildirir
DELIVEREDUygulama çalışan bir uygulama içi satın alma teslim etti
UNDELIVERED_QUALITY_ISSUESatın alma bir kalite sorunu nedeniyle teslim edilmedi
UNDELIVERED_WRONG_ITEMMüşteri yanlış ürünü aldı
UNDELIVERED_SERVER_OUTAGEBir sunucu kesintisi teslimatı durdurdu
UNDELIVERED_OTHERSatı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.

Yaklaşık üçte ikisi dolu dairesel bir ilerleme halkası gösteren bir akıllı telefon, milliunits cinsinden ölçülen ve 100,000'in tamamen tüketildiği anlamına geldiği consumptionPercentage'ı gösteriyor

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ğerNe istediğiniz
GRANT_FULLApple'ın tam para iadesi vermesini tercih edersiniz
GRANT_PRORATEDKullanılanı yansıtan kısmi bir iadeyi tercih edersiniz
DECLINEApple'ı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ükMevcut yük
Toplam alan125
Zorunlu alanlarFiilen hiçbiri zorunlu değildi3
Tüketim sinyaliconsumptionStatus, dört kovaconsumptionPercentage, kesin milliunits
Para iadesi tercihiSayısal enumAdlandırılmış string, 3 değer
Hesap profillemekıdem, ömür boyu harcama, iadeler, oynama süresi, durumKaldı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

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.