Tutti gli articoli
Guida pratica9 min di lettura

Perdere le notifiche di rimborso può costarti gli unici rimborsi che puoi contestare, ed entrambi gli store ti permettono di recuperarle se controlli in tempo

Quando il tuo server perde una notifica di rimborso, le due procedure che chiedono le tue prove si chiudono senza di te. Ecco come Apple e Google Play ritentano l'invio, fin dove puoi recuperare le notifiche di rimborso perse e dove sono i punti scoperti.

Un rack di server di notte con una spia di avviso ambra tra spie verdi fisse e un portatile su un carrello in primo piano, il tipo di guasto silenzioso dietro le notifiche di rimborso perse

Punti chiave

  • Apple ritenta cinque volte una consegna fallita delle App Store Server Notifications V2, a 1, 12, 24, 48 e 72 ore dal tentativo precedente, quindi il secondo nuovo tentativo arriva circa 13 ore dopo il primo invio.
  • Apple chiede agli sviluppatori di rispondere a un CONSUMPTION_REQUEST entro 12 ore dalla ricezione, quindi un server che perde la prima consegna e il nuovo tentativo dopo un'ora può vedere la richiesta solo quando quella finestra è probabilmente già chiusa.
  • L'endpoint Get Notification History di Apple restituisce le notifiche V2 degli ultimi 180 giorni in produzione, 20 record per pagina, e l'opzione onlyFailures limita i risultati alle notifiche mai arrivate al tuo server, più quelle ancora in fase di nuovo tentativo.
  • Google Play consegna le revisioni dei chargeback solo tramite una PendingRefundReviewNotification, e il pendingRefundToken necessario per chiamare orders.reviewrefund entro 24 ore arriva in quella notifica. Google non documenta nessuna API separata che elenchi le revisioni in sospeso.
  • Google Cloud Pub/Sub conserva i messaggi non confermati per 7 giorni di default, con un massimo di 31 giorni, ed elimina una sottoscrizione dopo 31 giorni senza attività dei sottoscrittori, a meno che tu non ne modifichi il periodo di scadenza.
  • La Voided Purchases API di Google Play recupera rimborsi, revoche e chargeback degli ultimi 30 giorni, con una quota di 6.000 query al giorno e 30 query in qualsiasi periodo di 30 secondi, ma non può recuperare una revisione di chargeback a cui non hai mai risposto.
  • Il sandbox di Apple invia ogni notifica una sola volta, senza nuovi tentativi, quindi una procedura di recupero eseguita solo in sandbox non è mai stata messa alla prova con il vero calendario dei nuovi tentativi di Apple.

Perdere le notifiche di rimborso è il modo silenzioso in cui uno sviluppatore perde le uniche due decisioni di rimborso in cui ha voce in capitolo. Il CONSUMPTION_REQUEST di Apple e la revisione dei chargeback di Google Play iniziano entrambi con una notifica, ed entrambi si chiudono con una scadenza breve: 12 ore su Apple, 24 ore su Google. Se il tuo server è giù, lento o configurato male quando arriva quel messaggio, lo store non ti aspetta. Decide con quello che ha già.

La buona notizia è che nessuno dei due store butta via il messaggio al primo errore. Apple ritenta e conserva una cronologia di 180 giorni che puoi interrogare. Google pubblica tramite Pub/Sub, che conserva per giorni i messaggi non confermati. La cattiva notizia è che i tempi dei nuovi tentativi non coincidono con le finestre di risposta, e una delle due procedure non ha alcuna API di recupero.

Come ogni store consegna le notifiche di rimborso

Apple invia le App Store Server Notifications direttamente a un URL HTTPS che imposti in App Store Connect. Google non chiama direttamente il tuo server. Pubblica le notifiche in tempo reale per sviluppatori (Real-time developer notifications) su un topic di Google Cloud Pub/Sub, e la tua sottoscrizione a quel topic le invia al tuo endpoint oppure aspetta che sia il tuo server a prelevarle.

