Jede Apple-Rückerstattungsanfrage kommt jetzt mit einem Grund, und consumptionRequestReason ist die Art, ihn zu lesen
Seit WWDC24 trägt jede Apple CONSUMPTION_REQUEST einen consumptionRequestReason, den vom Kunden selbst angegebenen Grund für die gewünschte Rückerstattung. Es gibt fünf Werte, von UNINTENDED_PURCHASE bis LEGAL, und jeder sollte verändern, was Sie innerhalb Ihres 12-Stunden-Fensters zurücksenden. So lesen Sie jeden einzelnen.

Wichtigste Erkenntnisse
- Seit App Store Server Notifications Version 2.11, angekündigt auf der WWDC24, enthält jede CONSUMPTION_REQUEST-Benachrichtigung consumptionRequestReason, eine Zeichenfolge, die angibt, warum der Kunde die Rückerstattung verlangt hat.
- Es gibt genau fünf Werte: UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL und OTHER. Apple sendet einen pro Anfrage.
- Der Grund entscheidet nicht über die Rückerstattung. Er ist der Kontext, mit dem Sie Ihre refundPreference und Ihre Verbrauchsdaten wählen, bevor sich das 12-Stunden-Fenster schließt.
- CONSUMPTION_REQUEST wird nun auch für automatisch verlängerbare Abonnements ausgelöst, nicht nur für Verbrauchsgüter, sodass consumptionRequestReason weit mehr Ihrer Rückerstattungen erreicht als vor der WWDC24.
- Ein FULFILLMENT_ISSUE-Grund ist ein Signal, dass Ihre eigene Auslieferung möglicherweise fehlgeschlagen ist. Ihn anzufechten verbrennt das Fenster und lädt später eine Rückbuchung ein. Ihn zu gewähren ist meist die günstigere Antwort.
- Sie antworten, indem Sie innerhalb von 12 Stunden Send Consumption Information aufrufen, mit customerConsented auf true und einer refundPreference von GRANT_FULL, GRANT_PRORATED oder DECLINE. Apple behandelt Ihre Präferenz als eine Eingabe, nicht als Befehl.
- Eine Rückerstattung kostet Sie weiterhin die Rechenleistung, API-Aufrufe, den Speicher und die Auszahlungen, die der Kauf bereits verbraucht hat. Das Grund-Feld ist die Art, wie Sie Ihre Verteidigung nur auf die Fälle verwenden, die es wert sind, verteidigt zu werden.
Apple hat geändert, wie Rückerstattungsanfragen auf Ihrem Server eintreffen, und viele Entwickler haben es nie bemerkt. Seit dem Update App Store Server Notifications 2.11, angekündigt auf der WWDC24, trägt jede CONSUMPTION_REQUEST-Benachrichtigung ein Feld namens consumptionRequestReason. Es ist der vom Kunden selbst angegebene Grund, sein Geld zurückzuverlangen. Eine schlichte Zeichenfolge, fünf mögliche Werte, geliefert in derselben Nutzlast, die Sie ohnehin zwölf Stunden Zeit haben zu beantworten.
Der Apple-Rückerstattungsgrund entscheidet für sich genommen nichts. Was er tut, ist Ihnen zu sagen, in welcher von fünf sehr unterschiedlichen Situationen Sie sich befinden, damit Sie aufhören, dieselben generischen Verbrauchsdaten an eine Rückerstattung zu senden, die Sie gewähren sollten, und an eine, die Sie anfechten sollten. Hier steht, was das Feld ist, die genauen Werte, die Apple senden kann, was jeder signalisiert und wie er die Präferenz und die Nachweise verändern sollte, die Sie zurücksenden.
Was consumptionRequestReason tatsächlich ist
consumptionRequestReason ist ein Zeichenfolgenfeld im data-Objekt einer CONSUMPTION_REQUEST-Benachrichtigung. Apple hat es in App Store Server Notifications Version 2.11 hinzugefügt, zusammen mit den WWDC24-Änderungen am Rückerstattungsablauf. Zuvor traf die Anfrage mit der signierten Transaktion ein und ohne jeden Hinweis auf das Motiv. Sie antworteten blind. Nun reist der vom Kunden angegebene Grund mit der Anfrage mit.
Lesen Sie das Wort angegeben genau. Dies ist der Grund, den der Kunde auswählte, als er die Anfrage bei Apple einreichte, keine von Apple überprüfte Tatsache. UNINTENDED_PURCHASE beweist nicht, dass der Kauf ungenutzt blieb, und UNSATISFIED_WITH_PURCHASE beweist nicht, dass das Produkt defekt war. Der Wert ist eine Linse, kein Urteil. Sie kombinieren ihn weiterhin mit Ihren eigenen Auslieferungs- und Nutzungsaufzeichnungen.
Er reist in der Benachrichtigung mit, die Sie ohnehin verarbeiten
CONSUMPTION_REQUEST ist der eine Apple-Ablauf, der den Entwickler überhaupt um Nachweise bittet. Sein Gegenstück bei Google Play ist die Rückbuchungsprüfung über orders.reviewrefund. Wenn eine eintrifft, haben Sie 12 Stunden, um zu antworten, indem Sie Send Consumption Information aufrufen, ein PUT an den Verbrauchsendpunkt der Transaktion. consumptionRequestReason ist jetzt Teil derselben Benachrichtigung, es gibt also nichts Neues zu abonnieren. Wenn Sie CONSUMPTION_REQUEST bereits verarbeiten, ist der Grund ein Feld, das Sie wahrscheinlich ignoriert haben.
Die fünf Gründe, und was jeder Ihnen sagt
Apple dokumentiert genau fünf Werte. Einer trifft pro Anfrage ein. Hier ist die vollständige Menge und wie man jeden in der Praxis liest.
| Wert | Was der Kunde angegeben hat | Was es meist für Sie bedeutet |
|---|---|---|
| UNINTENDED_PURCHASE | Er wollte es nicht kaufen | Oft ein versehentlicher oder familiärer Tipp. Prüfen Sie Auslieferung und Verbrauch, bevor Sie entscheiden. |
| FULFILLMENT_ISSUE | Er konnte es nicht erhalten oder nutzen | Verweist zurück auf Ihre eigene Auslieferung. Prüfen Sie Ihre Protokolle, bevor Sie anfechten. |
| UNSATISFIED_WITH_PURCHASE | Er war nicht zufrieden damit | Kaufreue. Ihre Verbrauchsnachweise haben hier das meiste Gewicht. |
| LEGAL | Er nannte einen rechtlichen Grund | Behandeln Sie es als Gewährung. Eine rechtliche Anfrage anzufechten ist das Fenster nicht wert. |
| OTHER | Jeder oben nicht aufgeführte Grund | Für sich genommen kein Signal. Greifen Sie auf Ihre Auslieferungs- und Nutzungsdaten zurück. |
UNINTENDED_PURCHASE ist der Behälter für versehentliche Tipps
Dies ist der Grund, den ein Elternteil auswählt, nachdem ein Kind 10,000 Münzen gekauft hat, oder ein Erwachsener, der eine Bestätigung falsch angetippt hat. Er korreliert mit Käufen, die nie geöffnet oder genutzt wurden. Genau deshalb zählen Ihre eigenen Daten. Wenn Ihre Aufzeichnungen zeigen, dass das Verbrauchsgut vollständig ausgeliefert und stark verbraucht wurde, passen ein Anspruch wegen unbeabsichtigten Kaufs und ein vollständig aufgebrauchtes Guthaben nicht zusammen, und diese Lücke ist es wert, über consumptionPercentage gemeldet zu werden.
FULFILLMENT_ISSUE verweist zurück auf Sie
FULFILLMENT_ISSUE ist der eine Grund, der zum Teil um Ihre App geht, nicht um den Kunden. Er bedeutet, dass der Kunde sagt, er konnte nicht erhalten oder nutzen, wofür er bezahlt hat. Bevor Sie reflexartig anfechten, ziehen Sie Ihre Auslieferungsprotokolle heran. Wenn Ihr eigener Server zeigt, dass die Berechtigung nie aktiviert wurde oder die Guthaben nie gebucht wurden, hat der Kunde recht, und DECLINE ist die falsche Präferenz. Ein echtes Auslieferungsversagen zu bekämpfen verschwendet das Fenster und kann den Kunden zu seiner Bank treiben, wo eine Rückbuchung mehr kostet, als die Rückerstattung es getan hätte.
UNSATISFIED_WITH_PURCHASE ist, wo Nachweise entscheiden
Dies ist gewöhnliche Kaufreue, und es ist der Grund, bei dem Ihre Verbrauchsdaten am meisten leisten. Das Produkt funktionierte. Der Kunde nutzte einen Teil oder alles davon und will jetzt sein Geld zurück. Eine hohe consumptionPercentage, ein ehrlicher deliveryStatus von DELIVERED und eine refundPreference von DECLINE oder GRANT_PRORATED sind der Fall, den Apple Sie aufbauen lässt. Senden Sie die Zahlen, kein Argument.
LEGAL und OTHER
LEGAL bedeutet, dass der Kunde ein rechtliches oder regulatorisches Recht geltend gemacht hat. Vernünftige Menschen sind uneins, aber in der Regel ist dies nicht das Fenster, um zu prozessieren. Gewähren Sie es und machen Sie weiter. OTHER ist der Sammelbegriff, den Apple verwendet, wenn der angegebene Grund keinem der vier obigen entspricht. Er trägt für sich genommen kein Signal, behandeln Sie ein OTHER also genau wie eine Anfrage ganz ohne Grund: Führen Sie mit Ihrem Auslieferungsstatus und Ihren Nutzungsnachweisen an.

