Solução de problemas dos serviços relacionados a jogos do Google Play em jogos para Android

Esta página descreve como resolver problemas que você pode encontrar ao desenvolver jogos para Android com os serviços relacionados a jogos do Google Play.

Geração de registros

Para resolver problemas do jogo, ative o registro detalhado no dispositivo usando o comando adb shell. Em seguida, você vai poder conferir as mensagens de registro dos serviços relacionados a jogos do Google Play usando o logcat.

Ativar a geração de registros

Para ativar a geração de registros no dispositivo de teste, siga estas etapas:

  1. Conecte o dispositivo a uma máquina que tenha o SDK do Android instalado.

  2. Abra um terminal e execute este comando:

    adb shell setprop log.tag.Games VERBOSE
  3. Execute seu jogo no dispositivo e reproduza o problema que você está tentando depurar.

  4. Conferir registros:

    adb logcat

Desativar a geração de registros

Para desativar o registro detalhado dos serviços relacionados a jogos do Google Play no seu dispositivo e reverter para o comportamento original, execute o comando abaixo:

adb shell setprop log.tag.Games INFO

Não é possível fazer login

Se não for possível fazer login de jogadores, confira se você seguiu as instruções para criar seus IDs de cliente e configurar serviços relacionados a jogos. Se você ainda encontrar erros de login, confira os itens abaixo para garantir que o jogo está configurado corretamente.

Conferir as tags de metadados

O AndroidManifest.xml precisa ter uma tag de metadados de jogos. Para verificar se as tags de metadados estão configuradas corretamente, siga estas etapas:

  1. Abra seu AndroidManifest.xml e verifique se ele contém uma tag meta-data, conforme mostrado abaixo:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Localize a definição do recurso @string/app_id. Geralmente, ele é definido em um arquivo XML localizado no diretório res/xml, por exemplo, res/xml/strings.xml ou res/xml/ids.xml.

  3. Verifique se o valor do recurso @string/app_id corresponde ao ID numérico do aplicativo. O valor desse recurso contém apenas dígitos. Exemplo:

    <string name="app_id">123456789012</string>
    

Conferir o nome do pacote

O nome do pacote do jogo precisa ser igual ao nome do pacote do seu ID do cliente. Para verificar o nome do pacote, siga estas etapas:

  1. Abra seu arquivo AndroidManifest.xml e verifique se o nome do pacote do jogo está correto. O nome do pacote é o valor do atributo package na tag manifest.

  2. Verifique o nome do pacote fornecido ao criar seu ID do cliente. Para verificar o nome do pacote no Google Play Console, acesse o Play Console e clique na entrada correspondente ao jogo.

  3. Acesse a guia Apps vinculados e examine a lista de IDs do cliente. Nessa lista, você vai encontrar um app Android vinculado com o nome de pacote correspondente ao nome de pacote do seu AndroidManifest.xml. Se não encontrar, crie um novo ID do cliente com o nome de pacote correto e tente fazer login novamente.

Conferir a impressão digital do certificado

O certificado com que você está assinando o jogo precisa corresponder à impressão digital do certificado associada ao seu ID do cliente. Para verificar esses dados, confira primeiro a impressão digital SHA1 do seu certificado desta maneira:

  1. Encontre o arquivo do certificado e extraia a impressão digital SHA1 dele. Para conferir a impressão digital SHA1, execute este comando:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Anote a sequência de dígitos hexadecimais rotulados como SHA1: na saída. Essa é a impressão digital do seu certificado.

Em seguida, confira se a ferramenta de build está usando o certificado:

  1. Gere o APK do jogo na ferramenta de build e assine com o certificado desejado. Copie o APK gerado para um diretório temporário.
  2. No diretório temporário, execute o comando abaixo para descompactar o APK.

    unzip YourGame.apk
    
  3. Gere uma chave privada usando um arquivo de certificado RSA:

    keytool -printcert -file META-INF/CERT.RSA
    

    Também é possível gerar a chave privada usando um arquivo de certificado DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Anote a sequência de dígitos hexadecimais na linha marcada como SHA1:.

    Essa sequência precisa corresponder à impressão digital do certificado da etapa anterior. Se elas forem diferentes, a ferramenta de build ou o sistema não estão configurados para assinar o aplicativo com o certificado. Nesse caso, consulte a documentação do seu ambiente de build para determinar como fazer a configuração corretamente e tente se conectar de novo.

Em seguida, confira se a impressão digital do certificado corresponde à configurada no seu ID do cliente. Para fazer isto:

  1. Abra o Play Console e navegue até o jogo.
  2. Na página Detalhes do jogo, role até o final e clique no link para o projeto do Google Cloud Platform vinculado.
  3. Selecione o projeto.
  4. Na barra lateral à esquerda, selecione APIs e autorização. Confira se o status da API dos serviços relacionados a jogos do Google Play está ATIVADO na lista de APIs mostrada.
  5. Na barra lateral à esquerda, selecione Apps registrados.
  6. Expanda a seção "ID do cliente do OAuth 2.0" e anote a impressão digital do certificado (SHA1).

Se essa impressão digital não corresponder à do certificado das etapas anteriores, crie um novo ID do cliente com a impressão digital do certificado correta. Crie o novo ID do cliente no Play Console, não no projeto do Google Cloud Platform.

Conferir se as contas de teste estão ativadas

Antes de um jogo ser publicado, a conta que criou o jogo no Play Console também precisa estar ativada como testadora. Para conferir se isso está configurado corretamente, siga estas etapas:

  1. Abra o Play Console e navegue até o jogo.
  2. Abra a guia Testes.
  3. Confira se a conta com que você está tentando fazer login está na lista de testadores.

Se não estiver, adicione a conta à lista, aguarde alguns minutos e tente fazer login novamente.

Problemas com o Proguard

Se você estiver usando o Proguard e encontrar erros no APK ofuscado, confira o nível da API de destino no AndroidManifest.xml. Defina o nível como 17 ou mais recente.

Outras causas de problemas de configuração

Confira outras causas comuns de erros:

  • Se o jogo estiver publicado, confira se as configurações também estão. É possível publicar o app sem publicar as configurações do jogo. Para fazer isso, acesse o Google Play Console, navegue até o app e confira se a caixa ao lado do nome indica que ele foi publicado. Se ela indicar que ele está em outro estado, como "Pronto para publicar" ou "Pronto para testar", clique na caixa e selecione Publicar jogo.
  • Se não for possível publicar o jogo, confira se a opção Este app dá preferência a novas instalações está ativada para exatamente um dos IDs do cliente.

Listeners anônimos

Não use listeners anônimos. Eles são implementações de uma interface de listener definidas in-line, conforme ilustrado abaixo.

    ImageManager im = ...;

    // Anonymous listener -- dangerous:
    im.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }

Listeners anônimos não são confiáveis porque o SDK do Play Games os mantém como referências fracas, ou seja, eles podem ser excluídos pelo coletor de lixo antes de serem invocados. Em vez disso, implemente listeners usando um objeto persistente, como Activity.

    public class MyActivity extends Activity
            implements ImageManager.OnImageLoadedListener {

        private void loadOurImages() {
            ImageManager im = ...;
            im.loadImage(this);
        }

        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }