Fehlerbehebung bei Play-Spieldiensten in Android-Spielen

Auf dieser Seite wird beschrieben, wie Sie Probleme beheben, die bei der Entwicklung von Android-Spielen mit den Google Play-Spieldiensten auftreten können.

Protokollierung

Wenn Sie Probleme mit Ihrem Spiel beheben möchten, können Sie mit dem Befehl adb shell die ausführliche Protokollierung auf Ihrem Gerät aktivieren. Sie können sich dann die Logmeldungen der Google Play Spieledienste mit logcat ansehen.

Protokollierung 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 beheben möchten.

  4. Protokolle aufrufen:

    adb logcat

Protokollierung deaktivieren

Wenn Sie die ausführliche Protokollierung für die Play Spiele-Dienste auf Ihrem Gerät deaktivieren und zum ursprünglichen Protokollierungsverhalten zurückkehren möchten, führen Sie den folgenden Befehl aus:

adb shell setprop log.tag.Games INFO

Anmelden nicht möglich

Wenn Sie Spieler nicht in Ihrem Spiel anmelden können, prüfen Sie zuerst, ob Sie der Anleitung zum Erstellen Ihrer Client-IDs und zum Konfigurieren von Spielediensten gefolgt sind. Wenn weiterhin Anmeldefehler 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 überprüfen Sie, ob Ihre Metadaten-Tags richtig eingerichtet sind:

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

    <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 darf 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 überprüfen Sie den Paketnamen:

  1. Öffne dein AndroidManifest.xml und prüfe, ob der Paketname deines Spiels korrekt ist. Der Paketname ist der Wert des Attributs package im manifest-Tag.

  2. Überprüfe den Paketnamen, den du beim Erstellen der Client-ID angegeben hast. Sie können den Paketnamen in der Google Play Console prüfen, indem Sie die Play Console aufrufen und auf den Eintrag für Ihr Spiel klicken.

  3. Gehen Sie zum Tab Verknüpfte Apps und untersuchen Sie die Liste der Client-IDs. Diese Liste sollte eine verknüpfte Android-App enthalten, deren Paketname mit dem Paketnamen in AndroidManifest.xml übereinstimmt. Wenn die Angaben nicht übereinstimmen, erstellen Sie eine neue Kundennummer mit dem richtigen Paketnamen und versuchen Sie noch einmal, sich anzumelden.

Fingerabdruck des Zertifikats prüfen

Das Zertifikat, mit dem Sie Ihr Spiel signieren, muss mit dem Zertifikatsfingerabdruck übereinstimmen, der mit Ihrer Client-ID verknüpft 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 diesen Befehl aus, um den SHA1-Fingerabdruck zu erhalten:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Beachten Sie die Folge der Hexadezimalziffern mit dem Label SHA1: in der Ausgabe. Dies ist der Fingerabdruck Ihres Zertifikats.

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

  1. Generieren Sie das APK Ihres Spiels mit Ihrem Build-Tool und signieren Sie es 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 Ihr APK zu entpacken.

    unzip YourGame.apk
    
  3. So 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 Sequenz von Hexadezimalziffern in der Zeile mit der Beschriftung SHA1:.

    Diese Ziffernfolge muss mit dem Zertifikatsfingerabdruck aus dem vorherigen Schritt übereinstimmen. Im Falle einer Abweichung ist Ihr Build-Tool oder System nicht für das Signieren Ihrer Anwendung mit Ihrem Zertifikat konfiguriert. Sehen Sie in diesem Fall in der Dokumentation Ihrer Build-Umgebung nach, wie Sie sie richtig konfigurieren, und versuchen Sie noch einmal, sich anzumelden.

Prüfen Sie als Nächstes, ob der Zertifikatfingerabdruck mit dem Fingerabdruck übereinstimmt, der in Ihrer Client-ID konfiguriert ist. Ziel

  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ähle in der linken Seitenleiste APIs und Authentifizierung aus. Prüfen Sie, ob der API-Status der Google Play-Spieldienste in der Liste der APIs EIN lautet.
  5. Wählen Sie in der Seitenleiste links Registrierte Apps aus.
  6. Maximieren Sie den Abschnitt OAuth 2.0-Client-ID und notieren Sie sich den Fingerabdruck des Zertifikats (SHA1).

Wenn dieser Fingerabdruck nicht mit dem Fingerabdruck Ihres Zertifikats 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-Projekt erstellen.

Aktivierung der Testkonten prüfen

Bevor ein Spiel veröffentlicht wird, muss das Konto, mit dem es 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 sich das Konto, mit dem Sie sich anmelden möchten, in der Liste der Tester befindet.

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

Proguard-Probleme

Wenn Sie Proguard verwenden und Fehler im verschleierten APK auftreten, prüfen Sie das Ziel-API-Level in Ihrem 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 wurde, prüfen Sie, ob auch die Spieleinstellungen veröffentlicht wurden. Es ist möglich, die App zu veröffentlichen, ohne die Spieleinstellungen zu veröffentlichen. Rufen Sie dazu die Google Play Console auf, suchen Sie nach Ihrer App und prüfen Sie, ob das Kästchen neben dem Namen des Spiels markiert ist. Wenn ein anderer Status angezeigt wird, 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 Neuinstallationen bevorzugt aktiviert ist.

Anonyme Zuhörer

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 nicht zuverlässig, da sie vom Play Spiele SDK als schwache Referenzen verwaltet werden. Das bedeutet, dass sie möglicherweise von der Garbage Collection wiederverwendet werden, bevor sie aufgerufen werden. Stattdessen sollten Sie den Listener mit einem persistenten Objekt wie 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...
        }
    }