Adicionar recursos específicos de assinatura

As inscrições são configuradas usando o Play Console do Android. Depois de configurar uma assinatura, é possível adicionar o Google Play Faturamento ao seu aplicativo para ativar um fluxo de compra para a assinatura. As assinaturas têm muitas características mencionadas na Visão geral do Google Play Faturamento, como período de faturamento, período 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 o seu envolvimento 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. Os casos de uso são os seguintes:

  • Processar as alterações de estados relacionadas à assinatura usando as notificações do desenvolvedor em tempo real.
  • Permitir que um usuário faça upgrade ou downgrade de uma assinatura, como o upgrade de um plano individual para um plano familiar.
  • Permitir que um usuário faça uma nova assinatura manualmente quando uma assinatura for cancelada, mas antes que o período termine.
  • Reembolsar o custo de uma assinatura.
  • Revogar uma assinatura.
  • Cancelar uma assinatura.
  • Adiar o faturamento para o usuário, de modo que a assinatura seja gratuita por determinado período.
  • Conquistar um cliente.

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 alterações de estado, como SUBSCRIPTION_PURCHASED ou SUBSCRIPTION_RECOVERED, para assinaturas. Elas permitem reagir de maneira proativa às mudanças de estado, aumentar o seu envolvimento 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 alterações de 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 se reinscreva porque a assinatura terminará no data de vencimento.
  • Se paymentState = 0, envie o usuário, com um link direto, ao centro 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, como pausar uma assinatura ou reativar uma assinatura após o vencimento. Para 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 aplicativo 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 para corrigir seu pagamento". Essa mensagem cria um link para as definiçõ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 colocada em espera. É necessário verificar o status atual da assinatura do usuário após expiryTimeMillis ter sido transmitido para retornar o status mais recente da assinatura.

O conteúdo da resposta JSON varia de acordo com o estado da assinatura, como é 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), o expiryTimeMillis será atualizado dinamicamente para uma data e hora futura, 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), o expiryTimeMillis será definido como uma data e hora futura, 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 estará suspensa (se você ativar a Suspensão de conta no Google Play Console) ou será cancelada (se você não ativar 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 da 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 porque o acesso à assinatura foi suspenso. Para fazer isso, envie uma mensagem no seu aplicativo com instruções sobre como corrigir a forma de pagamento e recuperar o acesso à assinatura. Por exemplo: "Há um problema com sua assinatura. Vá até as configurações de assinatura do Google Play para corrigir seu pagamento." Essa mensagem cria um link para as configurações de assinatura do Google Play para que eles possam corrigir a forma de pagamento. Também é necessário realizar algumas outras ações:

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

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 aplicativo.

O conteúdo da resposta JSON varia de acordo com o estado da assinatura, como é 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), o 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), o expiryTimeMillis será definido como um carimbo de data/hora futuro, e o 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, o expiryTimeMillis será definido como uma carimbo de data/hora passado, e o 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 é 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 do registro dos novos dados de assinatura no servidor, é possível exibir uma mensagem no seu aplicativo informando aos usuários que a assinatura deles foi restaurada. Por exemplo, "Sua forma de pagamento atualizada foi registrada e sua assinatura foi restaurada".

Cancelamento de assinatura: SUBSCRIPTION_CANCELLED

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

  • Exiba uma mensagem no seu aplicativo informando ao usuário que a assinatura foi cancelada, como "Sua assinatura expirará em **alguma_data". Vá até as configurações de assinatura do Google Play para restaurá-la." Essa mensagem cria um link para as configurações do Google Play para que o usuário possa renovar a assinatura.
  • É necessário oferecer a possibilidade de descartar 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 manualmente uma assinatura, ao contrário dos cancelamentos que ocorrem devido a uma forma de pagamento desatualizada. Não informe os usuários que cancelaram manualmente uma inscrição.

Alterar o preço de uma assinatura

O Google Play Console permite que você altere os preços das assinaturas que oferece no seu aplicativo. Essa funcionalidade será útil se você alterar a quantidade de conteúdo ou a extensão dos benefícios no aplicativo associados a determinada assinatura.

