Visão geral da API Play Integrity

A API Play Integrity ajuda a proteger apps e jogos contra interações potencialmente perigosas e fraudulentas, como trapaças e acesso não autorizado. Assim, você pode tomar medidas adequadas para evitar ataques e reduzir abusos.

Quando o app ou jogo é usado em um dispositivo com o Android 4.4 (nível 19 da API) ou mais recente, a API Play Integrity fornece uma resposta criptografada e assinada que inclui as informações abaixo:

  • Binário genuíno do app: determina se você está interagindo com o binário não modificado reconhecido pelo Google Play.
  • Instalação genuína do Play: determina se a conta do usuário atual é licenciada, o que indica se o usuário instalou ou pagou pelo app ou jogo no Google Play.
  • Dispositivo Android genuíno: informa se o app está sendo executado em um dispositivo Android genuíno com a tecnologia do Google Play Services.

Termos de Serviço e segurança dos dados

Ao acessar ou usar a API Play Integrity, você concorda com os Termos de Serviço da API Play Integrity. Leia e entenda todos os termos e políticas aplicáveis antes de acessar a API.

O Google Play tem uma seção "Segurança dos dados" para que os desenvolvedores divulguem as práticas de coleta, compartilhamento e segurança de dados dos apps. Para ajudar você a completar os requisitos da seção "Segurança dos dados", consulte estas informações sobre como a API Play Integrity lida com dados.

Considerações sobre segurança

Embora a API Play Integrity aumente a segurança e proteja contra adulterações, ela oferece um melhor resultado quando você segue as práticas recomendadas abaixo:

Ter uma estratégia contra abusos

A API Play Integrity funciona melhor quando usada em conjunto com outros sinais como parte da sua estratégia geral contra abuso, e não como o único mecanismo antiabuso. Use a API em conjunto com outras práticas recomendadas de segurança adequadas para o app.

Não acessar o token de integridade com muita frequência

A geração de um token de integridade gasta tempo, bateria e dados. Além disso, cada app tem um número máximo de chamadas que podem ser feitas por dia, conforme definido pelo nível de uso dele. Portanto, você precisa chamar a API para proteger ações não frequentes e de alto valor que fazem parte da experiência do usuário, como fazer login em um serviço ou participar de um servidor multiplayer. Não chame a API em ações de alta frequência ou de baixo valor. Por exemplo, não a chame toda vez que o app for para o primeiro plano ou em intervalos de poucos minutos no segundo plano. Um app que faz muitas chamadas de API pode ser limitado para proteger os usuários de implementações incorretas.

Usar o campo de valor de uso único para proteger ainda mais o app

A API Play Integrity oferece um campo chamado nonce, que pode ser usado para proteger ainda mais o app contra certos ataques, como ataques de repetição e de adulteração de person-in-the-middle (PITM). A API Play Integrity retorna o valor definido neste campo na resposta de integridade assinada. Siga com cuidado as orientações sobre como gerar valores de uso único para proteger o app contra ataques.

Usar um ambiente de servidor seguro

Faça todas as validações e a descriptografia em um ambiente de servidor seguro. Se o app cliente expuser qualquer informação de segurança, ela poderá ser extraída do APK ou do repositório por um invasor, revelando informações valiosas sobre o app ou jogo.

Enviar outros tipos de respostas do servidor ao app

Em vez de sempre enviar a mesma resposta de aprovação/reprovação binária do servidor de volta ao app, é melhor ter vários tipos de resultados de decisão, porque isso é mais difícil de replicar. Por exemplo, você pode usar uma série de respostas relacionadas, como Permitir, Permitir com limites, Permitir com limites após o preenchimento do reCAPTCHA e Negar.

Ter uma estratégia de aplicação em níveis

No Play Console, você pode optar por receber mais identificadores de dispositivos, possibilitando a criação de uma estratégia antiabuso com vários níveis de aplicação. Depois que você aceita receber outros identificadores, a resposta de integridade passa a incluir vários identificadores do mesmo dispositivo, desde que os critérios de cada identificador sejam atendidos. Assim, você pode preparar seu servidor de back-end para se comportar de maneira diferente, dependendo do intervalo de respostas possíveis.

