O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Adicionar recursos específicos de assinatura

As assinaturas são configuradas usando o Play Console do Android. Depois de configurar uma assinatura, é possível adicionar o Google Play Faturamento ao seu app para ativar um fluxo de compra para ela. As assinaturas têm muitas características mencionadas na Visão geral do Google Play Faturamento, como período de faturamento e de carência, avaliação gratuita e assim por diante. Familiarize-se com esses conceitos antes de ler esta seção.

Veja os vídeos sobre assinaturas mais recentes para ter mais informações.

Além disso, antes de ler o restante desta página, ative as notificações do desenvolvedor em tempo real. As notificações do desenvolvedor em tempo real permitem reagir de maneira proativa às mudanças de estado, aumentar seu engajamento e reduzir a rotatividade de usuários. Para ativar essas notificações, consulte Notificações do desenvolvedor em tempo real.

Existem vários casos de uso de assinaturas para você tentar acomodar na sua solução geral do Google Play Faturamento:

Use combinações da biblioteca do Google Play Faturamento, da API Google Play Developer e das Notificações do desenvolvedor em tempo real para lidar com esses casos de uso.

Processar estados relacionados à assinatura com notificações do desenvolvedor em tempo real

As notificações do desenvolvedor em tempo real são notificações push do servidor que permitem monitorar mudanças de estado, como SUBSCRIPTION_PURCHASED ou SUBSCRIPTION_RECOVERED, para assinaturas. Elas permitem reagir de maneira proativa às mudanças de estado, aumentar seu engajamento e reduzir a rotatividade de usuários. Para ativar essas notificações, consulte Notificações do desenvolvedor em tempo real.

Se você ativar as Notificações do desenvolvedor em tempo real, seu servidor de back-end seguro receberá notificações alertando apenas sobre mudanças no estado de assinatura. É necessário chamar a API do desenvolvedor depois de receber as Notificações do desenvolvedor em tempo real para saber o status completo e atualizar seu próprio estado de back-end. Essas notificações informam apenas que o estado da assinatura mudou. Elas não fornecem informações completas sobre o status da assinatura.

Ao verificar a API do desenvolvedor, faça sempre o seguinte:

  • Se expiryTimeMillis estiver no futuro, conceda sempre a titularidade.
  • Se autoRenewing = false, tente fazer com que o usuário renove a assinatura, porque ela terminará na data de vencimento.
  • Se paymentState = 0, use um link direto para enviar o usuário à central de assinaturas para corrigir o problema de pagamento.

No futuro, podemos adicionar outras alterações de estado que afetem a titularidade de um usuário, por exemplo, a reativação de uma assinatura após o vencimento. Para garantir que sua integração esteja pronta para esses recursos, lembre-se de processar todas as notificações indefinidas chamando a API do desenvolvedor e agindo conforme descrito acima.

O usuário está em um período de carência: SUBSCRIPTION_IN_GRACE_PERIOD

A carência dura por determinado período com base na configuração do produto no aplicativo no Google Play Console. O Google Play tenta renovar a assinatura durante o período de carência. Para alertar o usuário sobre o problema de pagamento, mostre uma mensagem no seu app dizendo aos usuários como corrigir a forma de pagamento. Caso contrário, o usuário perderá o acesso à assinatura. Por exemplo, "Para evitar interrupções na sua conta, acesse as configurações de assinatura do Google Play e corrija seu pagamento". Essa mensagem será vinculada às configurações de assinatura do Google Play para que o usuário possa corrigir a forma de pagamento.

Para determinar quanto tempo o usuário tem no período de carência, chame a API Google Play Developer. O Google Play estende dinamicamente o valor expiryTimeMillis até o período de carência terminar. Durante esse período, verifique se a assinatura do usuário foi cancelada, renovada ou suspensa. É necessário verificar o status atual da assinatura do usuário depois que expiryTimeMillis tiver sido transmitido para ver o status mais recente da assinatura.

O conteúdo da resposta JSON varia de acordo com o estado da assinatura, conforme mostrado nos snippets a seguir. Por exemplo, se você consultar uma assinatura durante o período de carência (a forma de pagamento está errada), expiryTimeMillis será atualizado dinamicamente para um carimbo de data/hora futuro, e paymentState será definido como 0:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 0  # Payment pending
}

