Solução de problemas no jogo para Android

Esta página descreve como solucionar problemas que você pode encontrar durante o desenvolvimento do Android jogos com o SDK do Play Games.

Não foi possível fazer login

Se você não conseguir fazer o login dos usuários no jogo, primeiro verifique se seguiu as instruções para criar seus IDs de cliente e configurar os serviços relacionados a jogos. Se você ainda não conseguir fazer login de erros, verifique os itens a seguir para garantir que seu 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 em Google Play Console, acesse o Google Play Console e clique na entrada correspondente ao seu jogo. Acesse a guia Apps vinculados e examine a lista de IDs do cliente. Deve haver um perfil para Android vinculado na lista com um nome de pacote que corresponda ao nome no AndroidManifest.xml.
  3. Se houver incompatibilidade, crie um novo ID do cliente com o nome de pacote correto e tente fazer login. de novo.

Conferir a impressão digital do certificado

O certificado com o qual você está assinando o jogo deve corresponder à impressão digital do certificado associadas ao seu ID do cliente. Para confirmar 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. Para fazer isso:

  1. Abra o Google Play Console e navegue até seu 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. Você precisa criar 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 ativado como testador. Para verificar se isso está configurado corretamente:

  1. Abra o Google Play Console e navegue até seu 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 Google Play Console, acesse seu app e verifique se a caixa ao lado do nome do jogo indica após a publicação. 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...
        }
    }