Processar códigos de erro da API Play Integrity

Se um aplicativo fizer uma solicitação usando a API Play Integrity e a chamada falhar, um código do erro será retornado. O tipo de código do erro retornado depende do tipo de solicitação:

Estratégias de nova tentativa

Recomendamos o uso de espera exponencial para operações da API Play Integrity que aconteçam em segundo plano e não afetem a experiência do usuário durante a sessão.

Por exemplo, seria apropriado implementar isso ao confirmar novas compras, porque essa operação pode acontecer em segundo plano e a confirmação não precisa acontecer em tempo real se ocorrer um erro.

Após a primeira falha, comece com um atraso inicial de cinco segundos antes de tentar de novo.

Implemente uma estratégia com um número máximo de tentativas como uma condição de saída. Use um atraso exponencialmente aumentado a cada vez (10 s, 20 s).

Durante essas tentativas, confira se há uma conexão de rede e não sobrecarregue o dispositivo.

Se os erros continuarem ocorrendo após três tentativas, trate o resultado como se o cliente tivesse falhado em todas as verificações de integridade. O erro pode ocorrer por vários motivos, incluindo, entre outros: um dispositivo sobrecarregado, problemas de conexão de rede ou uma tentativa de ataque.

Valores de códigos de erros para a biblioteca Java

IntegrityErrorCode StandardIntegrityErrorCode
-1 API_NOT_AVAILABLE API_NOT_AVAILABLE
-2 PLAY_STORE_NOT_FOUND PLAY_STORE_NOT_FOUND
-3 NETWORK_ERROR NETWORK_ERROR
-4 PLAY_STORE_ACCOUNT_NOT_FOUND
-5 APP_NOT_INSTALLED APP_NOT_INSTALLED
-6 PLAY_SERVICES_NOT_FOUND PLAY_SERVICES_NOT_FOUND
-7 APP_UID_MISMATCH APP_UID_MISMATCH
-8 TOO_MANY_REQUESTS TOO_MANY_REQUESTS
-9 CANNOT_BIND_TO_SERVICE CANNOT_BIND_TO_SERVICE
-10 NONCE_TOO_SHORT
-11 NONCE_TOO_LONG
-12 GOOGLE_SERVER_UNAVAILABLE GOOGLE_SERVER_UNAVAILABLE
-13 NONCE_IS_NOT_BASE64
-14 PLAY_STORE_VERSION_OUTDATED PLAY_STORE_VERSION_OUTDATED
-15 PLAY_SERVICES_VERSION_OUTDATED PLAY_SERVICES_VERSION_OUTDATED
-16 CLOUD_PROJECT_NUMBER_IS_INVALID CLOUD_PROJECT_NUMBER_IS_INVALID
-17 CLIENT_TRANSIENT_ERROR REQUEST_HASH_TOO_LONG
-18 CLIENT_TRANSIENT_ERROR
-19 INTEGRITY_TOKEN_PROVIDER_INVALID
-100 INTERNAL_ERROR INTERNAL_ERROR

Outros valores de códigos de erros para a biblioteca nativa

IntegrityErrorCode StandardIntegrityErrorCode
-100 INTEGRITY_INTERNAL_ERROR STANDARD_INTEGRITY_INTERNAL_ERROR
-101 INTEGRITY_INITIALIZATION_NEEDED STANDARD_INTEGRITY_INITIALIZATION_NEEDED
-102 INTEGRITY_INITIALIZATION_FAILED STANDARD_INTEGRITY_INITIALIZATION_FAILED
-103 INTEGRITY_INVALID_ARGUMENT STANDARD_INTEGRITY_INVALID_ARGUMENT

Códigos de erros que aceitam novas tentativas

Às vezes, a causa desses erros é devido a condições temporárias. Portanto, você precisa repetir a chamada.

NETWORK_ERROR (Código do erro: -3)

Esse erro indica que houve um problema com a conexão de rede entre o dispositivo e os sistemas do Google Play.

Possível solução

Para recuperar, peça ao usuário para verificar a conectividade de rede e use tentativas simples ou com espera exponencial, dependendo de qual ação gerou o erro.

Confira também

NETWORK_ERROR para solicitações clássicas.

TOO_MANY_REQUESTS (Código do erro: -8)

O app de chamada está fazendo muitas solicitações à API e foi limitado.