Se você consultar uma assinatura depois que ela tiver sido renovada (a forma de pagamento foi atualizada), expiryTimeMillis será definido como um carimbo de data/hora futuro, e paymentState será 1:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Se você consultar a assinatura após o término do período de carência, ela ficará suspensa (caso você ative a "Suspensão de conta" no Google Play Console) ou cancelada (caso você não ative a "Suspensão de conta" no Google Play Console). Para ver exemplos de respostas JSON para SUBSCRIPTION_ON_HOLD e SUBSCRIPTION_CANCELLED, consulte a seção Suspensão de conta: SUBSCRIPTION_ON_HOLD.

Suspensão de conta: SUBSCRIPTION_ON_HOLD

O período de suspensão da conta dura 30 dias. Durante esse tempo, é preciso verificar se a assinatura do usuário foi cancelada, restaurada ou recomprada. Depois, informe ao usuário por que o acesso à assinatura foi suspenso. Para fazer isso, envie uma mensagem no seu app com instruções sobre como corrigir a forma de pagamento e recuperar o acesso à assinatura. Por exemplo: "Há um problema com sua assinatura. Acesse as configurações de assinatura do Google Play para que o pagamento possa ser corrigido no Google Play." Essa mensagem cria um link para as configurações do Google Play para que a forma de pagamento possa ser corrigida. Também é necessário realizar algumas outras ações, como estas:

  • Se o usuário atualizar a forma de pagamento e a assinatura for recuperada, seu app precisará restaurar o acesso ao conteúdo assinado. Para saber mais, consulte Assinatura recuperada: SUBSCRIPTION_RECOVERED. No entanto, se a assinatura não for recuperada durante esse período de suspensão, ela será cancelada, e o usuário precisará adquirir uma nova assinatura.
  • Se os usuários esperam que seu app acesse a assinatura fora dele, envie uma notificação push ou um e-mail aos usuários para informar que a assinatura não está mais ativa. Se a assinatura só puder ser acessada quando o usuário abrir o app, informe-o sobre a interrupção da assinatura na próxima vez que o app for aberto.

Para confirmar se uma conta ainda está suspensa, verifique o status atual da assinatura do usuário sempre que ele tentar acessar o conteúdo assinado no seu app.

O conteúdo da resposta JSON varia de acordo com o estado da assinatura, conforme mostrado nos snippets a seguir. Por exemplo, se você consultar uma assinatura durante o período de suspensão da conta (a forma de pagamento está errada), expiryTimeMillis será definido como um carimbo de data/hora passado, e paymentState será definido como 0:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_past,
  "autoRenewing": true,
  ...
  "paymentState": 0  # Payment pending
}

Se você consultar uma assinatura depois que ela tiver sido recuperada (a forma de pagamento foi atualizada), expiryTimeMillis será definido como um carimbo de data/hora futuro, e paymentState será 1:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Se você consultar a assinatura depois que ela tiver sido suspensa por 30 dias e cancelada, expiryTimeMillis será definido como um carimbo de data/hora passado, e cancelReason será 1:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_past,
  "autoRenewing": false,
  ...
  "cancelReason": 1  # The system canceled the subscription
}

Assinatura recuperada: SUBSCRIPTION_RECOVERED

Após a recuperação de uma assinatura, geralmente o token de compra será idêntico ao que era antes da suspensão da conta do usuário. É possível, no entanto, que o usuário recupere o acesso ao conteúdo assinado recomprando a assinatura durante o período de suspensão. Nesse caso, um novo valor de token de compra é enviado para representar a nova instância da assinatura.

Depois de registrar os novos dados de assinatura no servidor, é possível exibir uma mensagem no seu app informando aos usuários que a assinatura foi restaurada. Por exemplo, "A forma de pagamento atualizada foi registrada, e sua assinatura foi restaurada".

Cancelamento de assinatura: SUBSCRIPTION_CANCELLED

