Fehlerbehebung bei Play-Spieldiensten in Android-Spielen

Auf dieser Seite wird beschrieben, wie Sie Probleme beheben, die beim Entwickeln von Android-Spielen mit Google Play Games-Diensten auftreten können.

Logging

Zur Fehlerbehebung bei Problemen mit Ihrem Spiel können Sie die ausführliche Protokollierung auf Ihrem Gerät mit dem Befehl adb shell aktivieren. Anschließend können Sie die Logmeldungen von Google Play Games-Diensten mit Logcat ansehen.

Logging aktivieren

So aktivieren Sie die Protokollierung auf Ihrem Testgerät:

  1. Schließen Sie das Gerät an einen Computer an, auf dem das Android-SDK installiert ist.

  2. Öffnen Sie eine Eingabeaufforderung und führen Sie den folgenden Befehl aus:

    adb shell setprop log.tag.Games VERBOSE
  3. Führen Sie Ihr Spiel auf dem Gerät aus und reproduzieren Sie das Problem, das Sie debuggen möchten.

  4. Protokolle aufrufen:

    adb logcat

Logging deaktivieren

Führen Sie den folgenden Befehl aus, um die ausführliche Protokollierung für die Play Games-Dienste auf Ihrem Gerät zu deaktivieren und zum ursprünglichen Protokollierungsverhalten zurückzukehren:

adb shell setprop log.tag.Games INFO

Authentifizierung nicht möglich

Wenn Sie Spieler nicht in Ihrem Spiel authentifizieren können, prüfen Sie zuerst, ob Sie die Anleitung zum Erstellen von Client-IDs und Konfigurieren von Spieldiensten befolgt haben. Wenn weiterhin Authentifizierungsfehler auftreten, prüfen Sie die folgenden Punkte, um sicherzustellen, dass Ihr Spiel richtig eingerichtet ist.

Metadaten-Tags prüfen

Ihre AndroidManifest.xml muss ein Metadaten-Tag für Spiele enthalten. So prüfen Sie, ob Ihre Metadaten-Tags richtig eingerichtet sind:

  1. Öffnen Sie AndroidManifest.xml und prüfen Sie, ob sie ein meta-data-Tag wie unten gezeigt enthält:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Suchen Sie die Definition Ihrer @string/app_id-Ressource. Sie wird normalerweise in einer XML-Datei im Verzeichnis res/xml definiert, z. B. res/xml/strings.xml oder res/xml/ids.xml.

  3. Prüfen Sie, ob der Wert der @string/app_id-Ressource mit der numerischen ID Ihrer Anwendung übereinstimmt. Der Wert dieser Ressource sollte nur Ziffern enthalten. Beispiel:

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

Paketnamen prüfen

Der Paketname Ihres Spiels muss mit dem Paketnamen in Ihrer Client-ID übereinstimmen. So prüfen Sie den Paketnamen:

  1. Öffnen Sie AndroidManifest.xml und prüfen Sie, ob der Paketname Ihres Spiels korrekt ist. Der Paketname ist der Wert des Attributs package im Tag manifest.

  2. Prüfen Sie den Paketnamen, den Sie beim Erstellen Ihrer Client-ID angegeben haben. Wenn Sie den Paketnamen in der Google Play Console prüfen möchten, rufen Sie die Play Console auf und klicken Sie auf den Eintrag für Ihr Spiel.

  3. Gehen Sie zum Tab Verknüpfte Apps und untersuchen Sie die Liste der Client-IDs. In dieser Liste sollte eine verknüpfte Android-App vorhanden sein, deren Paketname mit dem Paketnamen in Ihrer AndroidManifest.xml übereinstimmt. Wenn es eine Abweichung gibt, erstellen Sie eine neue Client-ID mit dem richtigen Paketnamen und versuchen Sie noch einmal, sich zu authentifizieren.

Zertifikat-Fingerabdruck prüfen

Das Zertifikat, mit dem Sie Ihr Spiel authentifizieren, sollte mit dem Zertifikat-Fingerabdruck übereinstimmen, der Ihrer Client-ID zugeordnet ist. Prüfen Sie dazu zuerst den SHA1-Fingerabdruck Ihres Zertifikats:

  1. Suchen Sie Ihre Zertifikatdatei und rufen Sie ihren SHA1-Fingerabdruck ab. Führen Sie dazu den folgenden Befehl aus:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Notieren Sie sich die Folge von Hexadezimalziffern, die in der Ausgabe mit SHA1: gekennzeichnet ist. Dies ist der Fingerabdruck Ihres Zertifikats.

