Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

Assinaturas dentro do aplicativo

Assinaturas permitem vender conteúdo, serviços ou recursos no aplicativo com faturamento automatizado e recorrente. Você pode adaptar uma implementação existente de Faturamento no aplicativo facilmente para vender assinaturas.

Este documento visa destacar os detalhes da implementação específicos de assinaturas, além de algumas estratégias para os modelos de negócio e faturamento associados.

  • As assinaturas permitem vender produtos com faturamento automatizado e recorrente em uma série de intervalos.
  • É possível oferecer um período de experiência configurável para assinaturas mensais e anuais.
  • É possível gerenciar assinaturas pelo Developer Console ou pela Google Play Developer API.
  • Os usuários compram assinaturas dentro do seu aplicativo, em vez de diretamente no Google Play.
  • Os usuários podem renovar as assinaturas enquanto houver uma assinatura ativa.
  • Eles também podem melhorar ou rebaixar uma assinatura no meio de um período de assinatura. O custo da assinatura antiga é rateado e a parte não usada é aplicada à assinatura substituta.
  • É possível adiar o faturamento da assinatura de determinado usuário para gerenciar contas ou oferecer recompensas.

Visão geral

Assinatura é um tipo de produto oferecido em Faturamento no aplicativo que permite vender conteúdo, serviços ou recursos a usuários de dentro do aplicativo, com faturamento recorrente e automatizado no intervalo especificado. É possível vender assinaturas a quase todos os tipos de conteúdo digital, em qualquer tipo de aplicativo ou jogo.

Assim como outros produtos internos de um aplicativo, deve-se configurar e publicar assinaturas usando o Developer Console e vendê-las dentro dos aplicativos instalados em dispositivos Android. No Developer Console, você cria produtos de assinatura e adiciona-os a uma lista de produtos, depois define um preço e período de experiência opcional para cada um deles, escolhe um intervalo de faturamento e, por fim, publica. Para saber mais sobre como usar o Developer Console, consulte Configurar itens de assinatura.

Quando os usuários compram assinaturas nos aplicativos, o Google Play lida com todos os detalhes de finalização da compra para que os aplicativos nunca precisem processar transações financeiras diretamente. O Google Play processa todos os pagamentos por assinatura pelo Google Payments, assim como faz para produtos padrão internos de um aplicativo e compras de aplicativos. Isso garante um fluxo de compra consistente e familiar para os usuários.

Depois de comprar assinaturas, os usuários podem vê-las e cancelá-las na tela My Apps no aplicativo da Play Store ou na página de detalhes de produtos do aplicativo no mesmo aplicativo. Para saber mais sobre como lidar com cancelamentos de usuários, consulte Cancelamento de assinatura.

Além de chamadas a APIs do lado do cliente, é possível usar a In-app Billing API do lado do servidor para fornecer acesso ampliado a conteúdo a compradores de assinaturas (por exemplo, acesso a seu site ou outro serviço). A API do lado do servidor permite validar a situação de uma assinatura quando os usuários acessam seus outros serviços. Para obter mais informações sobre a API, consulte Google Play Developer API.

Dentro dos seus aplicativos Android, você também pode gerar na base de assinantes externos existentes.

  • Se você vender assinaturas em um site, por exemplo, poderá adicionar sua própria lógica empresarial ao aplicativo Android para determinar se o usuário já comprou alguma outra assinatura e, se sim, permitir acesso ao conteúdo ou, se não, oferecer uma compra de assinatura no Google Play.
  • É possível implementar sua própria solução para compartilhar assinaturas em quantos aplicativos ou produtos quiser. Por exemplo: você pode vender uma assinatura que dá ao assinante acesso a um conjunto de aplicativos, jogos ou outro conteúdo por uma taxa anual ou mensal. Para implementar essa solução, você pode adicionar sua própria lógica empresarial ao aplicativo para determinar se o usuário já comprou determinada assinatura e, se sim, permitir acesso ao conteúdo.

Em geral, os mesmos termos e políticas básicos que se aplicam a produtos comuns internos de um aplicativo a assinaturas, porém há algumas diferenças. Para obter informações completas sobre os termos e as políticas atuais, leia o documento de políticas.