Para atualizar o preço de uma assinatura, conclua as seguintes etapas no Google Play Console:

  1. Navegue até o aplicativo que tem a assinatura cujo preço você gostaria de 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 alterar, conforme mostrado na Figura 1:

    Link "Editar" ao lado do preço da assinatura
    Figura 1. Editar o campo de preço de assinatura
  4. Digite o novo preço que você quer que a assinatura tenha.

    Quando você alterar 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 alteração de preço entrará em vigor imediatamente para novos assinantes e em 30 dias para assinantes atuais que concordarem com a alteração de preço.

    Caixa de diálogo de aviso de alteração de preço da assinatura
    Figura 2. Aviso sobre quando a alteração 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 alteração 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 alteração de preço de assinatura genérica
Figura 3. Caixa de diálogo genérica que notifica o usuário sobre a alteração do preço da assinatura

No seu aplicativo, é 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 seu aplicativo é 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 alteração de preço do Google Play, é possível apresentar sua própria mensagem ou caixa de diálogo explicando o motivo da mudança. Se você criar e mostrar 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 responder à caixa de diálogo personalizada, seu aplicativo se tornará ativo novamente e receberá um responseCode do tipo BillingClient.BillingResponse da biblioteca do Play Faturamento.

É possível processar a resposta do usuário na implementação do PriceChangeConfirmationListener. Por exemplo, você pode exibir uma mensagem de agradecimento personalizada caso o usuário concorde com a alteração de preço.

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

Se o usuário aceitar o novo preço da sua 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 do recurso de notificação do desenvolvedor em tempo real do Google. Se um usuário aceitar a alteração de preço, você receberá uma notificação do tipo SUBSCRIPTION_PRICE_CHANGE_CONFIRMED.

Lidar com a situação quando a mudança de preço é recusada

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

Caso seu aplicativo 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 lógica para determinar se o usuário tem assinaturas não vencidas para seu aplicativo (em que expiryTimeMillis está no futuro ou autoRenewing está definido como true):

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

        http://play.google.com/store/account/subscriptions
        
  • Se, por outro lado, um usuário tiver uma assinatura não vencida, será possível conduzi-lo diretamente à assinatura, como 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 código 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 seu aplicativo para ver a lista de assinaturas associadas a um usuário específico. Para ver um exemplo da lógica necessária do lado do servidor, consulte o método queryCurrentSubscriptions() dentro do aplicativo de amostra ClassyTaxi.

Uma tela "Configurações" que inclui um botão chamado "Assinaturas do Google Play"
Figura 4. O botão Assinaturas do Google Play nesta imagem mostra um exemplo de link "gerenciar assinaturas".
Uma tela de detalhes da assinatura que mostra as assinaturas de um usuário em todos os aplicativos
Figura 5. Tela mostrando todas as assinaturas de um usuário compradas fora do aplicativo, que o enviaram para esta tela.
Uma tela de detalhes da assinatura que mostra uma assinatura específica que o usuário comprou em um aplicativo específico
Figura 6. Tela mostrando detalhes de uma assinatura específica que o usuário comprou do aplicativo, que o enviou para esta 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 de uma assinatura comprando uma assinatura de nível diferente. Seu aplicativo precisa lidar com esse caso usando o mesmo fluxo de compra de produto no aplicativo 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 de compra. Para ter mais informações, 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 ter acesso aos seus serviços.

Quando um usuário faz upgrade ou downgrade, um estado SUBSCRIPTION_PURCHASED é enviado para o servidor de back-end seguro. Para processar 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 for alterada.

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 permanece 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 aplicativo 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 terminada. 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á por sua assinatura de 15 a 25 de abril. Em 26 de abril, serão cobrados R$ 3 por sua nova assinatura e outros R$ 3 no dia 26 de cada mês seguinte.
  • IMMEDIATE_AND_CHARGE_PRORATED_PRICE: usando este modo, a assinatura do Nível 1 de Paulo é imediatamente terminada. 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 por sua nova assinatura e outros R$ 3 no primeiro dia de cada mês seguinte.
  • IMMEDIATE_WITHOUT_PRORATION: usando este modo, a assinatura do Nível 1 de Paulo recebe imediatamente upgrade para o Nível 2, sem nenhum custo extra, e no dia 1º de maio são cobrados R$ 3 pelo novo nível de assinatura, e outros R$ 3 no primeiro dia de cada mês.
  • DEFERRED: usando este 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 seu novo nível de assinatura.

Permitir refazer a assinatura

Os usuários podem refazer uma assinatura cancelada, mesmo que a assinatura ainda não tenha expirado. É possível permitir que eles assinem novamente no seu aplicativo aplicando o mesmo fluxo de compra do produto no aplicativo à assinatura cancelada (usando o mesmo código de produto). Para ter mais informações, consulte Ativar a compra de um produto no aplicativo.

