Come ridurre il churn su Google Play: grace period e account hold
Come funzionano grace period e account hold su Google Play, quali notifiche RTDN gestire, i messaggi in-app per i rifiuti e come riconquistare gli utenti.
Su Google Play, è Google che addebita il cliente, ritenta i pagamenti falliti e mostra il pulsante di disdetta. Non puoi ritentare un addebito né toccare il metodo di pagamento del cliente. Cosa controlli tu: quanto durano il grace period e l’account hold, se il cliente mantiene l’accesso, cosa gli mostra la tua app e quanto in fretta reagisci quando un abbonamento si recupera o termina.
Questa guida tratta il grace period, l’account hold, le notifiche in tempo reale per sviluppatori (RTDN) e gli stati subscriptionsv2 che ci stanno dietro, i messaggi in-app per i pagamenti rifiutati, i deep link al centro abbonamenti, ripristino e nuova sottoscrizione, e gli acquisti annullati. Si attiene alla documentazione di Google: ciclo di vita degli abbonamenti, informazioni sugli abbonamenti, il riferimento RTDN e Help Google dispute chargebacks (tutti consultati a novembre 2026).
Cosa fa Google quando un rinnovo fallisce
Quando un pagamento di rinnovo fallisce, Google avvisa l’utente e continua a provare a rinnovare per un certo tempo prima che l’abbonamento termini. La documentazione di Google lo chiama periodo di recupero, composto da un grace period seguito da un account hold. Durante questo periodo, Google invia all’utente email e notifiche chiedendogli di aggiornare il metodo di pagamento.
| Fase | Accesso dell’utente | subscriptionState |
RTDN all’inizio |
|---|---|---|---|
| Grace period | Mantiene l’accesso | SUBSCRIPTION_STATE_IN_GRACE_PERIOD |
SUBSCRIPTION_IN_GRACE_PERIOD (6) |
| Account hold | Perde l’accesso | SUBSCRIPTION_STATE_ON_HOLD |
SUBSCRIPTION_ON_HOLD (5) |
| Recuperato | Accesso ripristinato | SUBSCRIPTION_STATE_ACTIVE |
SUBSCRIPTION_RECOVERED (1) |
| Non recuperato | Accesso terminato | SUBSCRIPTION_STATE_CANCELED, poi EXPIRED |
SUBSCRIPTION_CANCELED (3), poi SUBSCRIPTION_EXPIRED (13) |
Grace period
La guida al ciclo di vita di Google dice:
- Il grace period è attivo di default su tutti i piani base a rinnovo automatico. Puoi cambiarne la durata o disattivarlo nella Play Console, e Google avverte che una durata più breve può ridurre il numero di abbonamenti recuperati.
- Durante il grace period l’utente dovrebbe mantenere l’accesso.
autoRenewEnabledrestatrue, e Google estendeexpiryTimefino alla fine del grace period. - Se l’utente sistema il metodo di pagamento, l’abbonamento si rinnova con la sua data di rinnovo originale.
- Cambiare la durata del grace period riguarda solo i rinnovi che entrano nel grace period dopo la modifica.
- Se imposti 0 giorni, Google aspetta comunque almeno 1 giorno (un “grace period silenzioso”) per lasciare tempo ai nuovi tentativi. L’abbonamento resta attivo in quelle 24 ore e non riceverai una RTDN di grace period.
Se la tua app usa solo queryPurchasesAsync() per verificare il diritto di accesso, i grace period sono gestiti per te, perché la Play Billing Library continua a restituire quegli acquisti come attivi.
Account hold
L’account hold segue il grace period:
- È attivo di default, e la sua durata predefinita è 60 giorni meno il grace period. Puoi cambiarla o disattivarlo nella Play Console, con lo stesso avvertimento sulle durate più brevi.
- Prima che l’abbonamento entri in account hold, Google fa altri tentativi di addebito per un massimo di 48 ore, mentre l’utente mantiene l’accesso.
- Durante l’account hold devi bloccare l’accesso.
expiryTimeè nel passato equeryPurchasesAsync()non restituisce più l’abbonamento. - Se l’utente sistema il pagamento, ricevi
SUBSCRIPTION_RECOVERED, il purchase token resta lo stesso e devi ripristinare l’accesso. A differenza del recupero durante il grace period, la data di fatturazione si sposta alla data del recupero. - Se l’hold termina senza una correzione, ricevi
SUBSCRIPTION_CANCELEDe poiSUBSCRIPTION_EXPIRED. - Un abbonamento in pausa che riprende con un metodo di pagamento che fallisce entra direttamente in account hold.
Google nota anche che gli utenti possono disdire, ripristinare o riacquistare durante l’hold, quindi il tuo backend deve continuare a gestire questi eventi.
Notifiche in tempo reale per sviluppatori
Le RTDN vengono consegnate tramite Cloud Pub/Sub e contengono solo il tipo di notifica e il purchase token. L’indicazione di Google è di chiamare purchases.subscriptionsv2.get dal tuo backend a ogni notifica per leggere lo stato completo. Il riferimento RTDN elenca i tipi di abbonamento; quelli che contano di più per il churn:
| Codice | Tipo | Cosa fare |
|---|---|---|
| 6 | SUBSCRIPTION_IN_GRACE_PERIOD |
Mantieni l’accesso; chiedi all’utente di sistemare il pagamento |
| 5 | SUBSCRIPTION_ON_HOLD |
Togli l’accesso; spiega all’utente perché |
| 1 | SUBSCRIPTION_RECOVERED |
Ripristina l’accesso (inviata anche quando un abbonamento riprende dalla pausa) |
| 2 | SUBSCRIPTION_RENEWED |
Rinnovo normale |
| 3 | SUBSCRIPTION_CANCELED |
Disdetta volontaria o involontaria; controlla canceledStateContext |
| 7 | SUBSCRIPTION_RESTARTED |
L’utente ha ripristinato un abbonamento disdetto non ancora scaduto |
| 12 | SUBSCRIPTION_REVOKED |
Revocato prima della scadenza, per esempio dopo un chargeback; togli l’accesso |
| 13 | SUBSCRIPTION_EXPIRED |
Togli l’accesso |
| 4 | SUBSCRIPTION_PURCHASED |
Nuovo acquisto, compresa una nuova sottoscrizione |
In caso di disdetta, canceledStateContext ti dice se ha disdetto l’utente, il sistema o tu, e per le disdette dell’utente userInitiatedCancellation può includere il motivo che l’utente ha indicato. Usalo: una disdetta dopo l’account hold è un problema di pagamento, non una decisione di andarsene.
Messaggi in-app per i pagamenti rifiutati
Google offre un messaggio già pronto per i problemi di pagamento. Se chiami BillingClient.showInAppMessages() con InAppMessageCategoryId.TRANSACTIONAL, Google Play mostra una snackbar temporanea che dice all’utente che il suo pagamento è stato rifiutato, con un deep link per sistemare il metodo di pagamento su Google Play. Secondo la guida agli abbonamenti di Google, il messaggio viene mostrato una volta al giorno durante il grace period e l’account hold, e Google raccomanda di chiamare l’API ogni volta che l’utente apre l’app.
Se l’utente sistema il pagamento, la chiamata restituisce SUBSCRIPTION_STATUS_UPDATED con un purchase token. Aggiorna l’abbonamento dal tuo backend e ripristina subito l’accesso.
Per gli utenti che accedono ai tuoi contenuti fuori dall’app (sul web, per esempio), Google suggerisce una notifica push o un’email quando l’accesso si interrompe a causa dell’account hold.
Deep link al centro abbonamenti
La tua app dovrebbe rimandare alla gestione dell’abbonamento dalla schermata delle impostazioni. Google documenta due URL:
- Tutti gli abbonamenti:
https://play.google.com/store/account/subscriptions - Un singolo abbonamento (consigliato):
https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
Il secondo apre la pagina di gestione di quell’abbonamento, dove l’utente può gestire i metodi di pagamento, disdire, abbonarsi di nuovo o mettere in pausa. Usalo anche nelle tue email sui pagamenti.
Ripristino, nuova sottoscrizione e win-back
Google distingue due azioni, entrambe mostrate all’utente come pulsante Resubscribe nel Play Store:
- Ripristino: prima della scadenza, un abbonamento disdetto viene ripristinato e continua a rinnovarsi come se non fosse mai stato disdetto. Mantiene lo stesso purchase token e ricevi
SUBSCRIPTION_RESTARTED. Google dice che tutte le app devono supportare il ripristino. - Nuova sottoscrizione: dopo la scadenza, se il piano base lo consente, l’utente acquista di nuovo dal Play Store. È un nuovo acquisto con un nuovo token e una RTDN
SUBSCRIPTION_PURCHASED. Devi confermarlo (acknowledge); il campooutOfAppPurchaseContextti aiuta a collegarlo all’abbonamento e all’utente precedenti.
Dentro la tua app, la guida di Google descrive come riconquistare gli utenti che hanno disdetto offrendo una schermata per iscriversi di nuovo (per esempio con un pulsante Riattiva), prima o dopo la scadenza. Le offerte di abbonamento possono rivolgersi agli utenti idonei con degli sconti; le regole di idoneità si impostano nella Play Console.
Rimborsi, acquisti annullati e chargeback
Quando un acquisto viene rimborsato o subisce un chargeback, viene annullato. Ricevi una RTDN voidedPurchaseNotification con il purchase token, l’ID ordine, productType e refundType (rimborso totale o rimborso parziale basato sulla quantità). La guida al ciclo di vita di Google aggiunge che un abbonamento oggetto di chargeback, o revocato dal tuo backend con purchases.subscriptionsv2.revoke, attiva SUBSCRIPTION_REVOKED, e devi togliere l’accesso. La Voided Purchases API ti dà più dettagli su un intervallo di tempo.
Per i chargeback, Google ti permette di dire la tua. Quando un chargeback richiede la revisione dello sviluppatore, Google Play invia una RTDN PendingRefundReviewNotification, e hai 24 ore per rispondere con la ReviewRefund API, indicando una preferenza sul rimborso ed eventuali prove di utilizzo dell’acquisto. Google registra solo la tua prima chiamata.
Una checklist
- Le RTDN vengono consegnate al tuo backend, e ognuna attiva un
subscriptionsv2.get. - Grace period e account hold sono attivi, con durate scelte con intenzione.
- L’accesso resta attivo durante il grace period e si interrompe durante l’account hold.
-
showInAppMessages()viene chiamato all’avvio dell’app. - La tua schermata delle impostazioni e le tue email usano il deep link dello specifico abbonamento.
- Gli acquisti di ripristino e di nuova sottoscrizione vengono gestiti e confermati.
- Ogni acquisto riporta un account ID offuscato, così puoi abbinarlo al tuo utente.
- Gli acquisti annullati e le notifiche di revisione dei chargeback vengono gestiti.
Farlo con NoChurn
Google tiene pagamenti, nuovi tentativi, grace period, account hold e il pulsante di disdetta; NoChurn non cambia questo. NoChurn legge le tue notifiche in tempo reale per sviluppatori, abbina ogni abbonamento al tuo utente tramite l’account ID offuscato e mette grace period, hold, disdette, recuperi e acquisti annullati nella cronologia del cliente e in un churn score da 0 a 100. Dove Google lo consente, agisce: messaggi nella tua app o via email che rimandano alla pagina dell’abbonamento su Play, un flusso di disdetta che la tua app mostra tramite l’API headless prima di rimandare a Google Play, ed email di win-back a 30, 60 e 90 giorni in base al motivo di disdetta. Vedi NoChurn + Google Play.