DomandaApp StoreGoogle Play
Canale di consegnaHTTPS POST al tuo URLTopic Cloud Pub/Sub, push o pull
Cosa conta come successoHTTP da 200 a 206Confermare il messaggio Pub/Sub, o un codice di successo su un endpoint push
Nuovi tentativi5 per V2, a 1, 12, 24, 48 e 72 ore dal tentativo precedentePub/Sub riconsegna fino alla conferma o alla fine del periodo di conservazione
Quanto sopravvive un messaggio perso180 giorni in Get Notification History7 giorni di default nella sottoscrizione, fino a 31 giorni
Rimborso che chiede le tue proveCONSUMPTION_REQUEST, risposta entro 12 orePendingRefundReviewNotification, risposta entro 24 ore
Backup in pull per i rimborsi concessiGet Notification History, Get Refund HistoryVoided Purchases API, ultimi 30 giorni
Comportamento in sandbox o testUn tentativo, nessun nuovo tentativoSend Test Message da Play Console

Cosa Apple considera un errore

La documentazione di Apple è precisa. Restituisci uno stato da 200 a 206 e la consegna è conclusa. Restituisci un 40x o un 50x e Apple ritenta. Apple considera non riuscito anche qualsiasi altro codice. Ogni tentativo viene registrato con un sendAttemptResult, e i valori sembrano un elenco di guasti reali: TIMED_OUT, TLS_ISSUE, CIRCULAR_REDIRECT, NO_RESPONSE, PREMATURE_CLOSE, UNSUCCESSFUL_HTTP_RESPONSE_CODE e pochi altri. Per TIMED_OUT, il consiglio di Apple stessa è verificare che il tuo server non elabori i messaggi in modo sincrono.

Cosa Google considera un errore

In una sottoscrizione push, un codice di risposta di successo dal tuo endpoint vale come conferma. In una sottoscrizione pull, il tuo server deve confermare ogni messaggio che preleva, altrimenti Pub/Sub lo consegna di nuovo. La scadenza di conferma predefinita è di 10 secondi e il massimo è di 600 secondi. La guida RTDN di Google aggiunge una regola che vale la pena ripetere: una notifica dice solo che qualcosa è cambiato, quindi devi comunque chiamare la Google Play Developer API per ottenere lo stato completo dell'acquisto.

Perché il calendario dei nuovi tentativi di Apple non sta nella finestra di 12 ore

Gli intervalli dei nuovi tentativi di Apple si misurano dal tentativo precedente, non dal primo. Sommandoli ottieni questa sequenza per una singola notifica V2 che il tuo server continua a non ricevere.

TentativoAttesa dopo il tentativo precedenteOre dal primo tentativo
Prima consegnaNessuna0
Nuovo tentativo 11 ora1
Nuovo tentativo 212 ore13
Nuovo tentativo 324 ore37
Nuovo tentativo 448 ore85
Nuovo tentativo 572 ore157

Apple ti chiede di rispondere entro 12 ore dalla ricezione del CONSUMPTION_REQUEST. Se il tuo server è giù alla prima consegna e al nuovo tentativo un'ora dopo, il tentativo successivo arriva 13 ore dopo il primo. Apple non dice se una richiesta ricevuta per la prima volta durante un nuovo tentativo ottiene 12 ore nuove. La lettura prudente è considerare il primo tentativo come inizio del conteggio, il che significa che i soli nuovi tentativi non salveranno una richiesta persa per più di un'ora.

Apple ritenta dopo un HTTP 400?

Sì, secondo la documentazione. Apple indica 40x e 50x come i codici che attivano un nuovo tentativo. A marzo 2026 uno sviluppatore ha segnalato sui forum di Apple che i nuovi tentativi dopo risposte 400 sembravano essersi fermati, poi ha detto che le consegne erano riprese un giorno o due dopo, e Apple ha chiesto una segnalazione tramite Feedback Assistant. Considera il comportamento documentato come la regola e il tuo monitoraggio come la prova.

Recupera le notifiche App Store perse con Get Notification History