Um usuário poderá cancelar uma assinatura na Play Store por vontade própria ou ter a assinatura cancelada automaticamente se não recuperá-la depois que ela tiver sido suspensa. Quando o servidor de back-end seguro receber uma notificação do desenvolvedor em tempo real SUBSCRIPTION_CANCELLED:

  • Exiba uma mensagem no app informando ao usuário que a assinatura foi cancelada, por exemplo, "Sua assinatura expirará em **alguma_data". Acesse as configurações de assinatura do Google Play para restaurá-la". Essa mensagem cria um link para as configurações de assinatura do Google Play para que o usuário possa renová-la.
  • Você precisa oferecer a possibilidade de dispensar permanentemente essa mensagem.

Quando você receber o novo token de compra, siga as etapas em Verificar um token de compra.

Observação: as mensagens de cancelamento podem frustrar os usuários, especialmente os que cancelaram uma assinatura manualmente, ao contrário dos cancelamentos que ocorrem devido a uma forma de pagamento desatualizada. Você pode optar por não informar os usuários que cancelaram manualmente uma assinatura.

O usuário pausou a assinatura: SUBSCRIPTION_PAUSED

Ao consultar uma assinatura que está atualmente pausada, se expiryTimeMillis for uma data passada e autoResumeTimeMillis for uma data futura, suspenda o acesso do usuário ao conteúdo e considere a titularidade do usuário como pausada:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": $subscription_entitlement_end_time (in the past)
  "autoRenewing": true,
  "paymentState": 1  # Payment received
  ...
  "autoResumeTimeMillis": $subscription_auto_resume_time (in the future)
}

Alterar o preço de uma assinatura

Aviso: não mude o preço de uma assinatura do tipo Assine com o Google (link em ingles).

O Google Play Console permite que você mude os preços das assinaturas que oferece no seu app. Essa funcionalidade é útil se você muda a quantidade de conteúdo ou a extensão dos benefícios no app associados a uma determinada assinatura.

Para atualizar o preço de uma assinatura, conclua as etapas a seguir no Google Play Console.

  1. Navegue até o app que contém a assinatura cujo preço você quer alterar.
  2. Selecione Presença na loja > Produtos no aplicativo e abra a guia Assinaturas.
  3. Selecione o link Editar ao lado do preço que você quer mudar, conforme mostrado na Figura 1:

    Link
    Figura 1. Como editar o campo de preço de assinatura
  4. Digite o novo preço que você quer que a assinatura tenha.

    Quando você mudar o preço, uma caixa de diálogo de aviso será exibida conforme mostrado na Figura 2. Essa caixa de diálogo explica que a mudança de preço entrará em vigor imediatamente para novos assinantes e em 30 dias para assinantes já existentes que concordarem com ela.

    Caixa de diálogo de aviso de mudança no preço da assinatura
    Figura 2. Aviso sobre quando a mudança do preço da assinatura entrará em vigor

Comunicar a mudança de preço ao usuário

Você tem pelo menos sete dias para entrar em contato com os assinantes atuais sobre a mudança de preço antes que o Google Play comece a notificá-los. Quando o Google Play notifica os usuários, ele faz isso exibindo uma caixa de diálogo semelhante à mostrada na Figura 3. Essa caixa de diálogo mostra o preço antigo, o novo preço e a data em que o novo preço entra em vigor.

Caixa de diálogo de mudança de preço de assinatura genérica
Figura 3. Caixa de diálogo genérica que notifica o usuário sobre a mudança do preço da assinatura

No seu app, é possível exibir essa caixa de diálogo das seguintes maneiras:

Lançar o fluxo de confirmação de mudança de preço

Para exibir a caixa de diálogo quando o app for iniciado, adicione a seguinte lógica à classe de cliente de faturamento:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
        .setSkuDetails(changedPriceSubscriptionSkuDetails)
        .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                if (responseCode == BillingResponse.OK) {
                    // User has confirmed the price change.
                } else if (responseCode == BillingResponse.USER_CANCELED) {
                    // User hasn't confirmed the price change.
                }
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
        .setSkuDetails(changedPriceSubscriptionSkuDetails)
        .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                    // User has confirmed the price change.
                } else if (responseCode == BillingResponse.USER_CANCELED) {
                    // User hasn't confirmed the price change.
                }
            }
        });

Antes de exibir a caixa de diálogo de mudança de preço do Google Play, é possível apresentar sua própria mensagem ou caixa de diálogo explicando o motivo da alteração. Se você cria e mostra esse tipo de mensagem personalizada, é mais provável que seus usuários optem por renovar a assinatura com o novo preço.

