Risoluzione dei problemi relativi ai servizi per i giochi di Play nei giochi Android

In questa pagina viene spiegato come risolvere i problemi che potresti riscontrare durante lo sviluppo di giochi Android con i servizi per i giochi di Google Play.

Logging

Per risolvere i problemi relativi al tuo gioco, puoi attivare la registrazione dettagliata sul dispositivo utilizzando il comando adb shell. Puoi quindi visualizzare i messaggi di log dei servizi per i giochi di Google Play utilizzando logcat.

Attiva registrazione

Per attivare il logging sul dispositivo di test:

  1. Collega il dispositivo a un computer su cui è installato l'SDK Android.

  2. Apri un terminale ed esegui questo comando:

    adb shell setprop log.tag.Games VERBOSE
  3. Esegui il gioco sul dispositivo e riproduci il problema di cui stai tentando di eseguire il debug.

  4. Visualizza i log:

    adb logcat

Disabilita logging

Per disattivare la registrazione dettagliata per i servizi per i giochi di Play sul tuo dispositivo e ripristinare il comportamento di registrazione originale, esegui questo comando:

adb shell setprop log.tag.Games INFO

Non è stato possibile accedere

Se non riesci a far accedere i giocatori al tuo gioco, assicurati innanzitutto di aver seguito le istruzioni per creare gli ID client e configurare i servizi per i giochi. Se continui a riscontrare errori di accesso, controlla i seguenti elementi per assicurarti che il gioco sia configurato correttamente.

Controllare i tag dei metadati

AndroidManifest.xml deve contenere un tag di metadati dei giochi. Per verificare che i tag dei metadati siano impostati correttamente:

  1. Apri AndroidManifest.xml e verifica che contenga un tag meta-data, come mostrato di seguito:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Individua la definizione della risorsa @string/app_id. Di solito viene definito in un file XML situato nella directory res/xml, ad esempio res/xml/strings.xml o res/xml/ids.xml.

  3. Verifica che il valore della risorsa @string/app_id corrisponda all'ID numerico della tua applicazione. Il valore di questa risorsa deve contenere solo cifre. Ecco alcuni esempi:

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

Controllare il nome del pacchetto

Il nome del pacchetto del gioco deve corrispondere a quello indicato nell'ID client. Per verificare il nome del pacchetto:

  1. Apri AndroidManifest.xml e verifica che il nome del pacchetto del gioco sia corretto. Il nome del pacchetto è il valore dell'attributo package nel tag manifest.

  2. Verifica il nome del pacchetto che hai fornito al momento della creazione dell'ID client. Per verificare il nome del pacchetto in Google Play Console, vai su Play Console e fai clic sulla voce corrispondente al tuo gioco.

  3. Vai alla scheda App collegate ed esamina l'elenco degli ID client. In questo elenco dovrebbe essere presente un'app Android collegata il cui nome di pacchetto corrisponde al nome del pacchetto nel tuo AndroidManifest.xml. In caso di mancata corrispondenza, crea un nuovo ID client con il nome del pacchetto corretto e riprova ad accedere.

Controlla l'impronta digitale del certificato

Il certificato con cui vuoi firmare il gioco deve corrispondere all'impronta digitale del certificato associata all'ID client. Per verificarlo, controlla innanzitutto l'impronta SHA1 del certificato come segue:

  1. Individua il file del certificato e recupera la relativa impronta SHA1. Per ottenere l'impronta SHA1, esegui questo comando:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Prendi nota della sequenza di cifre esadecimali etichettate SHA1: nell'output. Si tratta della fingerprint del tuo certificato.

Dopodiché, verifica che il tuo strumento di creazione utilizzi questo certificato:

  1. Genera l'APK del tuo gioco dallo strumento di creazione e firmalo con il certificato desiderato. Copia l'APK generato in una directory temporanea.
  2. Nella directory temporanea, esegui il comando seguente per decomprimere l'APK.

    unzip YourGame.apk
    
  3. Genera una chiave privata utilizzando un file di certificato RSA:

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

    In alternativa, puoi generare la chiave privata utilizzando un file di certificato DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Osserva la sequenza di cifre esadecimali sulla riga SHA1:.

    Questa sequenza di cifre deve corrispondere all'impronta del certificato del passaggio precedente. In caso di mancata corrispondenza, lo strumento o il sistema di compilazione non è configurato per firmare l'applicazione con il certificato. In questo caso, consulta la documentazione dell'ambiente di build per determinare come configurarlo correttamente e riprova ad accedere.

Quindi, controlla se l'impronta del certificato corrisponde a quella configurata nell'ID client. Per farlo:

  1. Apri Play Console e vai al tuo gioco.
  2. Nella pagina Dettagli gioco, scorri fino in fondo e fai clic sul link al progetto della piattaforma Google Cloud collegato.
  3. Seleziona il progetto.
  4. Nella barra laterale a sinistra, seleziona API e autenticazione. Assicurati che lo stato dell'API dei servizi per i giochi di Google Play sia ON nell'elenco di API visualizzato.
  5. Nella barra laterale a sinistra, seleziona App registrate.
  6. Espandi la sezione ID client OAuth 2.0 e prendi nota dell'impronta digitale del certificato (SHA1).

Se l'impronta digitale del certificato non corrisponde a quella utilizzata nei passaggi precedenti, devi creare un nuovo ID client con l'impronta digitale del certificato corretta. Devi creare il nuovo ID client in Play Console, non nel progetto Google Cloud Platform.

Verificare che gli account di prova siano abilitati

Prima di pubblicare un gioco, è necessario attivare come tester anche l'account che lo ha creato in Play Console. Per verificare che la configurazione sia corretta:

  1. Apri Play Console e vai al tuo gioco.
  2. Apri la scheda Test.
  3. Verifica che l'account con cui stai tentando di accedere sia presente nell'elenco dei tester.

Se l'account con cui stai tentando di accedere non è presente nell'elenco, aggiungilo all'elenco, attendi qualche minuto e riprova ad accedere.

Problemi relativi a ProGuard

Se utilizzi Proguard e vengono visualizzati errori nell'APK offuscato, controlla il livello API target su AndroidManifest.xml. Assicurati di impostarlo su 17 o su un valore superiore.

Altre cause dei problemi di configurazione

Verifica la presenza di altre cause comuni degli errori:

  • Se il tuo gioco è stato pubblicato, controlla che siano pubblicate anche le impostazioni del gioco (puoi pubblicare l'applicazione senza pubblicare le impostazioni del gioco). Per farlo, vai su Google Play Console, vai alla tua app e seleziona che la casella accanto al nome del gioco indichi che è stato pubblicato. Se indica che è in un altro stato, ad esempio "Pronto per la pubblicazione" o "Pronto per il test", fai clic sulla casella e seleziona Pubblica gioco.
  • Se non riesci a pubblicare il gioco, verifica che in uno degli ID client sia attiva l'opzione Questa app è preferita per le nuove installazioni.

Listener anonimi

Non utilizzare listener anonimi. I listener anonimi sono implementazioni di un'interfaccia listener definite in linea, come illustrato di seguito.

    ImageManager im = ...;

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

Gli ascoltatori anonimi non sono affidabili perché l'SDK di Play Giochi li considera come riferimenti deboli, il che significa che potrebbero essere recuperati dal garbage collector prima di essere richiamati. Devi invece implementare il listener utilizzando un oggetto permanente come 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...
        }
    }