Get Notification History restituisce le notifiche della versione 2 che Apple ha tentato di inviare al tuo server nell'intervallo che scegli. Ogni record contiene il payload firmato completo, quindi puoi passarlo allo stesso handler di una notifica in tempo reale. Ogni record include anche un array sendAttempts con al massimo sei voci, una per il primo invio e una per ciascuno dei cinque nuovi tentativi.

  • startDate ed endDate sono obbligatori, e startDate deve rientrare negli ultimi 180 giorni in produzione o negli ultimi 30 giorni in sandbox.
  • Imposta onlyFailures su true per ottenere solo le notifiche che non hanno raggiunto il tuo server, più quelle che Apple sta ancora ritentando.
  • Filtra per un notificationType, come CONSUMPTION_REQUEST o REFUND, oppure per un transactionId di un singolo cliente, ma non per entrambi nella stessa richiesta.
  • Ogni chiamata restituisce al massimo 20 record. Continua a chiamare con il paginationToken finché hasMore è true, e invia ogni volta lo stesso corpo della richiesta.

Per i rimborsi conta una precisazione. Apple dice che i record della cronologia riflettono lo stato di un acquisto al momento del primo invio della notifica, non quello attuale. Quindi un REFUND recuperato è un fatto del passato. Prima di revocare l'accesso, verifica lo stato attuale con gli endpoint della transazione o dello stato dell'abbonamento.

Le notifiche V1 non si recuperano così

Get Notification History copre solo la versione 2. Apple ritenta le notifiche V1 tre volte, a 6, 24 e 48 ore dal tentativo precedente, e se falliscono tutte non c'è alcuna cronologia da riprodurre. È un motivo in più per passare a V2 qualsiasi app ancora su V1.

Recupera le notifiche di rimborso di Google Play perse

La rete di sicurezza di Google è Pub/Sub stesso. Finché la tua sottoscrizione esiste, un messaggio che nessuno ha confermato resta lì per il periodo di conservazione, 7 giorni di default e fino a 31 giorni se lo aumenti. Quando il tuo endpoint torna attivo, la consegna riprende. Due impostazioni possono vanificare tutto senza dare segnali.

  • Un topic di messaggi non recapitabili (dead-letter) sposta un messaggio fuori dalla tua sottoscrizione dopo un numero stabilito di tentativi di consegna falliti. Il valore predefinito è 5, e con la policy di nuovo tentativo predefinita, che riconsegna subito, cinque tentativi possono passare in fretta. Se ne usi uno, tienilo d'occhio come una seconda casella di posta.
  • Una sottoscrizione senza attività dei sottoscrittori, come connessioni aperte, pull attivi o push riusciti, scade dopo 31 giorni di default. Un endpoint che resta guasto per un mese può perdere la sottoscrizione stessa, insieme a tutto ciò che vi era in attesa.

I rimborsi annullati hanno un backup di 30 giorni

Per i rimborsi già avvenuti, la Voided Purchases API è il backup in pull. Elenca gli acquisti annullati degli ultimi 30 giorni, fino a 1.000 per pagina, con una quota di 6.000 query al giorno e 30 query in qualsiasi periodo di 30 secondi per ogni app. Passa type 1 per includere gli abbonamenti insieme ai prodotti ad acquisto singolo. Eseguirla ogni giorno intercetta qualsiasi rimborso perso dalla tua pipeline di notifiche, e mantiene corretti diritti di accesso e numeri dei ricavi.

Le revisioni dei chargeback non lo hanno

Una PendingRefundReviewNotification è diversa. Contiene il pendingRefundToken che devi passare a orders.reviewrefund, e hai 24 ore dalla ricezione per inviare la tua preferenza di rimborso e le prove di utilizzo. Google registra la tua prima chiamata e ignora le altre. La documentazione di Google non descrive alcun endpoint che elenchi le revisioni in sospeso, quindi se quel messaggio Pub/Sub va perso, le tue prove per quel chargeback vanno perse con lui.

Quanto costa in denaro una notifica di rimborso persa

Una notifica persa per un rimborso già definitivo ti costa lavoro contabile. La ritrovi più tardi nella Voided Purchases API o in Get Notification History, revochi l'accesso se la tua policy lo prevede, e i tuoi report si riallineano. Fastidioso, ma economico.

Una notifica persa in una delle due procedure contestabili costa denaro vero, perché lo store decide senza le tue prove. Su Apple significa che la decisione sul rimborso viene presa senza i tuoi dati di consumo. Su Google Play, per gli ordini effettuati dopo il 3 agosto 2026, un chargeback perso ti costa il prezzo d'acquisto meno la commissione di servizio di Play, più la commissione di chargeback addebitata dalla banca dell'acquirente. Google copre solo la propria commissione di servizio.