Depois que o usuário responde à sua caixa de diálogo personalizada, seu app volta a ficar ativo e recebe um responseCode do tipo BillingClient.BillingResponse da biblioteca do Google Play Faturamento.

Você pode processar a resposta do usuário na sua implementação do PriceChangeConfirmationListener. Por exemplo, você pode exibir uma mensagem de agradecimento personalizada caso o usuário concorde com a mudança de preço.

Processar a confirmação do usuário sobre a mudança de preço

Se o usuário aceitar o novo preço da assinatura, a biblioteca também enviará uma notificação ao servidor de faturamento. É possível receber notificações sobre a resposta do usuário à caixa de diálogo com o recurso Notificação do desenvolvedor em tempo real do Google. Se um usuário aceitar a mudança de preço, você receberá uma notificação do tipo SUBSCRIPTION_PRICE_CHANGE_CONFIRMED.

Processar uma recusa da mudança de preço

É possível que o usuário não concorde com a mudança de preço no PriceChangeConfirmationListener do seu app. Nesse caso, mantenha a assinatura do produto antigo, que expirará na próxima data de renovação. Se um usuário não aceitar a mudança de preço até o momento em que a assinatura antiga expirar, a assinatura será cancelada, e você receberá uma notificação do desenvolvedor em tempo real do tipo SUBSCRIPTION_CANCELED.

Caso seu app ofereça assinaturas, inclua um link em uma tela de configurações ou preferências que permita aos usuários gerenciar as assinaturas. Um exemplo desse link é mostrado na Figura 4. No gerenciador de cliques desse link, adicione uma lógica para determinar se o usuário tem assinaturas não vencidas do seu app (em que expiryTimeMillis está no futuro ou autoRenewing está definido como true):

  • Se um usuário não tiver essas assinaturas no seu app, direcione-o para a página que mostra todas as outras assinaturas dele, conforme mostrado na Figura 5, usando o seguinte URL:

    https://play.google.com/store/account/subscriptions
    
  • Se, por outro lado, um usuário tiver uma assinatura não vencida, você poderá conduzi-lo diretamente à assinatura, conforme mostrado na Figura 6, usando o seguinte URL:

    https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
    

O SKU de cada assinatura corresponde ao ID do produto que você atribuiu a ele quando foi criado no Play Console. Para determinar programaticamente o SKU de uma assinatura existente, consulte o back-end do app e veja a lista de assinaturas associadas a um usuário específico.

Uma tela
Figura 4. O botão Assinaturas do Google Play nesta imagem fornece um exemplo de um link para "gerenciar assinaturas".
Uma tela de detalhes da assinatura que mostra as assinaturas de um usuário em todos os apps
Figura 5. Tela mostrando todas as assinaturas de um usuário compradas fora do app que o encaminhou para essa tela.
Uma tela de detalhes de uma assinatura específica que o usuário comprou em um app específico
Figura 6. Tela mostrando detalhes de uma assinatura específica que o usuário comprou pelo app que o encaminhou para essa tela.

Permitir upgrade ou downgrade de assinatura

Você pode oferecer aos usuários diferentes níveis de assinatura, como um nível básico e um nível premium. A Figura 7 mostra uma tela que oferece dois níveis de assinatura:

Figura 7. Níveis de assinatura.

É necessário que os usuários possam acessar uma tela semelhante para fazer upgrade ou downgrade, comprando uma assinatura de nível diferente. O app precisa processar esse caso usando o mesmo fluxo de compras do produto no aplicativo que foi usado para comprar a assinatura original em Ativar a compra de um produto no aplicativo. No entanto, ao fazer upgrade ou downgrade, você transmite os IDs do produto para a assinatura atual e a assinatura futura (de upgrade ou downgrade) para o objeto BillingFlowParams usando o método setOldSku(). Exemplo:

Kotlin

val flowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(newSkuDetails)
        .setOldSku(currentId)
        .build()
val responseCode = billingClient.launchBillingFlow(activity, flowParams)

Java

BillingFlowParams flowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(newSkuDetails)
        .setOldSku(currentId)
        .build();
int responseCode = billingClient.launchBillingFlow(flowParams);

