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

Questa pagina descrive come risolvere i problemi che potresti riscontrare durante lo sviluppo di giochi per Android con Google Play Services per i giochi.

Logging

Per risolvere i problemi relativi al gioco, puoi attivare la registrazione dettagliata sul dispositivo utilizzando il comando adb shell. Puoi quindi visualizzare i messaggi di log di Google Play Giochi Services 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 che stai cercando di risolvere.

  4. Visualizza i log:

    adb logcat

Disattivare il logging

Per disattivare il logging dettagliato per Play Services sul tuo dispositivo e ripristinare il comportamento di registrazione originale, esegui il seguente comando:

adb shell setprop log.tag.Games INFO

Impossibile accedere

Se non riesci a far accedere i giocatori al tuo gioco, assicurati innanzitutto di aver seguito le istruzioni per creare gli ID cliente 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 dei metadati dei giochi. Per verificare che i tag dei metadati siano configurati 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. In genere è 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 dell'applicazione. Il valore di questa risorsa deve contenere solo cifre. Ad esempio:

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

Controlla il nome del pacchetto

Il nome del pacchetto del gioco deve corrispondere a quello indicato nell'ID cliente. 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 durante la creazione dell'ID cliente. Per verificare il nome del pacchetto in Google Play Console, vai a 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 del pacchetto corrisponde al nome del pacchetto in AndroidManifest.xml. Se non c'è corrispondenza, crea un nuovo ID cliente con il nome del pacchetto corretto e prova ad accedere di nuovo.

Controllare l'impronta del certificato

Il certificato con cui firmi il gioco deve corrispondere all'impronta del certificato associata al tuo ID cliente. Per verificare, controlla prima l'impronta SHA1 del certificato come segue:

  1. Individua il file del certificato e ottieni 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 etichettata come SHA1: nell'output. Si tratta dell'impronta del certificato.

A questo punto, verifica che lo strumento di compilazione utilizzi questo certificato:

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

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

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

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

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Prendi nota della sequenza di cifre esadecimali nella riga etichettata SHA1:.

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

Successivamente, controlla se l'impronta del certificato corrisponde a quella configurata nel tuo ID cliente. Per:

  1. Apri Play Console e vai al tuo gioco.
  2. Nella pagina Dettagli gioco, scorri verso il basso 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 Servizi per i giochi di Google Play sia ON nell'elenco delle API visualizzato.
  5. Nella barra laterale a sinistra, seleziona App registrate.
  6. Espandi la sezione ID client OAuth 2.0 e prendi nota della fingerprint del certificato (SHA1).

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

Verificare che gli account di test siano abilitati

Prima che un gioco venga pubblicato, l'account che lo ha creato in Play Console deve essere attivato anche come tester. Per verificare che sia configurato correttamente:

  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, attendi qualche minuto e riprova ad accedere.

Problemi di Proguard

Se utilizzi Proguard e visualizzi errori nell'APK offuscato, controlla il livello API target sul tuo AndroidManifest.xml. Assicurati di impostarlo su 17 o superiore.

Altre cause di problemi di configurazione

Verifica se sono presenti altre cause comuni di errori:

  • Se il gioco è pubblicato, controlla che siano pubblicate anche le impostazioni del gioco (è possibile pubblicare l'applicazione senza pubblicare le impostazioni del gioco). Per farlo, vai su Google Play Console, vai alla tua app e controlla che la casella accanto al nome del gioco indichi che è pubblicata. Se indica che si trova 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 per esattamente uno degli ID cliente sia attiva l'opzione Questa app è preferita per le nuove installazioni.

Listener anonimi

Non utilizzare ascoltatori anonimi. I listener anonimi sono implementazioni di un'interfaccia di listener che sono 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 Play Giochi li gestisce come riferimenti deboli, il che significa che potrebbero essere recuperati dal garbage collector prima di essere invocati. Dovresti invece implementare l'ascoltatore utilizzando un oggetto persistente 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...
        }
    }