Tutti gli articoli
Playbook8 min di lettura

Se la tua app usa ancora App Store Server Notifications V1, Apple non ti consulta mai sui rimborsi degli abbonamenti

Apple ha deprecato App Store Server Notifications V1 a giugno 2023, e questa versione non ha mai ricevuto il CONSUMPTION_REQUEST per gli abbonamenti, né REFUND_DECLINED né REFUND_REVERSED. Ecco cosa si perde un server V1, quanto costa e come passare a V2 senza perdere nessun rimborso.

Una vecchia cassetta della posta traboccante di lettere non aperte accanto a un moderno rack di server, a illustrare i segnali di rimborso persi con App Store Server Notifications V1

Punti chiave

  • Apple ha deprecato App Store Server Notifications V1 e l'endpoint verifyReceipt il 5 giugno 2023. Entrambi funzionano ancora, non ricevono nuove funzionalità e non hanno una data di dismissione annunciata.
  • La documentazione V1 di Apple elenca CONSUMPTION_REQUEST solo per gli acquisti in-app consumabili. Le richieste di consumo per gli abbonamenti con rinnovo automatico sono state aggiunte ad App Store Server Notifications V2 ad aprile 2024.
  • REFUND_DECLINED e REFUND_REVERSED esistono solo in App Store Server Notifications V2, quindi un server V1 non viene mai a sapere che Apple ha rifiutato un rimborso o lo ha annullato.
  • In V1, un rimborso di Apple per un abbonamento con rinnovo automatico arriva come CANCEL. In V2 arriva come REFUND, con revocationDate e revocationReason nella transazione firmata.
  • Apple ritenta una notifica V2 non riuscita cinque volte nell'arco di circa una settimana, a 1, 12, 24, 48 e 72 ore. Una notifica V1 non riuscita riceve tre tentativi, a 6, 24 e 48 ore, e non può essere recuperata tramite Get Notification History.
  • Dopo che un'app passa a V2 in App Store Connect, le nuove notifiche arrivano subito in formato V2, mentre le notifiche V1 già in fase di ritentativo possono continuare ad arrivare per circa 78 ore.

La versione 1 di App Store Server Notifications consegna ancora i rimborsi, ma esclude l'unica notifica che ti permette di far valere le tue ragioni su un rimborso di abbonamento. Apple ha deprecato V1 il 5 giugno 2023, insieme all'endpoint verifyReceipt, e da allora ha aggiunto ogni funzionalità legata ai rimborsi solo a V2. Se le impostazioni di App Store Connect indicano ancora Version 1, Apple può decidere un rimborso di abbonamento senza mai inviare un CONSUMPTION_REQUEST al tuo server. Non perdi una contestazione. Non vieni mai invitato a parteciparvi.

Cosa significa la deprecazione di App Store Server Notifications V1 da parte di Apple

Deprecato non significa spento. Un ingegnere di Apple ha scritto sui forum per sviluppatori a giugno 2023 che verifyReceipt e le notifiche V1 avrebbero continuato a funzionare fino all'annuncio di una data di dismissione, che quella data non era stata fissata e che gli sviluppatori sarebbero stati avvisati in anticipo. Più di tre anni dopo, App Store Connect offre ancora "Version 1 (deprecated)" come opzione quando imposti l'URL del server.

Ciò che la deprecazione significa davvero è un congelamento. Ogni modifica nel changelog delle notifiche di Apple da giugno 2023 riguarda V2: nuovi campi nella transazione firmata, nuovi tipi di notifica, i dati sull'impegno di 12 mesi aggiunti ad aprile 2026. Un server V1 non vede nulla di tutto questo.

Quali segnali di rimborso un server V1 non riceve mai

Ecco come gli stessi eventi di rimborso raggiungono un server V1 e un server V2, secondo la documentazione di Apple per ciascuna versione.

Evento di rimborsoVersion 1Version 2
Il cliente chiede ad Apple il rimborso di un consumabileCONSUMPTION_REQUESTCONSUMPTION_REQUEST
Il cliente chiede ad Apple il rimborso di un abbonamento con rinnovo automaticoNon presente nella documentazione V1CONSUMPTION_REQUEST, da aprile 2024
Apple rimborsa un abbonamento con rinnovo automaticoCANCELREFUND
Apple rimborsa un consumabile, un non consumabile o un abbonamento senza rinnovoREFUNDREFUND
Apple rifiuta un rimborso che il cliente ha avviato nella tua appNon disponibileREFUND_DECLINED
Apple annulla un rimborso già concessoNon disponibileREFUND_REVERSED
Recuperi le notifiche perse durante un disservizioNon disponibileGet Notification History