Ao receber o token de compra, siga o mesmo processo de verificação usado para um novo token. Para saber mais, consulte Verificar uma compra. A API Google Play Developer retornará um linkedPurchaseToken no recurso de assinatura. Invalide o token fornecido no linkedPurchaseToken para garantir que o token antigo não seja usado para acessar seus serviços.

Quando um usuário faz upgrade ou downgrade, um estado SUBSCRIPTION_PURCHASED é enviado ao servidor de back-end seguro. Para gerenciar o SUBSCRIPTION_PURCHASED, consulte Processar SUBSCRIPTION_PURCHASED.

Definir modo de cálculo proporcional

Ao fazer upgrade ou downgrade de uma assinatura, é possível definir replaceSkusProrationMode na classe BillingFlowParams para mostrar detalhes sobre o cálculo proporcional que será aplicado quando a assinatura mudar.

Kotlin

val flowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(skuDetails)
        .setOldSku(oldSku)
        .setReplaceSkusProrationMode(replaceSkusProrationMode)
        .build()
val responseCode = billingClient.launchBillingFlow(activity, flowParams)

Java

BillingFlowParams flowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(skuDetails)
        .setOldSku(oldSku)
        .setReplaceSkusProrationMode(replaceSkusProrationMode)
        .build()
int responseCode = billingClient.launchBillingFlow(activity, flowParams);

A tabela a seguir lista todos os modos de cálculo proporcional.

IMMEDIATE_WITH_TIME_PRORATION A substituição entrará em vigor imediatamente, e o novo prazo de expiração será calculado de modo proporcional e creditado ou cobrado do usuário. Esse é o comportamento padrão atual.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE A substituição entra em vigor imediatamente, e o ciclo de faturamento permanece o mesmo. O preço para o período restante será cobrado.

Observação: esta opção só está disponível para upgrade de assinatura.

IMMEDIATE_WITHOUT_PRORATION A substituição entrará em vigor imediatamente, e o novo preço será cobrado no próximo período de recorrência. O ciclo de faturamento permanecerá o mesmo.
DEFERRED A substituição entra em vigor no próximo período de recorrência.

Para entender como cada modo funciona, imagine o seguinte cenário:

Paulo tem uma assinatura de conteúdo on-line do app Country Gardener. Atualmente, ele tem uma assinatura mensal da versão de Nível 1 do conteúdo, que tem conteúdo apenas de texto. Essa assinatura custa R$ 2/mês e é renovada no primeiro dia do mês.

Em 15 de abril, Paulo optou por fazer upgrade para a assinatura de Nível 2, que inclui atualizações de vídeo e custa R$ 3/mês.

Ao fazer upgrade da assinatura, o desenvolvedor seleciona um modo de cálculo proporcional. A lista a seguir identifica como cada modo de cálculo proporcional afeta a assinatura de Paulo.

  • IMMEDIATE_WITH_TIME_PRORATION: usando este modo, a assinatura do Nível 1 de Paulo é imediatamente finalizada. Como o pagamento vale por um mês inteiro (de 1º a 30 de abril), mas Paulo usou apenas metade desse período, metade da assinatura de um mês (R$ 1) é aplicada à nova assinatura. No entanto, como essa nova assinatura custa R$ 3/mês, o saldo de crédito de R$ 1 só paga por 10 dias. Assim, o crédito de Paulo pagará a assinatura de 15 a 25 de abril. Em 26 de abril, serão cobrados R$ 3 pela nova assinatura e outros R$ 3 no dia 26 de cada mês seguinte.
  • IMMEDIATE_AND_CHARGE_PRORATED_PRICE: usando este modo, a assinatura de Nível 1 do Paulo é imediatamente finalizada. Como o pagamento vale por um mês inteiro (de 1º a 30 de abril), mas Paulo usou apenas metade desse período, metade da assinatura de um mês (R$ 1) é aplicada à nova assinatura. No entanto, como essa nova assinatura custa R$ 3/mês, os 15 dias restantes custam R$ 1,50. Então, será cobrada a diferença de R$ 0,50 pela nova assinatura e outros R$ 3 no primeiro dia de cada mês seguinte.
  • IMMEDIATE_WITHOUT_PRORATION: usando esse modo, a assinatura do Nível 1 de Paulo recebe imediatamente upgrade para o Nível 2, sem nenhum custo extra. No dia 1º de maio serão cobrados R$ 3 pelo novo nível de assinatura e outros R$ 3 no primeiro dia de cada mês.
  • DEFERRED: usando esse modo, a assinatura do Nível 1 de Paulo continua até que expire, em 30 de abril. No dia 1º de maio, a assinatura do Nível 2 entra em vigor, e Paulo recebe uma cobrança de R$ 3 pelo novo nível de assinatura.