A nova assinatura substituirá a antiga e será renovada na mesma data de validade. Por exemplo, Ana tem uma assinatura do aplicativo 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 mensal. A nova assinatura será calculada de modo proporcional com o crédito restante, imediatamente ativada 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 aplicativo mostrará um botão "Comprar".
  • Se o usuário tiver uma assinatura cancelada (SUBSCRIPTION_CANCELLED), o aplicativo poderá ter um botão "Assinar de novo". Para saber mais informações, consulte Processar SUBSCRIPTION_CANCELLED.

Ao receber o token de compra, siga o mesmo processo de verificação usado para um novo token de compra. Para ter mais informações, 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 ter acesso aos seus serviços.

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);
  2. verificar se a assinatura já está cancelada (retorna um código de resposta HTTP de 200) (Purchases.subscriptions:cancel);
  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 processar o SUBSCRIPTION_CANCELLED, consulte Processar SUBSCRIPTION_CANCELLED.

Revogar uma assinatura

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

Cancelar uma assinatura

Um usuário também pode cancelar uma assinatura do aplicativo Play Store. Com a API Google Play Developer, também é possível 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 ter mais informações, 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 qualquer usuário ainda tiver direito ao conteúdo. A remoção do conteúdo adquirido por um usuário resultará em penalidades. Para ter mais informações, consulte a seção "Cancelamentos" em Criar uma assinatura.

Restaurar uma assinatura

Observação: para garantir uma experiência de usuário consistente em todos os aplicativos, a partir de 15 de abril de 2019, o Google ativará o recurso de restauração por padrão para todos os desenvolvedores com assinaturas ativadas. É altamente recomendável testar a funcionalidade de restauração antes dessa data para garantir que você processe corretamente as solicitações. Para facilitar essa transição, o Google permitiu a restauração de todas as contas de teste de licença. Para saber mais sobre como testar assinaturas, consulte Testar recursos específicos de assinaturas.

Se você precisar fazer alterações no código e não for possível concluí-las antes de 15 de abril de 2019, desative o Google Play Console acessando Presença na loja > Produtos no app> Configurações de assinatura e desmarcando Permitir que os usuários restaurem assinaturas no Google Play. É possível desmarcar essa opção depois que a alteração entrar em vigor em 15 de abril de 2019.

Uma assinatura cancelada permanece visível no aplicativo 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 Conta > Assinaturas no aplicativo Play Store.

Figura 4. Conta > seção Assinaturas no aplicativo Play Store

Existem duas maneiras de detectar quando uma assinatura é restaurada:

  1. Seu aplicativo receberá a notificação SUBSCRIPTION_RESTARTED. Veja mais detalhes em Notificações do desenvolvedor em tempo real.
  2. É possível chamar o método getPurchases() toda vez que o aplicativo for aberto. Depois que uma assinatura for restaurada, o purchaseToken será idêntico ao que era antes do cancelamento da assinatura.

Para permitir que os usuários restaurem assinaturas canceladas:

  1. Faça login no Google Play Console.
  2. Selecione seu aplicativo 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 5, e clique em Salvar.
    Figura 5. 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 continua a ser assinante do conteúdo e tem acesso total a ele, mas não é 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 temporário gratuito como parte de um pacote ou de uma oferta especial, por exemplo, dar acesso gratuito ao conteúdo da Web aos usuários que assinam uma revista impressa;
  • conceda acesso gratuito a usuários como gesto de boa fé.

O faturamento pode ser adiado de um dia a um ano por chamada de API. É possível chamar a API antes da nova data de faturamento extender o adiamento.

Por exemplo, Daniela tem uma assinatura mensal de conteúdo on-line para o aplicativo Fishing Quarterly. Normalmente, ela recebe uma cobrança de R$ 1,25 no primeiro dia de cada mês. Em março, ela participou de uma pesquisa on-line para o editor do aplicativo. A editora a recompensou com seis semanas gratuitas, adiando o próximo pagamento até 15 de maio (seis semanas após a data de faturamento previamente agendada para 1º de abril). Daniela não é cobrada em abril ou 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. Sua próxima data de renovação será 15 de junho.

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

Conquistar um cliente

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

Notícias e recursos mais recentes

Próximas etapas

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