Prüfen Sie als Nächstes, ob Ihr Erstellungs-Tool dieses Zertifikat verwendet:

  1. Generieren Sie die APK-Datei Ihres Spiels mit Ihrem Erstellungs-Tool und signieren Sie sie mit dem gewünschten Zertifikat. Kopieren Sie die generierte APK-Datei in ein temporäres Verzeichnis.
  2. Führen Sie im temporären Verzeichnis den folgenden Befehl aus, um die APK-Datei zu entpacken.

    unzip YourGame.apk
    
  3. Generieren Sie einen privaten Schlüssel mit einer RSA-Zertifikatdatei:

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

    Alternativ können Sie den privaten Schlüssel mit einer DSA-Zertifikatdatei generieren:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Notieren Sie sich die Folge von Hexadezimalziffern in der Zeile mit der Bezeichnung SHA1:.

    Diese Ziffernfolge sollte mit dem Zertifikat-Fingerabdruck aus dem vorherigen Schritt übereinstimmen. Wenn es eine Abweichung gibt, ist Ihr Erstellungs-Tool oder System nicht so konfiguriert, dass Ihre Anwendung mit Ihrem Zertifikat signiert wird. In diesem Fall finden Sie in der Dokumentation Ihrer Erstellungsumgebung Informationen zur richtigen Konfiguration und versuchen Sie noch einmal, sich zu authentifizieren.

Prüfen Sie als Nächstes, ob der Zertifikat-Fingerabdruck mit dem in Ihrer Client-ID konfigurierten Fingerabdruck übereinstimmt. Aktion:

  1. Öffnen Sie die Play Console und rufen Sie Ihr Spiel auf.
  2. Scrollen Sie auf der Seite Spieldetails nach unten und klicken Sie auf den Link zum verknüpften Google Cloud Platform-Projekt.
  3. Wählen Sie Ihr Projekt aus.
  4. Wählen Sie in der linken Seitenleiste APIs und Authentifizierung aus. Prüfen Sie, ob der Status der Google Play Games Services API in der angezeigten Liste der APIs AN ist.
  5. Wählen Sie in der linken Seitenleiste Registrierte Apps aus.
  6. Maximieren Sie den Abschnitt „OAuth 2.0-Client-ID“ und notieren Sie sich den Zertifikatsfingerabdruck (SHA1).

Wenn dieser Fingerabdruck nicht mit dem Zertifikatsfingerabdruck aus den vorherigen Schritten übereinstimmt, müssen Sie eine neue Client-ID mit dem richtigen Zertifikatsfingerabdruck erstellen. Sie müssen die neue Client-ID in der Play Console und nicht im Google Cloud Platform-Projekt erstellen.

Aktivierung der Testkonten prüfen

Bevor ein Spiel veröffentlicht wird, muss das Konto, mit dem das Spiel in der Play Console erstellt wurde, auch als Tester aktiviert werden. So prüfen Sie, ob dies richtig konfiguriert ist:

  1. Öffnen Sie die Play Console und rufen Sie Ihr Spiel auf.
  2. Öffnen Sie den Tab Test.
  3. Prüfen Sie, ob das Konto, mit dem Sie sich authentifizieren möchten, in der Liste der Tester enthalten ist.

Wenn das Konto, mit dem Sie sich authentifizieren möchten, nicht aufgeführt ist, fügen Sie es der Liste hinzu, warten Sie einige Minuten und versuchen Sie noch einmal, sich zu authentifizieren.

Proguard-Probleme

Wenn Sie Proguard verwenden und Fehler in der verschleierten APK-Datei sehen, prüfen Sie die Ziel-API-Ebene in Ihrer AndroidManifest.xml. Setzen Sie sie mindestens auf den Wert 17.

Sonstige Ursachen für Einrichtungsprobleme

Prüfen Sie, ob andere häufige Ursachen für Fehler vorliegen:

  • Wenn Ihr Spiel veröffentlicht ist, prüfen Sie, ob auch die Spieleinstellungen veröffentlicht sind. Es ist möglich, die Anwendung zu veröffentlichen, ohne die Spieleinstellungen zu veröffentlichen. Rufen Sie dazu die Google Play Console auf und gehen Sie zu Ihrer App. Prüfen Sie, ob das Kästchen neben dem Namen des Spiels angibt, dass es veröffentlicht ist. Wenn angezeigt wird, dass es sich in einem anderen Status befindet, z. B. „Bereit zur Veröffentlichung“ oder „Bereit zum Testen“, klicken Sie auf das Kästchen und wählen Sie Spiel veröffentlichen aus.
  • Wenn Sie Ihr Spiel nicht veröffentlichen können, prüfen Sie, ob für genau eine der Client-IDs die Option Diese App wird für neue Installationen bevorzugt aktiviert ist.

Anonyme Listener

Verwenden Sie keine anonymen Listener. Anonyme Listener sind Implementierungen einer Listener-Schnittstelle, die inline definiert werden, wie unten dargestellt.

    ImageManager im = ...;

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

Anonyme Listener sind unzuverlässig, da sie im Play Games SDK als schwache Referenzen verwaltet werden. Das bedeutet, dass sie möglicherweise vom Garbage Collector freigegeben werden, bevor sie aufgerufen werden. Stattdessen sollten Sie den Listener mit einem persistenten Objekt wie der Activity implementieren.

    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...
        }
    }