Pausar uma assinatura

Você pode evitar o desligamento voluntário de usuários permitindo que eles pausem a assinatura. Quando o recurso de pausa é ativado, os usuários podem optar por pausar a assinatura por um período entre uma semana e três meses, dependendo do período recorrente. Depois de ativar a opção de pausa, ela será exibida na central de assinaturas e no fluxo de cancelamento. Observe que os limites de pausa de uma semana e de três meses estão sujeitos a alterações a qualquer momento. Observe também que as assinaturas anuais não podem ser pausadas.

Importante: para ativar a pausa, também é necessário ativar a suspensão da conta.

Para permitir que os usuários pausem a assinatura, faça o seguinte:

  1. Faça login no Google Play Console.
  2. Selecione seu app e acesse Presença na loja > Produtos no aplicativo > Assinaturas.
  3. Abra a seção Configurações de assinatura.
  4. Marque Ativar pausa.

Uma pausa de assinatura entra em vigor somente após o término do período de faturamento atual. Enquanto estiver em pausa, o usuário não terá acesso à assinatura. No final do período de pausa, a assinatura será retomada, e o Google tentará fazer a renovação. Se a retomada for bem-sucedida, a assinatura será reativada. Se a retomada falhar devido a um problema de pagamento, o usuário entrará no estado de suspensão da conta, conforme mostrado na Figura 8:

Diagrama de transição do estado pausado para o estado de suspensão de conta.
Figura 8. Um usuário faz uma pausa na assinatura, e a conta entra no estado de suspensão.

Um usuário também pode optar por retomar manualmente uma assinatura a qualquer momento durante o período de pausa, conforme mostrado na Figura 9. Quando um usuário retoma manualmente, a data de faturamento muda para a data de retomada manual.

Diagrama de transição do estado pausado para o estado retomado.
Figura 9. Um usuário faz uma pausa e, em seguida, retoma a assinatura.

Quando uma assinatura for pausada, recomendamos que você informe ao usuário pelo app que ele não terá acesso à assinatura porque ela está pausada. Você também precisa fornecer uma maneira para o usuário retomar manualmente a assinatura usando um link direto para o Google Play.

Você pode detectar quando uma assinatura for pausada e retomada por qualquer um dos seguintes métodos:

  • Usando a API Google Play Developer, procure os campos expiryTimeMillis e autoResumeTimeMillis na resposta Purchases.subscriptions:

    • Se o usuário tiver uma pausa pendente, ambos os campos expiryTimeMillis e autoResumeTimeMillis conterão datas no futuro.
    • Se o usuário estiver atualmente em pausa, autoResumeTimeMillis conterá uma data futura, e expiryTimeMillis conterá uma data no passado.
    • Se o usuário tiver retomado a assinatura, a resposta conterá dados de assinatura ativos.
    • Se o usuário tiver a conta suspensa, a resposta conterá dados de suspensão da conta.
  • Use as notificações do desenvolvedor em tempo real (RTDN, na sigla em inglês). Para garantir que você receba as mais recentes informações sobre a pausa da assinatura, chame a API Google Play Developer em resposta a todos os tipos de notificação RTDN, incluindo os tipos que não são reconhecidos. Os tipos de notificação relevantes para pausa de assinatura são os seguintes:

    • SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED: um usuário optou por pausar ou retomar a assinatura antes que a pausa entre em vigor.
    • SUBSCRIPTION_PAUSED: a assinatura está pausada no momento.
    • SUBSCRIPTION_RENEWED: a assinatura foi retomada.
    • SUBSCRIPTION_ON_HOLD: uma tentativa de retomar a assinatura não foi bem-sucedida, e a assinatura está atualmente em suspensão de conta.
  • No dispositivo Android, use a biblioteca do Google Play Faturamento para chamar queryPurchases() sempre que o app for iniciado. Use o PurchasesUpdatedListener para receber atualizações enquanto o app estiver em execução. A lista de objetos Purchase em onPurchasesUpdated() não contêm assinaturas pausadas.

