O Google Play se dedica a garantir a segurança de usuários e desenvolvedores. Sabemos que a criação de uma empresa de apps bem-sucedida depende de uma plataforma confiável, que protege seu retorno do investimento ao se defender proativamente contra agentes maliciosos.
Este documento descreve recomendações para evitar ataques à integração de faturamento e diminuir o impacto de abusos no app.
Melhorar suas proteções
As APIs e ferramentas a seguir podem reduzir os riscos no seu app:
- API Voided Purchases: revogue o acesso a pedidos anulados.
- **ID de conta ofuscado**: ajuda a detectar quando vários dispositivos fazem compras na mesma conta em um curto período.
- **Consumo de back-end**: ferramentas como Purchases.products:consume transferem a lógica de negócios para seus back-ends seguros, impedindo adulterações do lado do cliente. Além de usar essas APIs da plataforma, adote as práticas recomendadas a seguir para proteger ainda mais suas integrações contra acesso não autorizado.
Evitar spoofing de localização
O Google Play oferece proteções integradas para impedir que agentes maliciosos usem locais falsos para explorar diferenças regionais de moeda (também conhecido como spoofing de localização), abusar de promoções e incentivos de assinatura e tentar golpes com vales-presente.
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, pode ser mais fácil depurar, corrigir e implantar atualizações no back-end do que no front-end.
Verificar compras antes de conceder titularidade
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:
- Envie o purchaseToken correspondente ao back-end. Isso significa que você precisa manter um registro dos valores de purchaseToken para todas as compras.
- Verifique se o valor de purchaseToken da compra atual não corresponde a nenhum valor de purchaseToken anterior. O purchaseToken é 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 ou Purchases.subscriptionsv2:get na API Google Play Developer para confirmar com o Google se a compra é legítima.
- Se você acredita que a compra é legítima, não foi usada ou processada no passado e o usuário passa por todas as verificações de qualificação e fraude, você pode conceder direitos ao item no app ou à assinatura com segurança.
- Verificações de qualificação e abuso:verifique se o usuário ainda está qualificado para o item. Se você configurou o fluxo de faturamento com obfuscatedAccountId ou obfuscatedProfileId, verifique se o mapeamento de compra corresponde à conta de usuário esperada no seu sistema. Realize outras verificações de abuso, risco ou segurança exigidas pelo back-end.
- Reembolsos explícitos para compras ilegítimas:se a compra falhar na validação ou nas verificações de abuso, não conceda direitos e não confirme nem consuma a compra. Em vez de deixar a compra
ser reembolsada automaticamente devido à falta de confirmação (o que é ambíguo, já que
também pode resultar de um tempo limite de processamento), revogue e reembolse explicitamente
a compra usando o
purchases.subscriptionsv2:revokeendpoint (com"fullRefund": {}) para assinaturas ou oOrders:refundendpoint com orevokeparâmetro definido comotruepara produtos únicos. A revogação da compra garante que o usuário não tenha mais direito a ela e envia ao Google Play um sinal claro de que a compra foi rejeitada pelo desenvolvedor.
- No caso de assinaturas, quando o linkedPurchaseToken for configurado em Purchases.subscriptionsv2:get, também será necessário remover o linkedPurchaseToken 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 compras PENDING sejam processadas corretamente. Se houver um pico de compras CANCELED, talvez você esteja concedendo direitos quando a compra ainda está no estado PENDING. Saiba mais em Como 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 um produto que não é de consumo ou uma assinatura, chame o endpoint de API Play Developer relevante, either Purchases.products:acknowledge or Purchases.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 de rede 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 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. A entrega de conteúdo por um serviço em tempo real também permite que você mantenha seu conteúdo atualizado.
- Usar um servidor remoto para exibir o conteúdo. Ao entregar conteúdo de um servidor remoto ou de um serviço em tempo real, você pode armazenar o conteúdo desbloqueado na memória do dispositivo ou no cartão SD. Se você armazenar conteúdo em um cartão SD, criptografe o conteúdo 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. Se uma compra anulada tiver concedido itens no app ou outro conteúdo a um usuário, você poderá usar a API Voided Purchases para saber o motivo da anulação da compra e qualquer conteúdo associado que possa ser recuperado.
As compras de itens no app e de assinaturas podem ser anuladas por vários motivos, incluindo:
- Uma compra é cancelada pelo usuário, pelo desenvolvedor ou pelo Google (incluindo compras não confirmadas canceladas automaticamente). No caso de assinaturas, note que 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 de apps 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 implementar 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 moeda do jogo for anulada, é possível recuperar as moedas que já foram concedidas ao usuário. No caso em que o usuário já gastou a moeda, considere definir o saldo da moeda como negativo e limitar a atividade do app e as compras futuras até que o saldo da moeda seja positivo.
Implementação de vários avisos:considere tomar ações menos drásticas para infratores iniciantes, como exibir avisos no app. 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.
Faça chamadas frequentes para a API Voided Purchases:quando você detectar uma ou mais compras anuladas, considere fazer chamadas mais frequentes para a API Voided Purchases para recuperar as compras antes que o usuário possa consumi-las. Para mais informações sobre as cotas da API Voided Purchases, consulte a 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 setObfuscatedAccountId e
setObfuscatedProfileId métodos no builder para
BillingFlowParams para ajudar o Google a mapear contas do Google para
contas no app.
O Google usa esses dados para detectar comportamentos suspeitos e bloquear alguns tipos de transações fraudulentas antes que elas sejam concluídas.
Entre em ação contra violações de direitos autorais ou marcas registradas
Se você estiver usando um servidor remoto para entregar ou gerenciar conteúdo, peça ao 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. Se você notar que seu conteúdo está sendo redistribuído no Google Play, aja com rapidez e decisão. Para saber mais, consulte a página Perguntas frequentes sobre direitos autorais na Central de Ajuda de direitos autorais.