PAGAMENTI FALLITIGOOGLE PLAY

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.

Pubblicato il 7 min di lettura

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. autoRenewEnabled resta true, e Google estende expiryTime fino 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 e queryPurchasesAsync() 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_CANCELED e poi SUBSCRIPTION_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.

La tua app dovrebbe rimandare alla gestione dell’abbonamento dalla schermata delle impostazioni. Google documenta due URL:

  1. Tutti gli abbonamenti: https://play.google.com/store/account/subscriptions
  2. 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 campo outOfAppPurchaseContext ti 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.

PROMPT

Read https://www.nochurn.sh/llms.txt,
then follow https://www.nochurn.sh/docs/quickstart/
to add NoChurn to this app. Use a test key
(nc_test_…) until I say we go live.

Smetti di perdere ricavi.

  • Gratis fino a $300 MRR
  • Nessuna carta richiesta
  • Attivo in 10 minuti
  • Mai una quota di ciò che recuperiamo