Permitir refazer a assinatura

Os usuários podem refazer uma assinatura cancelada, mesmo que ela ainda não tenha expirado. É possível permitir que eles refaçam a assinatura dentro do seu app aplicando o mesmo fluxo de compra de produto no aplicativo da assinatura cancelada, usando o mesmo ID do produto.

A nova assinatura substituirá a assinatura ativa e terá a mesma data de validade da assinatura substituída. Por exemplo, Ana tem uma assinatura do app Example Music. A assinatura está prevista para expirar em 1º de agosto. Em 10 de julho, ela refaz a assinatura de um mês pelo mesmo preço. A nova assinatura será calculada de modo proporcional ao crédito restante da assinatura anterior. Ela será ativada imediatamente e renovada em 1º de agosto.

É necessário exibir uma IU apropriada para a reativação da assinatura:

  • Se um usuário não tiver uma assinatura ativa, o app mostrará um botão "Comprar".
  • Se o usuário tiver uma assinatura cancelada (SUBSCRIPTION_CANCELLED), o app poderá ter um botão "Assinar de novo". Para saber mais, consulte Processar SUBSCRIPTION_CANCELLED.

Ao receber o token de compra, siga o mesmo processo de verificação usado para um novo token. Para saber mais, consulte Verificar uma compra. A API Google Play Developer retornará um linkedPurchaseToken no recurso de assinatura. Invalide o token fornecido no linkedPurchaseToken para garantir que o token antigo não seja usado para acessar seus serviços.

Oferecer um código promocional para uma assinatura

Promoções ou códigos promocionais permitem que você ofereça gratuitamente produtos de aquisição única ou avaliações de assinatura a um número limitado de usuários. Para implementar códigos promocionais para avaliações de assinatura, consulte Implementar uma promoção.

Reembolsar o custo de uma assinatura

O Google Play não fornece uma janela de reembolso para assinaturas. Em vez disso, é necessário que os usuários solicitem um reembolso diretamente para você. Eles podem solicitar um reembolso usando a página "Meus pedidos" na Play Store ou entrando em contato diretamente com você.

Se você receber solicitações de reembolso, poderá usar a API Google Play Developer ou o Merchant Center para:

  1. cancelar a assinatura (Purchases.subscriptions: cancel) (link em inglês);
  2. verificar se a assinatura já está cancelada. Retorna um código de resposta HTTP de 200 (Purchases.subscriptions:cancel) (link em inglês);
  3. reembolsar o pagamento do usuário sem cancelar a assinatura (Purchases.subscriptions:refund).

Se você quiser reembolsar mais do que o pagamento mais recente, poderá processar outros reembolsos por meio do Merchant Center.

Se a assinatura for cancelada, um estado SUBSCRIPTION_CANCELLED será enviado ao servidor de back-end seguro. Para gerenciar o SUBSCRIPTION_CANCELLED, consulte Processar SUBSCRIPTION_CANCELLED.

Revogar uma assinatura

Com a API Google Play Developer, é possível revogar uma assinatura usando Purchases.subscriptions:revoke. A revogação remove instantaneamente o acesso à assinatura e costuma acontecer quando você ou o Google suspeita de fraude.

Cancelar uma assinatura

Um usuário também pode cancelar uma assinatura no app Play Store. Usando a API Google Play Developer, você também pode cancelar uma assinatura usando Purchases.subscriptions:cancel.

Observação: essa API costuma ser usada quando os usuários solicitam um reembolso na página "Meus pedidos". Para saber mais, consulte Reembolsar o custo de uma assinatura.

Os usuários mantêm o acesso ao conteúdo até o final do ciclo de faturamento atual. Quando o ciclo de faturamento termina, o acesso é revogado.

Importante: não remova uma assinatura do Google Play enquanto algum usuário ainda tiver direito ao conteúdo. A remoção do conteúdo adquirido por um usuário resultará em penalidades. Para saber mais, consulte a seção "Cancelamentos" em Criar uma assinatura.