Para conhecer os requisitos mínimos do sistema para assinaturas, consulte as Notas da versão.

Configurar itens de assinatura

Para criar e gerenciar assinaturas, você pode usar o Developer Console para definir uma lista de produtos para o aplicativo e depois configurar os seguintes atributos para cada produto de assinatura:

  • Tipo de compra: sempre definir como Subscription.
  • ID da assinatura: Um identificador da assinatura
  • Estado de publicação: Não publicada/publicada
  • Idioma: O idioma padrão de exibição da assinatura
  • Título: O título do produto de assinatura
  • Descrição: Detalhes que dão ao usuário informações sobre a assinatura
  • Preço: Preço padrão da assinatura por recorrência
  • Recorrência: Intervalo de recorrência de faturamento
  • Precificação de moeda adicional (pode ser preenchido automaticamente)

Para obter detalhes sobre como adicionar e configurar produtos no Developer Console, consulte Administração do faturamento no aplicativo.

Também é possível criar e gerenciar assinaturas com a Google Play Developer API.

Precificação da assinatura

Ao criar uma assinatura no Developer Console, você pode definir um preço para ela em qualquer moeda disponível. Cada assinatura deve ter um preço diferente de zero. É possível dar preços diferentes a assinaturas para o mesmo conteúdo — por exemplo, pode-se oferecer um desconto ou uma assinatura anual referente à equivalente mensal.

Importante: Para modificar o preço de uma assinatura, você pode publicar um novo ID de produto de assinatura com um novo preço e oferecê-la no aplicativo no lugar do produto original. Os usuários que já tiverem comprado continuarão sendo cobrados do valor original, mas os novos usuários serão cobrados do novo preço.

Faturamento ao usuário

No Developer Console, é possível configurar produtos de assinatura com faturamento recorrente e automatizado com o intervalo que você quiser:

  • Semanal — o Google Play envia cobrança à conta do Google Payments do cliente no momento da compra e toda semana após a data de compra original.
  • Mensal — o Google Play envia cobrança à conta do Google Payments do cliente no momento da compra e todo mês na data da compra (intervalos de faturamento exatos podem variar um pouco com o tempo).
  • 3 meses — o Google Play envia cobrança à conta do Google Payments do cliente no momento da compra e posteriormente a cada três meses (intervalos de faturamento exatos podem variar um pouco com o tempo).
  • 6 meses — o Google Play envia cobrança à conta do Google Payments do cliente no momento da compra e posteriormente a cada seis meses (intervalos de faturamento exatos podem variar um pouco com o tempo).
  • Anual — o Google Play envia cobrança à conta do Google Payments do cliente no momento da compra e novamente na mesma data nos anos seguintes.
  • Temporada — o Google Play envia cobrança à conta do Google Payments do cliente no início de cada “temporada” (você especifica as datas de início e término da temporada). Essa modalidade é voltada para compras anuais de conteúdo de período definido (como conteúdo relacionado a esportes). A assinatura permanece ativa até o fim da temporada e reinicia no ano seguinte no início da temporada.

O faturamento continua indefinidamente no intervalo e preço especificados para a assinatura. A cada renovação de assinatura, o Google Play cobra a conta do usuário automaticamente e notifica-o das cobranças logo em seguida por e-mail. Para assinaturas mensais e anuais, os ciclos de faturamento sempre corresponderão aos ciclos de assinatura, com base na data de compra (assinaturas de temporada são cobradas anualmente, no primeiro dia da temporada).

Depois de aprovado o pagamento da assinatura, o Google Play fornece um token de compra de volta ao aplicativo em que se realizou a compra por meio da API de faturamento no aplicativo. Seus aplicativos podem armazenar o token localmente ou passá-lo aos servidores de back-end, que pode usá-lo para validar ou cancelar a assinatura remotamente usando a Google Play Developer API.

Se houver erro em um pagamento recorrente (por exemplo, por invalidade do cartão de crédito do cliente), a assinatura não será renovada. O método getPurchases() não retorna assinaturas com falha nem expiradas.

