Lembrete: seu app precisa oferecer compatibilidade com a restauração e suspensão de conta até 1º de novembro de 2020. A pausa e a reativação de assinaturas também serão ativadas por padrão, a menos que você desative essa opção explicitamente. Saiba mais (em inglês).

Combater fraude e abuso

Quando seu app se torna mais conhecido, ele pode passar a atrair a atenção indesejada de usuários mal-intencionados, que podem querer cometer abusos com o app. Este tópico apresenta recomendações para evitar esses ataques à integração de faturamento e diminuir o impacto causado por abusos no app.

Mover lógicas confidenciais para o back-end

Mova as lógicas e dados confidenciais para um servidor de back-end controlado por você, conforme permitido pelo design do seu app. Quanto mais dados e lógicas você tiver em um dispositivo de front-end, mais vulnerável seu app será a modificações ou adulterações.

Por exemplo, um jogo de xadrez on-line precisa validar todos os movimentos no back-end, em vez de confiar que o front-end sempre envia movimentos legais.

Além disso, se você encontrar vulnerabilidades ou problemas de segurança, dependendo do design do sistema, será mais fácil depurar, corrigir e lançar atualizações no back-end que no front-end.

Verificar compras antes de conceder titularidade

A verificação de compras é um caso especial de dados e lógicas confidenciais que precisa ser processado no back-end. Depois que o usuário realiza uma compra, você precisa fazer o seguinte:

  1. Envie o purchaseToken correspondente ao back-end. Isso significa que você precisa manter um registro de todos os valores purchaseToken para todas as compras.
  2. Verifique se o valor purchaseToken da compra atual não corresponde a nenhum valor purchaseToken anterior. purchaseToken é globalmente exclusivo. Assim, esse valor pode ser usado como a chave primária do seu banco de dados com segurança.
  3. Use os endpoints Purchases.products:get ou Purchases.subscriptions:get (link em inglês) na API Google Play Developer para confirmar com o Google se a compra é legítima.
  4. Se a compra for legítima e não tiver sido usada no passado, você poderá conceder a titularidade ao item no aplicativo ou à assinatura com segurança.
  5. Para assinaturas, quando linkedPurchaseToken for configurado em Purchases.subscriptions:get, também será necessário remover o linkedPurchaseToken do banco de dados e revogar a titularidade concedida ao linkedPurchaseToken para garantir que usuários diferentes não recebam titularidade sobre a mesma compra.

Como proteger conteúdo desbloqueado

Para evitar que usuários mal-intencionados redistribuam seu conteúdo desbloqueado, não o empacote no arquivo APK. Em vez disso, escolha uma das opções a seguir:

  • Usar um serviço em tempo real para fornecer conteúdo, como um feed de conteúdo. Oferecer conteúdo por meio de um serviço em tempo real também permite manter o conteúdo atualizado.
  • Usar um servidor remoto para exibir o conteúdo.

Ao fornecer o conteúdo a partir de um servidor remoto ou um serviço em tempo real, é possível armazenar o conteúdo desbloqueado na memória ou no cartão SD do dispositivo. Ao armazenar conteúdo em um cartão SD, criptografe-o e use uma chave de criptografia específica do dispositivo.

Detectar e processar compras anuladas

Compras anuladas são compras que foram canceladas, revogadas ou estornadas. Caso uma compra anulada já tenha concedido itens no aplicativo ou outros conteúdos ao usuário, é possível usar a API Voided Purchases para encontrar o motivo para a anulação da compra e qualquer conteúdo associado que possa ser recuperado.

As compras de itens no aplicativo e de assinaturas podem ser anuladas por vários motivos, incluindo:

  • A compra foi cancelada pelo usuário, pelo desenvolvedor ou pelo Google. Para assinaturas, isso se refere ao cancelamento da compra de uma assinatura, e não ao cancelamento da assinatura em si (link em inglês).
  • A compra foi estornada.
  • O desenvolvedor do app cancelou ou reembolsou um pedido do usuário e selecionou a opção “revogar” no console.

Com base no motivo para a anulação da compra e considerando os dados de comportamentos anteriores do usuário, é possível escolher uma solução. Recomendamos a implementação de uma ou mais das seguintes opções:

  • Recuperar itens: quando uma compra é anulada, é possível recuperar os itens que não foram usados como se eles nunca tivessem sido comprados. Por exemplo, se uma compra de moedas em um jogo for anulada, é possível recuperar as moedas que já foram concedidas ao usuário. Caso o usuário já tenha usado as moedas, considere deixar o saldo de moedas negativo e limitar a atividade no app e compras futuras até que o saldo esteja positivo.
  • Implementar vários avisos: considere tomar medidas menos drásticas para as primeiras infrações, como exibir avisos no aplicativo. Considere medidas mais severas para infrações reincidentes.
  • Desative as compras temporariamente: de forma semelhante aos vários avisos, considere desativar a opção de compras para usuários com compras anuladas até que seja possível investigar o motivo para a anulação das compras em mais detalhes.
  • Bloquear o acesso ao app temporária ou permanentemente: em casos extremos de atividades mal-intencionadas reincidentes, considere bloquear o acesso ao app de forma temporária ou permanente.
  • Chamar a API Voided Purchases com frequência: quando detectar uma ou mais compras anuladas, considere chamar a API Voided Purchases com mais frequência para recuperar aquilo que foi comprado antes que seja usado pelo usuário. Veja mais informações sobre as cotas da API na documentação da API Voided Purchases.

Ajudar o Google a detectar fraudes antes que elas aconteçam

Alguns tipos de fraude são relacionados a usuários mal-intencionados que criam várias contas do Google e no aplicativo para ocultar atividades.

Use os métodos setObfuscatedAccountId e setObfuscatedProfileId no builder para BillingFlowParams para ajudar o Google a mapear Contas do Google e contas em aplicativos.

O Google usa esses dados para detectar comportamentos suspeitos e bloquear alguns tipos de transações fraudulentas antes que elas sejam concluídas.

Realizar ações contra violações de direitos autorais ou marcas registradas

Se você estiver usando um servidor remoto para fornecer ou gerenciar conteúdo, habilite seu app para verificar o estado de compra do conteúdo desbloqueado sempre que um usuário acessar o conteúdo. Isso permite revogar o uso quando necessário e minimizar a pirataria. Caso veja seu conteúdo sendo redistribuído no Google Play, aja de forma rápida e decisiva. Para saber mais, consulte a página Perguntas frequentes sobre direitos autorais na Central de Ajuda de direitos autorais.