Solução de problemas no jogo Android

Esta página descreve como resolver problemas que você pode encontrar ao desenvolver jogos Android com o SDK do Play Games.

Não é possível fazer login

Se não for possível fazer login de jogadores, primeiro verifique se você seguiu as instruções para criar seus IDs de cliente e configurar os serviços relacionados a jogos. Se você ainda encontrar erros de login, verifique os itens abaixo para garantir que o jogo esteja 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 Google Play Console e clique na entrada correspondente ao jogo. Acesse a guia Apps vinculados e examine a lista de IDs do cliente. Nessa lista, é necessário que haja um app Android vinculado com o nome de pacote que corresponda ao nome de pacote da AndroidManifest.xml.
  3. Se houver incompatibilidade, 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 fazer isso, primeiro confira a impressão digital SHA1 do seu certificado:

  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. Siga estas etapas:

  1. Abra o Google 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. No Google Cloud Platform, selecione seu 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 Google Play Console, não no 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 Google Play Console também precisa estar ativada como testadora. Para verificar se isso está configurado corretamente:

  1. Abra o Google Play Console e navegue até o jogo.
  2. Abra a guia Testes.
  3. Confira se a conta que você está usando para 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 o listener usando um objeto persistente, como o 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...
        }
    }