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 sensíveis 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 direitos
A verificação e confirmação de compras é um caso especial de lógica e dados sensíveis que precisa ser processado no back-end. Depois que o usuário realiza uma compra, você precisa fazer o seguinte:
- Enviar o
purchaseToken
correspondente ao back-end. Isso significa que você precisa manter um registro dos valores depurchaseToken
para todas as compras. - Verificar se o valor de
purchaseToken
da compra atual não corresponde a nenhum anterior. OpurchaseToken
é globalmente exclusivo, então pode ser usado com segurança como a chave primária no seu banco de dados. - Usar os
endpoints
Purchases.products:get
ouPurchases.subscriptionsv2:get
na API Google Play Developer para confirmar com o Google se a compra é legítima. - Se ela for legítima e não tiver sido usada no passado, você poderá conceder direitos ao item no app ou à assinatura com segurança.
- No caso de assinaturas, quando o
linkedPurchaseToken
for configurado emPurchases.subscriptionsv2:get
, também será necessário remover olinkedPurchaseToken
do banco de dados e revogar o direito concedido a ele para garantir que usuários diferentes não recebam direito sobre a mesma compra. - Conceder o direito apenas quando o estado de compra for
PURCHASED
e garantir que as comprasPENDING
sejam processadas corretamente. Se houver um pico de comprasCANCELED
, talvez você esteja concedendo direitos quando a compra ainda está no estadoPENDING
. Saiba mais em Processar transações pendentes. Depois de conceder o direito, se você quiser consumir e confirmar um produto de consumo, será necessário usar a API Play Developer
Purchases.products:consume
no seu servidor de back-end seguro. Para confirmar uma assinatura ou um produto que não é de consumo, chame o endpoint da API Play Developer relevante,Purchases.products:acknowledge
ouPurchases.subscriptions:acknowledge
, no seu servidor de back-end seguro. A confirmação é necessária, já que notifica o Google Play de que o usuário tem direito à compra. Você precisa confirmar a compra imediatamente após conceder o direito.Embora seja possível confirmar ou consumir a compra no lado do cliente pelo seu app, as APIs do lado do servidor oferecem proteção extra contra problemas como conectividade de rede ruim e atividades maliciosas. Por exemplo, imagine que um usuário comprou um item no seu app, mas perdeu a conectividade enquanto a compra estava sendo validada. Sem a confirmação do servidor, ele pode precisar fazer login de novo pelo app para concluir o processo de confirmação. Se o usuário não fizer login em até três dias, a compra será reembolsada automaticamente devido à falta de confirmação. A confirmação do servidor evita esse cenário enviando uma confirmação assim que o Google Play notifica o servidor de que a compra é válida.
Para saber mais sobre confirmação e consumo de compras, consulte Como processar compras.
Como proteger conteúdo desbloqueado
Para evitar que usuários maliciosos 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 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.
- 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 comportamentais 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 de forma temporária ou permanente: em casos extremos de atividades mal-intencionadas reincidentes, considere bloquear o acesso ao app, seja 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.
Como 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.