Como reduzir o churn no Google Play: período de tolerância e suspensão da conta
Como funcionam o período de tolerância e a suspensão da conta no Google Play, que notificações tratar, mensagens na app e como reconquistar utilizadores.
No Google Play, é a Google que cobra o cliente, faz novas tentativas dos pagamentos falhados e mostra o botão de cancelar. Não pode tentar de novo uma cobrança nem mexer no método de pagamento do cliente. O que controla: quanto tempo duram o período de tolerância (grace period) e a suspensão da conta (account hold), se o cliente mantém o acesso, o que a sua app lhe mostra e a rapidez com que reage quando uma subscrição recupera ou termina.
Este guia trata do período de tolerância, da suspensão da conta, das notificações de developer em tempo real (RTDN) e dos estados subscriptionsv2 por trás delas, das mensagens na app para pagamentos recusados, dos deep links para o centro de subscrições, do restauro e da nova subscrição, e das compras anuladas. Baseia-se apenas na documentação da Google: ciclo de vida das subscrições, sobre as subscrições, a referência das RTDN e ajudar a Google a contestar chargebacks (todos consultados em novembro de 2026).
O que a Google faz quando uma renovação falha
Quando um pagamento de renovação falha, a Google avisa o utilizador e continua a tentar renovar durante algum tempo antes de a subscrição terminar. A documentação da Google chama a isto o período de recuperação, composto por um período de tolerância seguido de uma suspensão da conta. Durante esse tempo, a Google envia ao utilizador emails e notificações a pedir que atualize o método de pagamento.
| Fase | Acesso do utilizador | subscriptionState |
RTDN quando começa |
|---|---|---|---|
| Período de tolerância | Mantém o acesso | SUBSCRIPTION_STATE_IN_GRACE_PERIOD |
SUBSCRIPTION_IN_GRACE_PERIOD (6) |
| Suspensão da conta | Perde o acesso | SUBSCRIPTION_STATE_ON_HOLD |
SUBSCRIPTION_ON_HOLD (5) |
| Recuperada | Acesso reposto | SUBSCRIPTION_STATE_ACTIVE |
SUBSCRIPTION_RECOVERED (1) |
| Não recuperada | Acesso terminado | SUBSCRIPTION_STATE_CANCELED, depois EXPIRED |
SUBSCRIPTION_CANCELED (3), depois SUBSCRIPTION_EXPIRED (13) |
Período de tolerância
O guia do ciclo de vida da Google diz:
- O período de tolerância está ativado por defeito em todos os planos base com renovação automática. Pode alterar a duração ou desativá-lo na Play Console, e a Google avisa que uma duração mais curta pode reduzir o número de subscrições recuperadas.
- Durante o período de tolerância, o utilizador deve manter o acesso.
autoRenewEnabledcontinuatruee a Google prolongaexpiryTimeaté ao fim do período de tolerância. - Se o utilizador corrigir o método de pagamento, a subscrição renova com a sua data de renovação original.
- Alterar a duração do período de tolerância só afeta as renovações que entram no período de tolerância depois da alteração.
- Se definir 0 dias, a Google espera mesmo assim pelo menos 1 dia (um “período de tolerância silencioso”) para dar tempo às novas tentativas. A subscrição continua ativa durante essas 24 horas e não recebe uma RTDN de período de tolerância.
Se a sua app só usa queryPurchasesAsync() para verificar o direito de acesso, os períodos de tolerância são tratados por si, porque a Play Billing Library continua a devolver essas compras como ativas.
Suspensão da conta
A suspensão da conta vem a seguir ao período de tolerância:
- Está ativada por defeito e a sua duração por defeito é 60 dias menos o período de tolerância. Pode alterá-la ou desativá-la na Play Console, com o mesmo aviso sobre durações mais curtas.
- Antes de a subscrição entrar em suspensão, a Google faz tentativas adicionais de cobrança durante até 48 horas, enquanto o utilizador mantém o acesso.
- Durante a suspensão da conta deve bloquear o acesso.
expiryTimeestá no passado equeryPurchasesAsync()já não devolve a subscrição. - Se o utilizador corrigir o pagamento, recebe
SUBSCRIPTION_RECOVERED, o purchase token mantém-se e tem de repor o acesso. Ao contrário da recuperação durante o período de tolerância, a data de faturação passa para a data da recuperação. - Se a suspensão terminar sem correção, recebe
SUBSCRIPTION_CANCELEDe depoisSUBSCRIPTION_EXPIRED. - Uma subscrição em pausa que é retomada com um método de pagamento que falha entra diretamente em suspensão da conta.
A Google nota também que os utilizadores podem cancelar, restaurar ou voltar a comprar durante a suspensão, por isso o seu backend tem de continuar a tratar esses eventos.
Notificações de developer em tempo real
As RTDN são entregues através do Cloud Pub/Sub e só trazem o tipo de notificação e o purchase token. A orientação da Google é chamar purchases.subscriptionsv2.get a partir do seu backend em cada notificação para ler o estado completo. A referência das RTDN lista os tipos de subscrição; os que mais importam para o churn:
| Código | Tipo | O que fazer |
|---|---|---|
| 6 | SUBSCRIPTION_IN_GRACE_PERIOD |
Manter o acesso; pedir ao utilizador que corrija o pagamento |
| 5 | SUBSCRIPTION_ON_HOLD |
Retirar o acesso; explicar ao utilizador porquê |
| 1 | SUBSCRIPTION_RECOVERED |
Repor o acesso (também enviado quando uma subscrição sai de pausa) |
| 2 | SUBSCRIPTION_RENEWED |
Renovação normal |
| 3 | SUBSCRIPTION_CANCELED |
Cancelamento voluntário ou involuntário; verificar canceledStateContext |
| 7 | SUBSCRIPTION_RESTARTED |
O utilizador restaurou uma subscrição cancelada ainda não expirada |
| 12 | SUBSCRIPTION_REVOKED |
Revogada antes da expiração, por exemplo após um chargeback; retirar o acesso |
| 13 | SUBSCRIPTION_EXPIRED |
Retirar o acesso |
| 4 | SUBSCRIPTION_PURCHASED |
Nova compra, incluindo uma nova subscrição |
Num cancelamento, canceledStateContext diz-lhe se foi o utilizador, o sistema ou o comerciante a cancelar, e nos cancelamentos pelo utilizador userInitiatedCancellation pode incluir o motivo que ele indicou. Use-o: um cancelamento após a suspensão da conta é um problema de pagamento, não uma decisão de sair.
Mensagens na app para pagamentos recusados
A Google oferece uma mensagem pronta para problemas de pagamento. Se chamar BillingClient.showInAppMessages() com InAppMessageCategoryId.TRANSACTIONAL, o Google Play mostra uma snackbar temporária a dizer ao utilizador que o pagamento foi recusado, com um deep link para corrigir o método de pagamento no Google Play. Segundo o guia de subscrições da Google, a mensagem é mostrada uma vez por dia durante o período de tolerância e a suspensão da conta, e a Google recomenda chamar a API sempre que o utilizador abre a app.
Se o utilizador corrigir o pagamento, a chamada devolve SUBSCRIPTION_STATUS_UPDATED com um purchase token. Atualize a subscrição a partir do seu backend e reponha o acesso de imediato.
Para os utilizadores que acedem ao seu conteúdo fora da app (na web, por exemplo), a Google sugere uma notificação push ou um email quando o acesso para por causa da suspensão da conta.
Deep links para o centro de subscrições
A sua app deve ter um link para a gestão das subscrições no ecrã de definições. A Google documenta dois URL:
- Todas as subscrições:
https://play.google.com/store/account/subscriptions - Uma subscrição (recomendado):
https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
O segundo abre a página de gestão dessa subscrição, onde o utilizador pode gerir os métodos de pagamento, cancelar, voltar a subscrever ou pausar. Use-o também nos seus próprios emails de pagamento.
Restauro, nova subscrição e reconquista
A Google separa duas ações, ambas mostradas ao utilizador como um botão Resubscribe na Play Store:
- Restauro: antes da expiração, uma subscrição cancelada é restaurada e continua a renovar como se nunca tivesse sido cancelada. Mantém o mesmo purchase token e recebe
SUBSCRIPTION_RESTARTED. A Google diz que todas as apps têm de suportar o restauro. - Nova subscrição: depois da expiração, se o plano base o permitir, o utilizador volta a comprar na Play Store. É uma nova compra com um novo token e uma RTDN
SUBSCRIPTION_PURCHASED. Tem de a confirmar (acknowledge); o campooutOfAppPurchaseContextajuda-o a ligá-la à subscrição e ao utilizador anteriores.
Dentro da sua app, o guia da Google descreve a reconquista de utilizadores que cancelaram com um ecrã para voltar a subscrever (por exemplo com um botão Reativar), antes ou depois da expiração. As ofertas de subscrição podem visar utilizadores elegíveis com descontos; as regras de elegibilidade são definidas na Play Console.
Reembolsos, compras anuladas e chargebacks
Quando uma compra é reembolsada ou alvo de chargeback, fica anulada. Recebe uma RTDN voidedPurchaseNotification com o purchase token, o ID da encomenda, productType e refundType (reembolso total ou reembolso parcial por quantidade). O guia do ciclo de vida da Google acrescenta que uma subscrição alvo de chargeback, ou revogada pelo seu backend com purchases.subscriptionsv2.revoke, desencadeia SUBSCRIPTION_REVOKED, e deve retirar o acesso. A Voided Purchases API dá-lhe mais detalhes num intervalo de tempo.
Nos chargebacks, a Google deixa-o dar a sua opinião. Quando um chargeback precisa de revisão do developer, o Google Play envia uma RTDN PendingRefundReviewNotification, e tem 24 horas para responder com a ReviewRefund API, indicando uma preferência de reembolso e quaisquer provas de utilização da compra. A Google só regista a sua primeira chamada.
Uma lista de verificação
- As RTDN são entregues ao seu backend, e cada uma desencadeia um
subscriptionsv2.get. - O período de tolerância e a suspensão da conta estão ativos, com durações escolhidas com intenção.
- O acesso mantém-se durante o período de tolerância e para durante a suspensão da conta.
-
showInAppMessages()é chamado quando a app arranca. - O seu ecrã de definições e os seus emails usam o deep link da subscrição específica.
- As compras de restauro e de nova subscrição são tratadas e confirmadas.
- Cada compra tem um ID de conta ofuscado, para a poder associar ao seu utilizador.
- As compras anuladas e as notificações de revisão de chargebacks são tratadas.
Fazer isto com o NoChurn
A Google mantém os pagamentos, as novas tentativas, o período de tolerância, a suspensão da conta e o botão de cancelar; o NoChurn não muda isso. O NoChurn lê as suas notificações de developer em tempo real, associa cada subscrição ao seu utilizador através do ID de conta ofuscado e coloca os períodos de tolerância, as suspensões, os cancelamentos, as recuperações e as compras anuladas na cronologia do cliente e numa pontuação de churn de 0 a 100. Onde a Google o permite, age: mensagens na sua app ou por email com um link para a página da subscrição no Play, um fluxo de cancelamento que a sua app mostra através da API headless antes de levar ao Google Play, e emails de reconquista aos dias 30, 60 e 90 com base no motivo de cancelamento. Veja NoChurn + Google Play.