Recomendação: Inclua sua lógica empresarial no aplicativo para notificar os servidores de back-end quanto a compras de assinatura, tokens e eventuais erros no faturamento. Os servidores de back-end podem usar a API do lado do servidor para consultar e atualizar os registros e acompanhar os clientes diretamente, se necessário.

Renovação manual

Com a versão 3 da In-app Billing API, os usuários podem renovar uma assinatura durante seu período ativo, mesmo se a assinatura não for configurada para renovar automaticamente. Se o usuário comprar uma assinatura ainda tendo uma ativa, ela será estendida pelo período correspondente pelo valor atual.

Por exemplo, Aquiles tem uma assinatura do aplicativo Hoplita Moderno. A assinatura expirará em 1º de agosto. Em 10 de julho, ele compra uma assinatura de 1 mês pelo valor atual. Esse período de um mês será adicionado à assinatura ativa, então a assinatura passará a expirar em 1º de setembro.

O aplicativo pode ou não transmitir isso com uma IU adequada. Por exemplo, se um usuário não tem nenhuma assinatura ativa, o aplicativo pode ter um botão de comprar, mas, se o usuário tem uma assinatura, o botão pode ser de renovar.

Melhorar/rebaixar assinatura

Com a versão 3 da In-app Billing API, os usuários podem melhorar ou rebaixar uma assinatura durante o período ativo. Quando o usuário faz isso, a assinatura ativa é cancelada e cria-se uma nova. O saldo não usado da assinatura antiga é aplicado de forma proporcional à nova assinatura. O primeiro período de faturamento da nova assinatura começa depois que o saldo é usado (a nova assinatura não precisa ter um período equivalente ao da antiga).

Por exemplo: Samwise tem uma assinatura de conteúdo on-line do aplicativo Country Gardener. No momento, ele tem uma assinatura mensal à versão Tier 1 do conteúdo (que envolve apenas conteúdo de texto). Essa assinatura custa £ 2/mês e será renovada no primeiro dia do mês. Em 15 de abril, ele escolhe passar para assinatura Tier 2 (que inclui atualizações em vídeo), que custa £ 3/mês. A assinatura Tier 1 é encerrada imediatamente. Como ele pagou por um mês inteiro (de 1º a 30 de abril), mas só usou metade dela, metade dessa assinatura (£ 1) será aplicada à sua nova assinatura. No entanto, já que a nova assinatura custa £ 3/mês, o saldo de crédito de £ 1 só pagará por dez dias. Assim, o crédito de Samwise pagará por sua assinatura de 15 a 25 de abril. Em 26 de abril, ele receberá cobrança de £ 3 pela nova assinatura, e mais £ 3 no 26º dia de cada mês subsequente.

Observação: A data de faturamento da nova assinatura depende de quando o crédito dividido proporcionalmente do assinante acaba, assim o assinante não pode melhorar nem rebaixar para uma assinatura de temporada, que tem datas de início e fim fixas e predeterminadas.

Quando um usuário melhora ou rebaixa uma assinatura, o aplicativo chama getBuyIntentToReplaceSkus(). A esse método passa-se a nova SKU que o usuário quer comprar e todas as SKUs antigas que serão substituídas por ela. As partes remanescentes das SKUs antigas são usadas para pagar pela nova assinatura, e a cobrança começa quando esse crédito é todo usado.

Faturamento adiado

Com a Google Play Developer API, é possível adiar a próxima data de faturamento de um assinante. O usuário continua assinante do conteúdo e tem total acesso a ele, mas não é cobrado durante o período de adiamento. Isso permite fazer o seguinte:

  • Dar aos usuários acesso gratuito como parte de um pacote ou oferta especial (por exemplo, dar acesso gratuito a conteúdo da Web a usuários que assinam uma revista impressa)
  • Dar acesso gratuito a usuários como gesto de boa fé

Só é possível adiar o faturamento por, no máximo, um ano por chamada. Naturalmente, você pode chamar a API novamente antes de o ano acabar para adiar ainda mais o faturamento.