V1 riceve ancora CONSUMPTION_REQUEST?

Sì, per i consumabili. Il riferimento V1 di Apple descrive CONSUMPTION_REQUEST come la notifica inviata quando un cliente avvia una richiesta di rimborso per un acquisto in-app consumabile. Un ingegnere di Apple ha confermato sui forum nel 2023 che le richieste di consumo V1 vengono inviate per i rimborsi idonei. La lacuna riguarda gli abbonamenti. Il changelog di Apple data le richieste di consumo per gli abbonamenti all'11 aprile 2024, in V2, e la documentazione di Send Consumption Information indica che Apple invia la richiesta tramite il tuo endpoint V2.

Perché CANCEL in V1 è facile da fraintendere

In V1, quando Apple rimborsa un abbonamento, il tipo di notifica è CANCEL, spesso accompagnato da DID_CHANGE_RENEWAL_STATUS. Molti server trattano qualsiasi cancellazione come un cliente che disattiva il rinnovo automatico, lasciando l'accesso attivo fino alla fine del periodo. V2 elimina l'ambiguità. Un rimborso arriva come REFUND, e un cliente che disattiva il rinnovo arriva come DID_CHANGE_RENEWAL_STATUS con il sottotipo AUTO_RENEW_DISABLED.

Quanto costa, in denaro, restare su V1

Apple decide ogni rimborso dell'App Store. Il CONSUMPTION_REQUEST è l'unico momento in cui i tuoi dati di utilizzo raggiungono quella decisione, e Apple ti chiede di rispondere entro 12 ore. In V1, i rimborsi degli abbonamenti saltano questo passaggio.

Ecco un esempio con numeri indicativi. Supponiamo che la tua app venda un abbonamento mensile da $9.99 che include generazioni di immagini con IA. Un abbonato esegue 400 generazioni in un mese, e ognuna ti costa denaro reale in inferenza del modello. Poi chiede un rimborso ad Apple.

Voce di costoServer V1Server V2
La tua quota del pagamentoRestituita se Apple approvaRestituita se Apple approva
Calcolo, chiamate API e storage usati quel meseGià pagati, non recuperabiliGià pagati, non recuperabili
Possibilità di mostrare ad Apple le 400 generazioniNessunaUn CONSUMPTION_REQUEST, 12 ore
Sapere che Apple ha rifiutato il rimborsoMaiREFUND_DECLINED
Sapere che un rimborso è stato annullatoMaiREFUND_REVERSED

Il pagamento che perdi è la tua quota, non il prezzo di listino. Apple versa il 70% del prezzo di un abbonamento, al netto delle imposte applicabili, durante il primo anno di servizio a pagamento di un abbonato, e l'85% dopo quel periodo o per i membri dell'App Store Small Business Program. La bolletta del calcolo non si riduce di conseguenza. Inferenza, chiamate ad API di terze parti e storage dei file sono stati pagati quando il cliente li ha usati.

Anche le due notifiche di esito mancanti costano denaro. Senza REFUND_REVERSED, un server che ha revocato l'accesso a seguito di un rimborso non lo ripristina mai quando Apple annulla il rimborso, così un cliente pagante resta bloccato e scrive all'assistenza. Senza REFUND_DECLINED, non puoi distinguere un rimborso ancora in sospeso da uno che Apple ha rifiutato.

Le mani di uno sviluppatore che spostano un cavo di rete da una vecchia porta di un patch panel a una nuova, accanto a un portatile aperto

Come migrare da V1 a V2 senza perdere nessun rimborso

Passare a V2 richiede una modifica al server più un'impostazione. Le indicazioni di Apple stessa sui forum, fornite da un App Store Commerce Engineer a dicembre 2025, spiegano cosa succede il giorno del passaggio.

Crea l'endpoint V2 prima di cambiare l'impostazione

  • Accetta un POST il cui corpo contiene un signedPayload. I payload V2 sono JWS firmati da Apple, quindi verifica la firma prima di fidarti di qualsiasi contenuto. L'App Store Server Library di Apple lo fa per te.
  • Sposta la gestione di CANCEL su REFUND, e gestisci REFUND_DECLINED e REFUND_REVERSED come nuovi casi.
  • Rispondi al CONSUMPTION_REQUEST degli abbonamenti con Send Consumption Information, e solo quando il cliente ha acconsentito alla condivisione dei dati con Apple. Apple specifica che senza consenso non devi rispondere.
  • Restituisci HTTP da 200 a 206 in caso di successo. Qualsiasi 40x o 50x fa sì che Apple ritenti.

