O inquérito de cancelamento do Google Play e como reduzir os cancelamentos no Android
Como ler o inquérito de cancelamento do Google Play pela API, o que o Play permite oferecer (pausa, mudança de plano, restauro) e um fluxo justo na app.
Os subscritores Android normalmente cancelam na Google Play Store, não na sua app. É a Google que gere esse fluxo e, quando o utilizador o conclui, o Play pode perguntar-lhe porque está a sair. A resposta não se perde: fica guardada na subscrição e pode lê-la a partir da Google Play Developer API. Combinada com a pausa, as mudanças de plano e o restauro, dá-lhe mais com que trabalhar do que muitos developers imaginam.
Este guia mostra onde fica a resposta ao inquérito, o que a Google lhe permite oferecer antes e depois de um cancelamento e como construir um fluxo na app que mantenha o botão de cancelar à distância de um toque. Baseia-se na documentação da Google: o ciclo de vida das subscrições, subscrições: deep links e gestão de clientes, a referência das RTDN e a referência da Google Play Developer API para purchases.subscriptionsv2 (todos consultados em novembro de 2026).
De onde vêm os cancelamentos
O guia do ciclo de vida da Google lista três origens:
- O utilizador, a partir do centro de subscrições do Play.
- Automaticamente, quando uma subscrição não recupera depois da suspensão da conta (account hold). O mesmo guia diz que os utilizadores que não aceitam um aumento de preço com consentimento antes da renovação também perdem a subscrição automaticamente.
- O comerciante, através de
purchases.subscriptionsv2.cancel.
Em todos os casos, uma subscrição normal com renovação automática envia uma notificação SUBSCRIPTION_CANCELED, o estado passa a SUBSCRIPTION_STATE_CANCELED e expiryTime contém a data em que o acesso deve terminar. O utilizador mantém o acesso até lá. A Google avisa que retirar o acesso a conteúdo a que o utilizador ainda tem direito viola a sua política de subscrições.
Ler o inquérito de cancelamento
Depois de uma notificação SUBSCRIPTION_CANCELED, chame purchases.subscriptionsv2.get com o purchase token. A resposta tem um canceledStateContext com um de quatro ramos:
| Ramo | Significado |
|---|---|
userInitiatedCancellation |
O utilizador cancelou |
systemInitiatedCancellation |
A Google cancelou, por exemplo por causa de um problema de faturação |
developerInitiatedCancellation |
O comerciante cancelou |
replacementCancellation |
A subscrição foi substituída por uma nova |
Para os cancelamentos feitos pelo utilizador, userInitiatedCancellation contém cancelTime e um cancelSurveyResult. A referência da API descreve este último como “informação fornecida pelo utilizador quando conclui o fluxo de cancelamento da subscrição (inquérito sobre o motivo do cancelamento).” O campo reason assume um destes valores:
| Valor | Significado |
|---|---|
CANCEL_SURVEY_REASON_NOT_ENOUGH_USAGE |
Pouca utilização da subscrição |
CANCEL_SURVEY_REASON_TECHNICAL_ISSUES |
Problemas técnicos ao usar a app |
CANCEL_SURVEY_REASON_COST_RELATED |
Questões relacionadas com o custo |
CANCEL_SURVEY_REASON_FOUND_BETTER_APP |
O utilizador encontrou uma app melhor |
CANCEL_SURVEY_REASON_OTHERS |
Outros motivos, com o texto livre do utilizador em reasonUserInput |
CANCEL_SURVEY_REASON_UNSPECIFIED |
Não especificado |
Três notas práticas:
- Leia-o no momento do cancelamento. O
canceledStateContextsó está presente enquanto a subscrição está cancelada ou expirada, e o purchase token deixa de funcionar 60 dias depois da expiração. Se o utilizador restaurar a subscrição, a Google diz que todos os campos de cancelamento são apagados. - Conte com lacunas. Não pode partir do princípio de que todos os utilizadores responderam. Preveja motivos não especificados.
- Guarde o texto livre como dados não fiáveis. É o que o utilizador escreveu, seja o que for.
Cinco motivos fixos são pouco detalhados, mas correspondem bem a ações: custo, utilização, qualidade, concorrência.
O que a Google lhe permite oferecer em alternativa
Pausa
O guia do ciclo de vida da Google diz que todas as subscrições têm a pausa ativada por defeito (pode desativá-la na Play Console). Os utilizadores escolhem a duração da pausa com base no período de faturação:
| Período de faturação | Durações da pausa |
|---|---|
| Semanal | 1, 2, 3 ou 4 semanas |
| Mensal, trimestral, semestral, anual | 1, 2 ou 3 meses |
A Google nota que as durações podem mudar. A pausa começa no fim do período atual; durante a pausa o utilizador não tem acesso e não paga; no fim, a Google tenta renovar. O seu backend vê SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED quando o utilizador a agenda, SUBSCRIPTION_PAUSED quando começa e SUBSCRIPTION_RECOVERED quando é retomada (ou SUBSCRIPTION_ON_HOLD se o pagamento falhar na retoma). A Google sugere oferecer uma forma de retomar manualmente, através de um deep link para o Google Play.
Para um utilizador que cancela porque “não vai usar durante algum tempo”, uma pausa é muitas vezes a resposta honesta.
Mudanças de plano
Pode permitir que os utilizadores mudem de nível ou de período de faturação na sua app, com uma oferta se quiser (o exemplo da Google é um desconto no primeiro ano ao passar de mensal para anual). O replacement mode decide quando a mudança se aplica e como é creditado o tempo não usado. DEFERRED, por exemplo, aplica a mudança na próxima renovação. Um nível mais barato é uma resposta natural a COST_RELATED.
Restauro
Uma subscrição cancelada que ainda não expirou pode ser restaurada pelo utilizador a partir do centro de subscrições da Play Store com o botão Resubscribe. A Google exige que todos os developers o suportem. Recebe SUBSCRIPTION_RESTARTED e a subscrição renova como antes.
Construir um fluxo de cancelamento na app
O guia de subscrições da Google diz que a sua app deve incluir um link num ecrã de definições para os utilizadores gerirem as suas subscrições, e que “também pode oferecer uma opção para os utilizadores cancelarem na sua app ou no seu site.” Isso dá-lhe dois desenhos possíveis.
Opção A: o seu ecrã, depois o Play
- “Gerir subscrição” nas definições abre o seu ecrã.
- Uma pergunta: porque quer cancelar? Use motivos próximos dos cinco da Google, para que os dados batam certo.
- Uma resposta relevante por motivo: pausa para pouca utilização, plano mais barato para o custo, uma correção ou um contacto para problemas técnicos.
- Um botão Continuar para cancelar, sempre visível, que abre o deep link para a página da subscrição no Play:
https://play.google.com/store/account/subscriptions?sku=o ID do seu produto&package=o nome do seu pacote. A Google diz que os utilizadores podem gerir aí os métodos de pagamento e aceder a “cancelamento, nova subscrição e pausa.”
Opção B: cancelar na sua app
O seu backend pode cancelar através de purchases.subscriptionsv2.cancel. O cancellationType importa:
USER_REQUESTED_STOP_RENEWALS: cancelamento pedido pelo utilizador; só para a próxima renovação e a subscrição pode ser restaurada.DEVELOPER_REQUESTED_STOP_PAYMENTS: pedido pelo developer; não pode ser restaurada.
Para um utilizador que pediu para cancelar, use USER_REQUESTED_STOP_RENEWALS, para que mantenha o acesso até ao fim do período e ainda possa mudar de ideias na Play Store. Com este desenho, o botão “Cancelar” do seu fluxo cancela mesmo, num toque, que é a forma mais limpa de respeitar as expectativas de cancelamento num clique. A Google descreve a resposta ao inquérito como vinda do próprio fluxo de cancelamento do Play, por isso, para os cancelamentos feitos através da sua app, conte com o motivo que recolhe por si.
Em qualquer caso: o mesmo peso visual para “Cancelar” e para a oferta, sem ciclos de confirmação, sem “contacte o suporte para cancelar.”
Depois de um cancelamento
Entre SUBSCRIPTION_CANCELED e SUBSCRIPTION_EXPIRED, o utilizador ainda é subscritor.
- A Google sugere mostrar uma mensagem na sua app com a data de expiração.
- A Google nota também que pode detetar os cancelamentos em tempo real e “enviar-lhes notificações push ou mensagens na app a pedir que voltem a subscrever.”
- Adapte a mensagem ao motivo do inquérito, e envie uma, não cinco.
- Depois da expiração, passe à reconquista: veja como reconquistar subscritores que saíram no Google Play.
Medir
Por mês e por motivo: cancelamentos (a partir de SUBSCRIPTION_CANCELED com um contexto iniciado pelo utilizador), restauros (SUBSCRIPTION_RESTARTED), pausas agendadas, mudanças de plano e a parte que expirou de facto. Compare os motivos entre versões da app: um salto em TECHNICAL_ISSUES depois de uma versão é um relatório de bug.
Fazer isto com o NoChurn
O NoChurn lê a resposta ao inquérito de cancelamento do Google Play a cada cancelamento e coloca-a na cronologia do cliente, ao lado dos motivos recolhidos no seu próprio fluxo. O seu fluxo de cancelamento está disponível como API headless para a sua app Android: motivos, uma oferta (desconto, pausa ou mudança de plano) e um botão de cancelar sempre visível que abre a página da subscrição no Google Play. A Google mantém os pagamentos, as novas tentativas e o seu próprio botão de cancelar. Os motivos acionam depois os emails de reconquista e a pontuação de churn. Veja NoChurn + Google Play.