Por exemplo, Darcy tem uma assinatura mensal a conteúdo on-line do aplicativo Cavalheiro Pescador. Ele normalmente recebe cobrança de £ 1,25 no primeiro dia de cada mês. Em 10 de março, ele participa de uma pesquisa on-line do editor do aplicativo. O editor o recompensa adiando o próximo pagamento para 1º de junho. Darcy não paga em 1º de abril e em 1º de maio, mas continua tendo acesso normal ao conteúdo. Em 1º de junho, ele recebe a cobrança de £ 1,25, que é o valor normal da assinatura.

Observação: A API sempre adia a data de faturamento em um número inteiro de dias. Se você solicitar um período de adiamento que inclua uma fração de dias, a API arredondará para cima. Por exemplo, se a assinatura de um usuário estiver configurada para ser renovada em 15 de junho de 2015, às 14h00 UTC, e você usar a API para adiar a data de renovação para 15 de agosto de 2015, às 2h00 UTC, a API arredondará para o próximo dia inteiro e estabelecerá a data de renovação em 15 de agosto de 2015, às 14h00.

Você também pode oferecer períodos de experiência gratuitos a novos assinantes, conforme descrito em Períodos de experiência gratuitos.

Períodos de experiência

No Developer Console, você pode definir um período de experiência gratuito que permite que os usuários experimentem o conteúdo da assinatura antes de comprá-la. O período de experiência é o período que você definiu e, depois, converte-se automaticamente em uma assinatura integral gerenciada de acordo com o intervalo de faturamento e o preço da assinatura. O Google Play oferece suporte a períodos de experiência grátis para todos os tipos de assinatura, inclusive assinaturas de temporada.

Para tirar vantagem de um período de experiência grátis, um usuário deve “comprar” a assinatura integral pelo fluxo de faturamento no aplicativo padrão, fornecendo uma forma válida de pagamento para o faturamento e concluindo a transação de compra normalmente. No entanto, o usuário não será cobrado de nada porque o período inicial corresponde ao período de gratuidade. Em vez disso, o Google Play registra uma transação de $ 0,00, e a assinatura é marcada como comprada pelo tempo de duração do período de experiência ou até um cancelamento. Quando a transação é concluída, o Google Play notifica o usuário por e-mail de que ele comprou uma assinatura que inclui um período de gratuidade e que não houve cobrança inicial.

Quando o período de experiência acaba, o Google Play inicia automaticamente o faturamento junto ao cartão de crédito que o usuário forneceu na compra inicial, no valor estabelecido para a assinatura integral, e continua de acordo com intervalo da assinatura. Se necessário, o usuário pode cancelar a assinatura a qualquer momento durante o período de experiência. Nesse caso, a assinatura permanece ativa até o fim do período de experiência, mas o Google Play configura a assinatura para não renovar automaticamente. No fim do período de experiência, a assinatura expira e o Google Play não cobra o usuário.

É possível configurar um período de experiência para uma assinatura no Developer Console, sem precisar modificar nem atualizar o APK. Basta localizar e editar a assinatura na lista de produtos, definir um número válido de dias para o período de experiência (deve ter pelo menos 7 dias) e publicar. É possível alterar o período a qualquer momento, embora saiba que o Google Play não aplica a alteração a usuários que já adquiriram o período de experiência da assinatura. Apenas as novas compras de assinatura aplicarão o período de experiência atualizado. É possível criar um período de experiência gratuito por produto de assinatura.

Publicação de assinatura

Depois de terminar de configurar os detalhes do seu produto de assinatura no Developer Console ou pela API, você pode publicar a assinatura na lista de produtos do aplicativo.

Na lista de produtos, é possível adicionar assinaturas, produtos internos do aplicativo ou ambos. Você pode adicionar diversas assinaturas que dão acesso a conteúdos ou serviços diferentes ou diversas assinaturas que dão acesso ao mesmo conteúdo, mas por intervalos diferentes ou preços diferentes, como para uma promoção. Por exemplo: um veículo de comunicação pode decidir oferecer assinaturas mensal e anual ao mesmo conteúdo, com um desconto na anual. Você também pode oferecer equivalentes às compras no aplicativo para produtos de assinatura, com o intuito de garantir que o conteúdo seja disponibilizado a usuários de dispositivos mais antigos que não são compatíveis com assinaturas.