Restaurar uma assinatura

Observação: o recurso de restauração é ativado por padrão para todos os desenvolvedores que ativaram assinaturas. É altamente recomendável que você teste a funcionalidade de restauração para garantir o gerenciamento correto das restaurações. Para ajudar nos testes, o Google ativou o recurso de restauração para todas as contas de teste de licença. Para saber mais sobre como testar assinaturas, consulte Testar recursos específicos de assinaturas.

Você pode desativar esse recurso no Google Play Console acessando Presença na loja > Produtos no app > Configurações de assinatura e desmarcando Permitir que usuários restaurem assinaturas no Google Play.

Uma assinatura cancelada permanecerá visível no app Play Store até a data de validade. Um usuário pode restaurar uma assinatura cancelada antes que ela expire clicando em RESTAURAR na seção Assinaturas do app Play Store, conforme mostrado na figura 10:

Figura 10. Seção Conta > Assinaturas no app Play Store

Existem duas maneiras de detectar quando uma assinatura é restaurada:

  1. Seu app recebe a notificação SUBSCRIPTION_RESTARTED. Veja mais detalhes em Notificações do desenvolvedor em tempo real.
  2. Você pode chamar o método getPurchases() toda vez que o app for aberto. Depois que uma assinatura tiver sido restaurada, o purchaseToken será idêntico ao que era antes do cancelamento dela.

Para permitir que os usuários restaurem assinaturas canceladas:

  1. Faça login no Google Play Console.
  2. Selecione seu app e navegue até Presença na loja > Produtos no aplicativo.
  3. Selecione a guia Assinaturas e expanda a seção Configurações de assinatura.
  4. Marque a caixa de seleção Permitir que os usuários restaurem assinaturas no Google Play, conforme mostrado na Figura 11, e clique em Salvar.
    Figura 11. A caixa de seleção Ativar a restauração de assinatura no Google Play Console

Adiar o faturamento

Com a API Google Play Developer, você pode adiantar a próxima data de faturamento para um assinante usando Purchases.subscriptions:defer. O usuário continuará a ser assinante do conteúdo e terá acesso total a ele, mas não será cobrado durante o período de adiamento. A data de renovação da assinatura será atualizada para refletir a nova data. O faturamento adiado permite que você:

  • conceda aos usuários acesso gratuito como parte de um pacote ou de uma oferta especial, por exemplo, dar acesso gratuito ao conteúdo da Web a usuários que assinam uma revista impressa;
  • conceda acesso gratuito a clientes como gesto de boa-fé.

O faturamento pode ser adiado por um período que varia de um dia a um ano por chamada de API. É possível chamar a API antes da nova data de faturamento para estender o adiamento.

Por exemplo, Daniela tem uma assinatura mensal de conteúdo on-line para o aplicativo Fishing Quarterly. Normalmente, ela recebe R$ 1,25 no primeiro dia de cada mês. Em março, ela participou de uma pesquisa on-line para o editor do app. O editor a recompensou com seis semanas gratuitas, adiando o próximo pagamento até 15 de maio (seis semanas após a data de faturamento, anteriormente agendada para 1º de abril). Daniela não é cobrada em abril nem no início de maio e ainda tem acesso ao conteúdo. Em 15 de maio, ela é cobrada pela taxa de assinatura normal de R$ 1,25 para o mês. A próxima data de renovação será 15 de junho.

Notifique o usuário (por e-mail ou dentro do app) para informar que a data de faturamento foi adiada (alterada).

Reconquistar um cliente

Se um cliente fiel deixou seu serviço após um longo período, ofereça um ID de produto que represente um preço especial para a assinatura, também chamado de SKU de recuperação de assinaturas. Você pode fornecer a oferta no seu app ou notificar o usuário sobre a oferta em um e-mail. Para iniciar uma assinatura de recuperação, inicie o fluxo de compra no seu app Android usando a biblioteca do Google Play Faturamento. Esse é o mesmo processo de uma nova assinatura, mas você pode determinar qual SKU estará disponível para o usuário.

Notícias e recursos mais recentes

A seguir

Depois de adicionar recursos específicos da assinatura, vá até Práticas recomendadas.