Possível solução

  1. Peça para aumentar seu limite diário de solicitações
  2. Tente de novo com uma espera exponencial.

Confira também

TOO_MANY_REQUESTS para solicitações clássicas.

GOOGLE_SERVER_UNAVAILABLE (Código do erro: -12)

Erro desconhecido do servidor interno do Google.

Possível solução

Tente de novo com uma espera exponencial. Registre um bug em caso de falhas frequentes.

Confira também

GOOGLE_SERVER_UNAVAILABLE para solicitações clássicas.

CLIENT_TRANSIENT_ERROR (Código do erro: -18)

Ocorreu um erro temporário no dispositivo cliente.

Para solicitações de API padrão, esse recurso tem suporte a partir da versão 1.3.0 da biblioteca da API Play Integrity para Kotlin e Java, do Plug-in do Google Play Integrity para Unity 1.3.0 ou mais recente e do SDK nativo da Play Core 1.13.0 ou mais recente.

Possível solução

Tente de novo com uma espera exponencial.

Confira também

CLIENT_TRANSIENT_ERROR para solicitações clássicas.

Observação: quando informado ao usar uma solicitação da API clássica, o valor retornado é -17.

INTERNAL_ERROR (Código do erro: -100)

Erro interno desconhecido.

Possível solução

Tente de novo com uma espera exponencial. Registre um bug em caso de falhas frequentes.

Confira também

INTERNAL_ERROR para solicitações clássicas.

STANDARD_INTEGRITY_INTERNAL_ERROR (Código do erro: -100)

Erro interno desconhecido.

Possível solução

Tente de novo com uma espera exponencial. Registre um bug em caso de falhas frequentes.

Confira também

Consulte INTEGRITY_INTERNAL_ERROR para solicitações clássicas.

STANDARD_INTEGRITY_INITIALIZATION_FAILED (Código do erro: -102)

Ocorreu um erro ao inicializar a API Integrity padrão.

Possível solução

Tente de novo com uma espera exponencial. Registre um bug em caso de falhas frequentes.

Confira também

Consulte INTEGRITY_INITIALIZATION_FAILED para solicitações clássicas.

Códigos de erro que não aceitam novas tentativas

É improvável que novas tentativas automáticas ajudem nesses casos. No entanto, uma nova tentativa manual pode ajudar se o usuário resolver a condição que causou o problema. Por exemplo, se o usuário atualizar a Play Store para uma versão com suporte, uma nova tentativa manual da operação inicial poderá funcionar.

API_NOT_AVAILABLE (Código do erro: -1)

A versão da Play Store instalada no dispositivo pode ser antiga e a API Integrity pode não estar disponível. Outra possibilidade é que a API Integrity não esteja ativada no Google Play Console.

Possível solução

  • Ative a API Integrity no Google Play Console.
  • Peça ao usuário para atualizar a Play Store.

Confira também

Consulte API_NOT_AVAILABLE para acessar a solicitação clássica.

PLAY_STORE_NOT_FOUND (Código do erro: -2)

O app oficial da Google Play Store não foi encontrado no dispositivo.

Possível solução

Peça ao usuário para instalar ou ativar a Google Play Store.

Confira também

Consulte PLAY_STORE_NOT_FOUND para acessar a solicitação clássica.

PLAY_STORE_ACCOUNT_NOT_FOUND (Código do erro: -4)

Observação: isso só é informado para solicitações clássicas usando IntegrityErrorCode.

Nenhuma conta da Play Store foi encontrada no dispositivo. A API Play Integrity agora oferece suporte a solicitações não autenticadas. Esse código do erro é usado somente em versões mais antigas da Play Store que não têm suporte.

Possível solução

Peça ao usuário para atualizar e fazer login na Google Play Store.

APP_NOT_INSTALLED (Código do erro: -5)

O app de chamada não está instalado. Há algo de errado, possivelmente um ataque.

Possível solução

Não há soluções possíveis. Trate o resultado como se o cliente tivesse falhado em todas as verificações de integridade.

Confira também

Consulte APP_NOT_INSTALLED para acessar a solicitação clássica.

PLAY_SERVICES_NOT_FOUND (Código do erro: -6)

O Google Play Services está indisponível ou precisa ser atualizado.

Possível solução

Peça ao usuário para instalar, atualizar ou ativar o Google Play Services.