Depois de adicionar uma assinatura ou produto interno do aplicativo à lista de produtos, você deve publicar o produto antes que o Google Play possa disponibilizá-lo para compra. Observe que você também deve publicar o aplicativo antes de o Google Play disponibilizar os produtos para compra dentro do aplicativo.

Importante: Você pode remover o produto de assinatura da lista de produtos oferecida no seu aplicativo para impedir que o usuários o vejam ou o comprem.

Preços de assinatura de temporada proporcionais

Você pode definir preços proporcionais para usuários que compram assinaturas de temporada depois da data de início da temporada. Especifique a data em que o preço descontado passa a valer. O preço descontado entra em vigor à 0h00 UTC na data especificada. Você pode definir diversos preços proporcionais, reduzindo o preço da assinatura cada vez mais à medida que a temporada avança. Se um usuário compra uma assinatura de temporada proporcional e permanece assinante até o início da temporada seguinte, o Google Play cobrará o valor da assinatura integral no início da temporada seguinte.

Por exemplo, a temporada profissional de damas ocorre de 1º de março a 31 de agosto. O aplicativo Diletante das Damas oferece a assinatura de uma temporada por € 10. O aplicativo também oferece dois preços proporcionais: € 7,50 para usuários que assinam a partir de 1º de junho e € 5 para usuários que assinam a partir de 15 de agosto. Independentemente de quando o usuário assina, a assinatura de temporada acaba em 31 de agosto.

Cancelamento de assinatura

Os usuários podem visualizar o status de todas as suas assinaturas e cancelá-las se necessário na tela My Apps do aplicativo da Play Store. Atualmente, a In-app Billing API não aceita o cancelamento programático de assinaturas a partir do aplicativo em que a compra ocorreu.

Quando o usuário cancela uma assinatura, o Google Play não oferece reembolso pelo ciclo de faturamento atual. Em vez disso, ele permite que o usuário tenha acesso à assinatura cancelada até o fim do ciclo de faturamento atual, quando acaba a assinatura. Por exemplo: se um usuário comprar uma assinatura mensal e cancelá-la no 15º dia do ciclo, o Google Play considerará a assinatura válida até o fim do 30º dia (ou outro, dependendo do mês).

Em alguns casos, o usuário pode contatar você diretamente para solicitar o cancelamento de uma assinatura. Nesse caso e em outros similares, você pode usar a API do lado do servidor para consultar e cancelar diretamente a assinatura do usuário pelos servidores.

Importante: Em todo caso, você deve continuar oferecendo o conteúdo que os assinantes compraram com as assinaturas desde que todos os usuários possam acessá-lo. Ou seja, você não pode remover nenhum conteúdo enquanto houver algum usuário com uma assinatura ativa para ele, mesmo que essa assinatura seja encerrada apenas no fim do ciclo de faturamento atual. Como alternativa, você pode usar a API de reembolso e cancelamento para cancelar a assinatura de todos os assinantes (um por um) e reembolsá-los do pagamento da assinatura. Remover conteúdo que um assinante tenha direito a acessar resultará em sanções. Consulte o documento de políticas para saber mais.

Desinstalação de aplicativo

Quando o usuário desinstala um aplicativo que contém assinaturas compradas, o aplicativo da Play Store notifica o usuário de que há assinaturas ativas. Se o usuário escolher continuar com a desinstalação, o aplicativo será removido e as assinaturas permanecerão ativas e continuará havendo faturamento recorrente. O usuário pode retornar para cancelar as assinaturas associadas a qualquer momento na tela My Apps do aplicativo da Play Store. Se o usuário escolher cancelar a desinstalação, o aplicativo e as assinaturas continuarão iguais.

Reembolsar e anular assinaturas

Com assinaturas, o Google Play não fornece uma janela de reembolso, por isso os usuários terão que solicitá-lo. É possível solicitar reembolso na página My Orders da Play Store ou contatando o desenvolvedor diretamente.