Cambia l'impostazione in App Store Connect

In App Store Connect, apri la tua app, scegli App Information sotto General, individua App Store Server Notifications e imposta la Production Server URL sul tuo endpoint V2 con Version 2 selezionata. Fai prima lo stesso con l'URL di sandbox se vuoi testare, e usa Request a Test Notification per verificare che il tuo server risponda.

Mantieni attivo il gestore V1 per circa tre giorni

Dopo il passaggio, le nuove notifiche arrivano subito in formato V2, per tutti gli abbonamenti, vecchi o nuovi. Le notifiche V1 già in fase di ritentativo continuano ad arrivare in formato V1 finché non vanno a buon fine o esauriscono i tentativi. Apple colloca l'ultimo tentativo V1 possibile a circa 78 ore, cioè 6 più 24 più 48. Lascia in funzione il vecchio gestore oltre questo intervallo, poi rimuovilo.

Già che ci sei, sostituisci verifyReceipt

verifyReceipt è stato deprecato lo stesso giorno. Risponde ancora, ma Apple indirizza i server verso l'App Store Server API. Get Transaction Info restituisce una transazione firmata, Get Transaction History restituisce lo storico di un cliente e Get Refund History elenca tutti gli acquisti rimborsati di un cliente. Insieme alle notifiche V2, coprono ciò per cui la maggior parte dei server usava le ricevute, compreso il campo cancellation_date che un tempo segnalava un rimborso in una ricevuta.

RefundHalt si collega ad App Store Server Notifications V2 e risponde a ogni CONSUMPTION_REQUEST entro la finestra di 12 ore, usando i dati di utilizzo che la tua app registra già. Se sei ancora su V1, il passaggio è il primo requisito per rendere possibile tutto questo.

Domande frequenti

App Store Server Notifications V1 verrà dismesso?
Non ancora. Apple ha deprecato V1 e verifyReceipt il 5 giugno 2023, ed entrambi funzionano ancora. Apple ha dichiarato che non esiste ancora una data di dismissione e che gli sviluppatori saranno avvisati in anticipo. Nel frattempo V1 non riceve nuove funzionalità.
Ricevo notifiche CONSUMPTION_REQUEST in V1?
Solo per i consumabili, secondo la documentazione V1 di Apple. Le richieste di consumo per gli abbonamenti con rinnovo automatico sono state aggiunte a V2 ad aprile 2024, e Apple le invia tramite il tuo endpoint V2. Se vendi abbonamenti e resti su V1, non puoi rispondere a queste richieste di rimborso.
Come appare un rimborso di abbonamento in V1 rispetto a V2?
In V1 arriva come CANCEL, spesso con DID_CHANGE_RENEWAL_STATUS. In V2 arriva come REFUND, con revocationDate e revocationReason nella transazione firmata. V2 invia anche REFUND_DECLINED quando Apple rifiuta un rimborso avviato nella tua app e REFUND_REVERSED quando Apple annulla un rimborso che aveva concesso.
Cosa succede alle notifiche quando passo da V1 a V2?
Le nuove notifiche arrivano in formato V2 poco dopo il passaggio, per tutti gli abbonamenti. Le notifiche V1 già in fase di ritentativo continuano ad arrivare in formato V1 finché non vanno a buon fine o esauriscono i tentativi, cosa che secondo Apple avviene circa 78 ore dopo il passaggio. Mantieni attivi entrambi i gestori per tutto questo periodo.
Posso tornare a V1 dopo essere passato a V2?
Sì, tramite l'endpoint Modify an App dell'App Store Connect API, come descritto nella nota tecnica TN3180 di Apple. Apple lo definisce un caso insolito e continua a considerare V1 deprecato, quindi tornare indietro significa rinunciare alle richieste di consumo degli abbonamenti e alle notifiche di rimborso più recenti.

Fonti e approfondimenti

RefundHalt

Il pilota automatico dei rimborsi per App Store e Google Play

Continua a leggere

La prossima richiesta di rimborso è già in arrivo.

Configura RefundHalt nel tempo che impiegheresti a leggere un'altra e-mail dell'assistenza su un rimborso che non sei riuscito a contestare.