Wie der Grund Ihre Antwort verändert, Feld für Feld
Sie antworten auf eine CONSUMPTION_REQUEST, indem Sie Send Consumption Information mit einem ConsumptionRequest-Body aufrufen. Der Grund sollte drei Felder in diesem Body formen.
customerConsented muss true sein
Apple akzeptiert die Übermittlung nur, wenn customerConsented true ist, was bedeutet, dass der Kunde zugestimmt hat, Verbrauchsdaten zu teilen. Wenn Sie diese Zustimmung nicht haben, können Sie überhaupt keine Daten senden, unabhängig vom Grund. Keine Zustimmung, kein Nachweis, und die Anfrage wird ohne Ihre Zahlen entschieden.
deliveryStatus und consumptionPercentage tragen die Fakten
deliveryStatus sagt, ob Sie einen funktionierenden Kauf ausgeliefert haben. Ist er etwas anderes als DELIVERED, verlangt Apple, dass consumptionPercentage 0 ist. Wenn Sie ausgeliefert haben, ist consumptionPercentage eine ganze Zahl in milliunits von 0 bis 100,000, wobei 100,000 bedeutet, dass der Kunde den gesamten Kauf genutzt hat. Dieses Paar ist Ihr faktischer Kern, und es sollte einen FULFILLMENT_ISSUE- oder einen UNSATISFIED_WITH_PURCHASE-Fall tragen, nicht der Grund selbst.
refundPreference ist Ihr einziger Hebel
refundPreference ist, wo Sie angeben, was Sie wollen. Apple dokumentiert drei Werte: GRANT_FULL, GRANT_PRORATED und DECLINE. Lesen Sie den Grund, wägen Sie ihn gegen Ihre Daten ab, und wählen Sie dann. FULFILLMENT_ISSUE mit einer fehlgeschlagenen Auslieferung in Ihren Protokollen neigt zu GRANT_FULL. UNSATISFIED_WITH_PURCHASE bei einem vollständig verbrauchten Produkt neigt zu DECLINE oder GRANT_PRORATED. LEGAL neigt zu GRANT_FULL.
Was eine Rückerstattung Sie tatsächlich kostet
Das Grund-Feld zählt, weil eine Rückerstattung selten nur der Verkauf ist, der aus Ihrem Buch verschwindet. Für ein Verbrauchsgut, das bereits gelaufen ist, haben Sie für die Erfüllung bezahlt. Ein Guthabenpaket, das eine kostenpflichtige Inferenz-API aufrief, ein Stapel generierter Bilder, der GPU-Zeit verbrannte, ein gespeicherter Export, der auf Ihrer Speicherrechnung liegt, eine Creator-Auszahlung, die Sie bereits gesendet haben: diese Kosten bleiben aufgewendet, wenn der Kauf rückgängig gemacht wird. Der Store gibt dem Kunden sein Geld zurück. Er gibt Ihnen Ihre Rechenleistung nicht zurück.
Deshalb lohnt es sich, den Grund zu lesen. Nehmen wir an, ein Kunde kaufte 5,000 Guthaben, die jeweils einen kostenpflichtigen API-Aufruf auslösen, verbrauchte 4,000 davon und reichte dann unter UNSATISFIED_WITH_PURCHASE ein. Ihr deliveryStatus ist DELIVERED, Ihre consumptionPercentage ist 80,000 milliunits, und eine DECLINE- oder GRANT_PRORATED-Präferenz ist der Unterschied zwischen dem Schlucken der API-Rechnung und dem Rückgewinnen des Großteils. Nun drehen Sie den Grund auf FULFILLMENT_ISSUE mit Protokollen, die zeigen, dass die Guthaben nie gebucht wurden, und der ehrliche, günstigere Zug ist GRANT_FULL, bevor der Kunde zu seiner Bank eskaliert.
Den Grund lesen, ohne überzureagieren
Die Falle besteht darin, den Grund als Beweis zu behandeln. UNINTENDED_PURCHASE ist kein Geständnis, dass das Produkt ungenutzt blieb, und LEGAL ist nicht immer ein echter rechtlicher Anspruch. Der Grund grenzt die Situation ein. Ihre Auslieferungsprotokolle und Verbrauchsaufzeichnungen lösen sie auf. Wenn sie mit dem Kunden übereinstimmen, gewähren Sie früh und günstig. Wenn sie dem Kunden widersprechen, ist dieser Widerspruch, ausgedrückt als deliveryStatus und consumptionPercentage, das Stärkste, was Sie senden können. RefundHalt liest consumptionRequestReason bei jeder CONSUMPTION_REQUEST und kombiniert ihn automatisch mit Ihren echten Nutzungsdaten, sodass jeder Grund innerhalb des 12-Stunden-Fensters die Antwort erhält, die er verdient.
Die Änderung ist klein und leicht zu übersehen, aber sie hat das Rückerstattungsgespräch zu Ihren Gunsten verschoben. Apple sagt Ihnen jetzt warum, bevor Sie antworten. Nutzen Sie es.
Häufig gestellte Fragen
- Was ist consumptionRequestReason?
- consumptionRequestReason ist ein Zeichenfolgenfeld, das Apple in jede CONSUMPTION_REQUEST-Benachrichtigung aufnimmt, hinzugefügt in App Store Server Notifications Version 2.11 auf der WWDC24. Es gibt den vom Kunden selbst angegebenen Grund für die Rückerstattungsanfrage an und liefert Ihnen Kontext, bevor Sie innerhalb des 12-Stunden-Fensters mit Verbrauchsdaten antworten.
- Welche möglichen Werte hat consumptionRequestReason?
- Es gibt fünf: UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL und OTHER. Apple sendet genau einen pro Rückerstattungsanfrage. Jeder verweist auf eine andere Situation, von einem versehentlichen Tipp bis zu einem angegebenen rechtlichen Grund, und jeder sollte die refundPreference und die Verbrauchsdaten formen, die Sie zurücksenden.
- Entscheidet der Rückerstattungsgrund, ob ich das Geld behalte?
- Nein. consumptionRequestReason ist Kontext, kein Urteil. Apple entscheidet weiterhin über die Rückerstattung und wägt Ihre refundPreference, Ihren deliveryStatus und Ihre consumptionPercentage sowie die Historie des Kunden ab. Der Grund sagt Ihnen, welchen Fall Sie aufbauen. Ihre Auslieferungs- und Nutzungsdaten sind das, was ihn aufbaut.
- Wie lange habe ich Zeit, auf eine CONSUMPTION_REQUEST zu antworten?
- Sie haben 12 Stunden ab dem Erhalt der CONSUMPTION_REQUEST-Benachrichtigung, um Send Consumption Information aufzurufen. Der Aufruf muss customerConsented auf true setzen, sonst weist Apple ihn zurück. Verpassen Sie das Fenster, wird die Rückerstattung ohne eines Ihrer Daten entschieden.
- Erscheint consumptionRequestReason bei Abo-Rückerstattungen?
- Ja. Dasselbe WWDC24-Update, das consumptionRequestReason hinzufügte, begann auch, CONSUMPTION_REQUEST für automatisch verlängerbare Abonnements zu senden, nicht nur für Verbrauchsgüter. Für die meisten Apps bedeutet das, dass das Grund-Feld nun die finanziell wichtigsten Rückerstattungen erreicht.
Quellen und weiterführende Informationen
RefundHalt
Der Rückerstattungs-Autopilot für App Store und Google Play
Weiterlesen
Die Chargeback-Prüfung von Google Play gibt dir 24 Stunden zum Kontern, das solltest du senden
Wenn eine Bank eine Google-Play-Zahlung zurückbucht, sendet Google eine PendingRefundReviewNotification an deinen Server und startet eine 24-Stunden-Uhr. Beantworte sie über die ReviewRefund API mit einer Erstattungspräferenz und echten Verbrauchsnachweisen, sonst wird der Streitfall ohne dich entschieden. Hier ist der gesamte Ablauf, Feld für Feld.
Hänge an jeden App-Store-Kauf einen appAccountToken, sonst kannst du die Rückerstattung nicht abwehren
Apple schickt deinem Server einen CONSUMPTION_REQUEST, wenn ein Kunde eine Rückerstattung verlangt, aber die Transaktion sagt nie, wer das ist. appAccountToken ist die UUID, die einen Kauf mit deinem Nutzer verknüpft. Setze ihn, und du kannst Apple mit echten Daten antworten. Lass ihn weg, und du rätst.