Confira também

Consulte APP_NOT_INSTALLED para acessar a solicitação clássica.

APP_UID_MISMATCH (Código do erro: -7)

O UID (ID do usuário) do app de chamada não corresponde ao do gerenciador de pacotes.

Possível solução

Não há soluções possíveis. Trate o resultado como se o cliente tivesse falhado em todas as verificações de integridade.

Confira também

Consulte APP_UID_MISMATCH para acessar a solicitação clássica.

CANNOT_BIND_TO_SERVICE (Código do erro: -9)

Falha ao vincular ao serviço na Play Store. Isso pode ocorrer porque uma versão antiga da Play Store está instalada no dispositivo.

Possível solução

Peça ao usuário para atualizar a Google Play Store.

Confira também

Consulte CANNOT_BIND_TO_SERVICE para acessar a solicitação clássica.

NONCE_TOO_SHORT (Código do erro: -10)

Observação: isso só é informado para solicitações clássicas usando IntegrityErrorCode.

O valor de uso único é muito curto. O valor de uso único precisa ter um mínimo de 16 bytes antes da codificação de base64.

Possível solução

Tente de novo com um valor de uso único mais longo.

NONCE_TOO_LONG (Código do erro: -11)

Observação: isso só é informado para solicitações clássicas usando IntegrityErrorCode.

O valor de uso único é muito longo. O valor de uso único precisa ter menos que 500 bytes antes da codificação base64.

Possível solução

Tente de novo com um valor de uso único mais curto.

NONCE_IS_NOT_BASE64 (Código do erro: -13)

Observação: isso só é informado para solicitações clássicas usando IntegrityErrorCode.

O valor de uso único não foi codificado como uma string base64, com segurança na Web e sem wrapper.

Possível solução

Tente de novo com um valor de uso único no formato correto.

PLAY_STORE_VERSION_OUTDATED (Código do erro: -14)

O app Play Store precisa ser atualizado.

Possível solução

Peça ao usuário para atualizar a Google Play Store.

Confira também

Consulte PLAY_STORE_VERSION_OUTDATED para acessar a solicitação clássica.

PLAY_SERVICES_VERSION_OUTDATED (Código do erro: -15)

O Google Play Services precisa ser atualizado.

Possível solução

Peça ao usuário para atualizar o Google Play Services.

Confira também

Consulte PLAY_SERVICES_VERSION_OUTDATED para acessar a solicitação clássica.

CLOUD_PROJECT_NUMBER_IS_INVALID (Código do erro: -16)

O número fornecido de projeto na nuvem é inválido.

Possível solução

Use o número do projeto do Google Cloud em que você ativou a API Play Integrity.

Confira também

Consulte CLOUD_PROJECT_NUMBER_IS_INVALID para acessar a solicitação clássica.

REQUEST_HASH_TOO_LONG (Código do erro: -17)

Observação: isso só é informado para solicitação padrão usando StandardIntegrityErrorCode.

O requestHash fornecido é muito longo. O requestHash precisa ter menos de 500 caracteres.

Possível solução

Tente de novo com um requestHash mais curto.

INTEGRITY_TOKEN_PROVIDER_INVALID (Código do erro: -19)

Observação: isso só é informado para solicitações padrão usando StandardIntegrityErrorCode.

O StandardIntegrityTokenProvider é inválido. Esse código do erro está disponível apenas para solicitações de API padrão, em que há suporte na versão 1.3.0 da biblioteca para as linguagens de programação Kotlin e Java, no Plug-in do Google Play Integrity para Unity 1.3.0 ou mais recente e no SDK nativo do Play Core 1.13.0 ou mais recente.

Possível solução

Solicite um novo provedor de token de integridade.

STANDARD_INTEGRITY_INITIALIZATION_NEEDED (Código do erro: -101)

StandardIntegrityManager não foi inicializado.

Possível solução

Chame StandardIntegrityManager_init() primeiro.

Confira também

Consulte INTEGRITY_INITIALIZATION_NEEDED para solicitações clássicas

STANDARD_INTEGRITY_INVALID_ARGUMENT (Código do erro: -103)

Um argumento inválido foi transmitido para a API Integrity padrão.

Possível solução

Tente de novo com o argumento correto.

Confira também

Consulte INTEGRITY_INVALID_ARGUMENT para solicitações clássicas.