Il sondaggio di disdetta di Google Play e come ridurre le disdette su Android
Come leggere dall'API il sondaggio di disdetta di Google Play, cosa offrire in alternativa (pausa, cambio piano, ripristino) e un flusso in-app corretto.
Gli abbonati Android di solito disdicono nel Google Play Store, non nella tua app. Quel flusso lo gestisce Google, e quando l’utente lo completa, Play può chiedergli perché se ne va. La risposta non va persa: viene salvata sull’abbonamento e puoi leggerla dalla Google Play Developer API. Insieme a pausa, cambi di piano e ripristino, ti dà più strumenti di quanti molti sviluppatori immaginino.
Questa guida mostra dove si trova la risposta al sondaggio, cosa Google ti permette di offrire prima e dopo una disdetta e come costruire un flusso in-app che mantenga il pulsante di disdetta a un tocco di distanza. Si basa sulla documentazione di Google: il ciclo di vita degli abbonamenti, abbonamenti: deep link e gestione dei clienti, il riferimento RTDN e il riferimento della Google Play Developer API per purchases.subscriptionsv2 (tutti consultati a novembre 2026).
Da dove arrivano le disdette
La guida al ciclo di vita di Google elenca tre fonti:
- L’utente, dal centro abbonamenti di Play.
- Automaticamente, quando un abbonamento non si recupera dopo l’account hold. La stessa guida dice che anche gli utenti che non accettano un aumento di prezzo con adesione esplicita prima del rinnovo vengono disiscritti automaticamente.
- Tu, tramite
purchases.subscriptionsv2.cancel.
In ogni caso, un normale abbonamento a rinnovo automatico invia una notifica SUBSCRIPTION_CANCELED, lo stato diventa SUBSCRIPTION_STATE_CANCELED e expiryTime contiene la data in cui l’accesso deve terminare. L’utente mantiene l’accesso fino ad allora. Google avverte che togliere l’accesso a contenuti a cui l’utente ha ancora diritto viola la sua policy sugli abbonamenti.
Leggere il sondaggio di disdetta
Dopo una notifica SUBSCRIPTION_CANCELED, chiama purchases.subscriptionsv2.get con il purchase token. La risposta ha un canceledStateContext con uno di quattro rami:
| Ramo | Significato |
|---|---|
userInitiatedCancellation |
L’utente ha disdetto |
systemInitiatedCancellation |
Google ha disdetto, per esempio per un problema di fatturazione |
developerInitiatedCancellation |
Hai disdetto tu |
replacementCancellation |
L’abbonamento è stato sostituito da uno nuovo |
Per le disdette dell’utente, userInitiatedCancellation contiene cancelTime e un cancelSurveyResult. Il riferimento dell’API descrive quest’ultimo come “informazioni fornite dall’utente quando completa il flusso di disdetta dell’abbonamento (sondaggio sul motivo della disdetta)”. Il campo reason assume uno di questi valori:
| Valore | Significato |
|---|---|
CANCEL_SURVEY_REASON_NOT_ENOUGH_USAGE |
Utilizzo insufficiente dell’abbonamento |
CANCEL_SURVEY_REASON_TECHNICAL_ISSUES |
Problemi tecnici durante l’uso dell’app |
CANCEL_SURVEY_REASON_COST_RELATED |
Problemi legati al costo |
CANCEL_SURVEY_REASON_FOUND_BETTER_APP |
L’utente ha trovato un’app migliore |
CANCEL_SURVEY_REASON_OTHERS |
Altri motivi, con il testo libero dell’utente in reasonUserInput |
CANCEL_SURVEY_REASON_UNSPECIFIED |
Non specificato |
Tre note pratiche:
- Leggilo al momento della disdetta. Il
canceledStateContextè presente solo mentre l’abbonamento è disdetto o scaduto, e il purchase token smette di funzionare 60 giorni dopo la scadenza. Se l’utente ripristina, Google dice che tutti i campi della disdetta vengono cancellati. - Aspettati dei vuoti. Non puoi dare per scontato che ogni utente abbia risposto. Prevedi motivi non specificati.
- Salva il testo libero come dato non affidabile. È ciò che l’utente ha digitato, qualunque cosa sia.
Cinque motivi fissi sono grossolani, ma si traducono bene in azioni: costo, utilizzo, qualità, concorrenza.
Cosa Google ti permette di offrire in alternativa
Pausa
La guida al ciclo di vita di Google dice che tutti gli abbonamenti hanno la pausa attiva di default (puoi disattivarla nella Play Console). Gli utenti scelgono la durata della pausa in base al periodo di fatturazione:
| Periodo di fatturazione | Durate della pausa |
|---|---|
| Settimanale | 1, 2, 3 o 4 settimane |
| Mensile, trimestrale, semestrale, annuale | 1, 2 o 3 mesi |
Google nota che le durate possono cambiare. La pausa inizia alla fine del periodo in corso; durante la pausa l’utente non ha accesso e non paga; alla fine, Google prova a rinnovare. Il tuo backend riceve SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED quando l’utente la programma, SUBSCRIPTION_PAUSED quando inizia e SUBSCRIPTION_RECOVERED quando riprende (o SUBSCRIPTION_ON_HOLD se il pagamento fallisce alla ripresa). Google suggerisce di offrire un modo per riprendere manualmente, tramite un deep link a Google Play.
Per un utente che disdice perché “non lo userò per un po’”, una pausa è spesso la risposta onesta.
Cambi di piano
Puoi permettere agli utenti di cambiare livello o periodo di fatturazione nella tua app, con un’offerta se vuoi (l’esempio di Google è uno sconto sul primo anno passando dal mensile all’annuale). La replacement mode decide quando si applica il cambio e come viene accreditato il tempo non usato. DEFERRED, per esempio, applica il cambio al rinnovo successivo. Un livello più economico è una risposta naturale a COST_RELATED.
Ripristino
Un abbonamento disdetto ma non ancora scaduto può essere ripristinato dall’utente dal centro abbonamenti del Play Store con il pulsante Resubscribe. Google impone a tutti gli sviluppatori di supportarlo. Ricevi SUBSCRIPTION_RESTARTED e l’abbonamento si rinnova come prima.
Costruire un flusso di disdetta in-app
La guida agli abbonamenti di Google dice che la tua app dovrebbe includere un link in una schermata delle impostazioni per permettere agli utenti di gestire i propri abbonamenti, e che “puoi anche offrire agli utenti un’opzione per disdire nella tua app o sul tuo sito web”. Questo ti dà due possibili design.
Opzione A: la tua schermata, poi Play
- “Gestisci abbonamento” nelle impostazioni apre la tua schermata.
- Una domanda: perché vuoi disdire? Usa motivi vicini ai cinque di Google, così i dati si allineano.
- Una risposta pertinente per motivo: pausa per lo scarso utilizzo, piano più economico per il costo, una correzione o un contatto per i problemi tecnici.
- Un pulsante Continua con la disdetta, sempre visibile, che apre il deep link alla pagina dell’abbonamento in Play:
https://play.google.com/store/account/subscriptions?sku=il tuo ID prodotto&package=il nome del tuo package. Google dice che lì gli utenti possono gestire i metodi di pagamento e accedere a “disdetta, nuova sottoscrizione e pausa”.
Opzione B: disdire nella tua app
Il tuo backend può disdire tramite purchases.subscriptionsv2.cancel. Il cancellationType conta:
USER_REQUESTED_STOP_RENEWALS: disdetta richiesta dall’utente; ferma solo il prossimo rinnovo e l’abbonamento può essere ripristinato.DEVELOPER_REQUESTED_STOP_PAYMENTS: richiesta dallo sviluppatore; non può essere ripristinata.
Per un utente che ha chiesto di disdire, usa USER_REQUESTED_STOP_RENEWALS, così mantiene l’accesso fino alla fine del periodo e può ancora cambiare idea nel Play Store. Con questo design, il pulsante “Disdici” nel tuo flusso disdice davvero, in un tocco, il modo più pulito per rispettare le aspettative click-to-cancel. Google descrive la risposta al suo sondaggio come proveniente dal flusso di disdetta di Play, quindi per le disdette fatte tramite la tua app affidati al motivo che raccogli tu.
In entrambi i casi: stesso peso visivo per “Disdici” e per l’offerta, nessun ciclo di conferme, nessun “contatta l’assistenza per disdire”.
Dopo una disdetta
Tra SUBSCRIPTION_CANCELED e SUBSCRIPTION_EXPIRED, l’utente è ancora un abbonato.
- Google suggerisce di mostrare un messaggio nella tua app con la data di scadenza.
- Google nota anche che puoi rilevare le disdette in tempo reale e “inviare notifiche push o messaggi in-app per chiedere di abbonarsi di nuovo”.
- Adatta il messaggio al motivo del sondaggio, e inviane uno, non cinque.
- Dopo la scadenza, passa al win-back: vedi come riconquistare gli abbonati scaduti su Google Play.
Misurare
Per mese e per motivo: disdette (da SUBSCRIPTION_CANCELED con un contesto avviato dall’utente), ripristini (SUBSCRIPTION_RESTARTED), pause programmate, cambi di piano e la quota che è effettivamente scaduta. Confronta i motivi tra le versioni dell’app: un balzo di TECHNICAL_ISSUES dopo un rilascio è una segnalazione di bug.
Farlo con NoChurn
NoChurn legge la risposta al sondaggio di disdetta da Google Play a ogni disdetta e la mette nella cronologia del cliente, accanto ai motivi raccolti nel tuo flusso. Il suo flusso di disdetta è disponibile come API headless per la tua app Android: motivi, un’offerta (sconto, pausa o cambio di piano) e un pulsante di disdetta sempre visibile che apre la pagina dell’abbonamento di Google Play. Google tiene pagamenti, nuovi tentativi e il proprio pulsante di disdetta. I motivi guidano poi le email di win-back e il churn score. Vedi NoChurn + Google Play.