E il denaro speso per erogare l'acquisto era già andato prima che iniziasse la contestazione.

  • Calcolo: tempo di GPU e di server dietro ogni generazione, rendering o risposta del modello che l'acquirente ha già usato.
  • Chiamate API: richieste a terzi fatturate nel momento in cui sono partite, spesso a chiamata.
  • Archiviazione: file e contenuti multimediali creati dall'acquirente, ancora nella tua bolletta di hosting.
  • Compensi: quote di ricavo già pagate a creator, affiliati o partner su quella vendita.

Niente di tutto questo torna indietro quando un rimborso va a buon fine. Le prove che invii in quelle 12 o 24 ore sono l'unica leva che hai, e una notifica persa te la toglie.

Una procedura di recupero che regge

  • Conferma prima di tutto. Salva il payload grezzo, restituisci un codice di successo, poi elaboralo in una coda.
  • Interroga Get Notification History di Apple con onlyFailures ogni pochi minuti per CONSUMPTION_REQUEST, così un'interruzione costa solo minuti della finestra di 12 ore.
  • Esegui ogni giorno una scansione di Get Notification History con onlyFailures sugli ultimi giorni per tutti i tipi, e riproduci ciò che trovi.
  • Esegui ogni giorno una chiamata alla Voided Purchases API con type 1 per ogni app Google Play, e riconcilia il risultato con i rimborsi che hai già registrato.
  • Su Pub/Sub, mantieni la conservazione dei messaggi a 7 giorni o più, imposta un avviso sul topic dei messaggi non recapitabili se ne hai uno, e un avviso quando i messaggi non consegnati si accumulano.
  • Testa l'intero percorso anche in produzione. Il sandbox di Apple invia ogni notifica una sola volta, senza nuovi tentativi, e Request a Test Notification insieme a Get Test Notification Status mostrano esattamente come ha risposto il tuo server.
Uno smartphone a faccia in su accanto a una tazza di caffè e a un taccuino su una scrivania nella luce del primo mattino, un inizio tranquillo per il controllo quotidiano delle notifiche di rimborso perse

RefundHalt riceve per te le notifiche di entrambi gli store e risponde automaticamente ai CONSUMPTION_REQUEST e alle revisioni dei chargeback entro le scadenze, così non sei tu a dover tenere d'occhio l'orologio.

Domande frequenti

Per quanto tempo Apple continua a ritentare una notifica server dell'App Store fallita?
Circa sei giorni e mezzo per la versione 2. Apple ritenta cinque volte, a 1, 12, 24, 48 e 72 ore dal tentativo precedente, quindi l'ultimo nuovo tentativo arriva 157 ore dopo la prima consegna. Le notifiche della versione 1 hanno tre nuovi tentativi, a 6, 24 e 48 ore dal tentativo precedente.
Fino a quanto indietro posso recuperare le notifiche server dell'App Store perse?
180 giorni in produzione. L'endpoint Get Notification History di Apple restituisce le notifiche della versione 2 degli ultimi 180 giorni, o degli ultimi 30 giorni in sandbox, 20 record per chiamata, e l'opzione onlyFailures limita i risultati alle notifiche mai arrivate al tuo server.
Apple ritenta una notifica se il mio server restituisce HTTP 400?
Sì, secondo la documentazione di Apple. Apple ritenta quando il tuo server restituisce uno stato 40x o 50x, e considera successo i codici da 200 a 206. Qualsiasi altro stato conta comunque come non riuscito.
Posso recuperare una revisione di chargeback di Google Play persa?
Solo finché il messaggio Pub/Sub esiste ancora. Il pendingRefundToken che ti serve per orders.reviewrefund arriva nella PendingRefundReviewNotification, e Google non documenta alcuna API che elenchi le revisioni in sospeso, quindi i messaggi non confermati della sottoscrizione, conservati 7 giorni di default, sono la tua unica copia.
Come trovo i rimborsi di Google Play che il mio server ha perso?
Chiama la Voided Purchases API. Restituisce gli acquisti annullati degli ultimi 30 giorni, inclusi rimborsi, revoche e chargeback, con fino a 1.000 risultati per pagina e una quota di 6.000 query al giorno per app. Passa type 1 per includere gli abbonamenti.

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.