Se você receber solicitações de reembolso, pode usar a Google Play Developer API ou o Merchant Center para cancelar a assinatura, verificar se ela já foi cancelada ou reembolsar o pagamento do usuário sem cancelá-la. Você também pode usar a Google Play Developer API para reembolsar e anular a assinatura de um usuário. Se você reembolsar e anular uma assinatura, a assinatura do usuário será cancelada imediatamente e o usuário será reembolsado do pagamento de assinatura mais recente (se quiser reembolsar mais do que o pagamento mais recente, você pode processar reembolsos adicionais no Merchant Center).

Importante: Reembolsos parciais ainda não estão disponíveis.

Processamento e políticas de pagamento

Em geral, os termos do Google Play permitem vender assinaturas dentro do aplicativo somente por meio do processador de pagamentos padrão — o Google Payments. Para compras de produtos de assinatura, a taxa da transação é igual a de compras de aplicativo (30%).

Aplicativos publicados no Google Play que vendem assinaturas devem usar o Faturamento no aplicativo para lidar com a transação e não podem fornecer links a um fluxo de compra externo ao aplicativo e ao Google Play (como para um site).

Para ver todos os detalhes sobre os termos e as políticas, consulteo documento de políticas.

Números de pedido de assinatura

Para ajudar a controlar as transações relacionadas a determinada assinatura, o Google Payments fornece um Número de pedido comercial para todas a recorrências da assinatura e identifica cada transação recorrente acrescentando um número inteiro da seguinte forma:

GPA.1234-5678-9012-34567 (número-base do pedido)
GPA.1234-5678-9012-34567..0 (orderID da primeira recorrência)
GPA.1234-5678-9012-34567..1 (orderID da segunda recorrência)
GPA.1234-5678-9012-34567..2 (orderID da terceira recorrência)
...

O Google Play fornece o número do pedido como o valor do campo orderId do campo JSON INAPP_PURCHASE_DATA (na V3) ou o intent PURCHASE_STATE_CHANGED (na V2).

Período de carência para pagamentos rejeitados

O Developer Console permite definir um período de carência para assinaturas, permitindo que os assinantes tenham uma chance de atualizar o método de pagamento se um pagamento recorrente for rejeitado. Essa configuração é útil se os assinantes tiverem um cartão de crédito expirado, assinaram usando um cartão pré-pago ou cancelaram um cartão sem atualizar os dados de pagamento. Para obter informações sobre como definir um período de carência para assinaturas, consulte o tópico Add subscriptions & recurring charges na Central de ajuda do Developer Console.

Para saber como dar um período de carência afeta os dados retornados do método getBuyIntent(), consulte a tabela de campos INAPP_PURCHASE_DATA.

Estratégias de verificação de compra

Em um cenário normal, seu aplicativo verifica a situação do pedido das novas compras para garantir que sejam válidas antes de conceder acesso ao conteúdo comprado.

Para verificar uma compra, o aplicativo passa o token de compra e outros detalhes para os servidores de back-end, que a verifica diretamente junto ao Google Play usando a Google Play Developer API. Se o servidor de back-end determinar que a compra é válida, ele notificará o aplicativo e concederá acesso ao conteúdo.

Lembre-se de que os usuários querem poder usar o aplicativo a qualquer momento, inclusive quando pode não haver conexão de rede disponível. Certifique-se de que sua abordagem de verificação de compras leve em conta casos de uso off-line.

Google Play Developer API

O Google Play oferece uma API baseada em HTTP que permite realizar tarefas como:

  • Consultar remotamente a validade de uma assinatura específica a qualquer momento
  • Cancelar uma assinatura
  • Adiar a próxima data de faturamento de uma assinatura
  • Reembolsar um pagamento de assinatura sem cancelá-la
  • Reembolsar e revogar uma assinatura

A API foi desenvolvida para ser usada nos servidores de back-end como uma forma de gerenciar assinaturas com segurança, assim como estender e integrar assinaturas a outros serviços.

Para obter todas as informações, consulte Google Play Developer API.