Por exemplo, um dispositivo que retorna MEETS_BASIC_INTEGRITY, MEETS_DEVICE_INTEGRITY e MEETS_STRONG_INTEGRITY pode ser mais confiável do que um que retorna apenas MEETS_BASIC_INTEGRITY. É possível configurar a resposta do servidor para acompanhar essas escolhas. A resposta pode ser combinada com ações diferentes para determinar se a conta de usuário é LICENSED (licenciada) ou UNLICENSED (não licenciada).

Tentar novamente com espera exponencial

Condições do ambiente, como uma conexão de Internet instável ou um dispositivo sobrecarregado, podem causar falhas nas verificações de integridade do dispositivo. Essas condições podem fazer com que nenhum marcador seja gerado para um dispositivo que é confiável. A fim de reduzir essas situações, inclua uma opção para tentar novamente com espera exponencial.

Mostrar mensagens de erro acionáveis

Quando possível, forneça mensagens de erro úteis aos usuários e os informe sobre o que pode ser feito para corrigir o problema, como tentar novamente, ativar a conexão de Internet ou conferir se o app da Play Store está atualizado.

Uso da API em níveis mais altos

Figura 1. Diagrama de sequência que mostra o design de alto nível da API Play Integrity.

Quando o usuário realizar uma ação de alto valor no app que você queira proteger com uma verificação de integridade, siga as etapas abaixo:

  1. O back-end do servidor do app gera e envia um valor exclusivo à lógica do lado do cliente. As etapas restantes se referem a essa lógica como o "app".
  2. O app cria um valor de uso único usando o valor exclusivo e o conteúdo da ação de alto valor. Em seguida, ele chama a API Play Integrity, transmitindo o valor de uso único.
  3. O app recebe um veredito assinado e criptografado da API Play Integrity.
  4. O app transmite o veredito assinado e criptografado ao back-end.
  5. O back-end do app envia o veredito a um servidor do Google Play. O servidor do Google Play descriptografa e verifica o veredito, retornando os resultados ao back-end do app.
  6. O back-end do app decide como proceder, de acordo com os sinais contidos no payload do token.
  7. O back-end do app envia os resultados da decisão para o app.

Níveis de uso da API

As solicitações feitas à API estão sujeitas a um número máximo por dia para cada app, conforme determinado pelo nível de uso atribuído ao app que está chamando. A tabela abaixo mostra os diferentes níveis:

Tabela 1. Níveis de uso da API Play Integrity
Nível de uso Número de chamadas de API permitidas por dia Como qualificar
Padrão Até 10.000 Disponível para apps que usam qualquer canal de distribuição
Acima do padrão Chamadas acima do limite de 10.000 estão sujeitas a aprovação É necessário implementar corretamente a lógica da API, incluindo novas tentativas
Disponível para apps que usam qualquer canal de distribuição em conjunto com o Google Play

O mesmo nome de pacote no Google Play e em outros canais de distribuição é considerado como um único app em termos de uso da API. É possível usar um único ID de projeto do Google Cloud para vários apps com diferentes nomes de pacotes. Se você fizer isso, os apps serão considerados como um único app em termos de uso da API.

Ver o nível de uso

Para ajudar a avaliar a frequência de interação com a API Play Integrity, o Play Console mostra o nível de uso do app. Siga estes passos para ver o nível de uso:

  1. Faça login no Play Console.
  2. Selecione um app que usa a API Play Integrity.
  3. Na seção "Versão" do menu à esquerda, acesse "Configuração" > "Integridade do app".
  4. Na guia API Integrity, na seção "Configurações", procure a propriedade "Nível de uso". O valor dessa propriedade mostra o nível de uso do app.

Mudar o nível de uso

Para solicitar a mudança do nível de uso do app, preencha este formulário. Peça o upgrade para o nível de uso elevado se o app precisar processar um número maior de usuários, mas não chamar a API com mais frequência para cada um deles. Mesmo com um nível de uso elevado, seu app vai continuar limitando as chamadas de API a ações pouco frequentes e de alto valor.