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

Sie können die ausführliche Protokollierung mit dem Befehl adb shell auf Ihrem Gerät aktivieren, um Probleme mit Ihrem Spiel zu beheben. Anschließend kannst du die Protokollmeldungen der Google Play-Spieldienste mithilfe von logcat aufrufen.

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

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

adb shell setprop log.tag.Games INFO

Anmeldung nicht möglich

Wenn Sie keine Spieler in Ihrem Spiel anmelden können, prüfen Sie zuerst, ob Sie der Anleitung zum Erstellen Ihrer Client-IDs und zum Konfigurieren der Spieldienste gefolgt sind. Sollten weiterhin Anmeldefehler auftreten, überprüfen Sie die folgenden Punkte, um sicherzustellen, dass Ihr Spiel richtig eingerichtet ist.

Metadaten-Tags prüfen

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

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

    <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 ist 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 Ressource @string/app_id mit der numerischen ID Ihrer Anwendung übereinstimmt. Der Wert dieser Ressource darf nur Ziffern enthalten. Beispiele:

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

Paketnamen prüfen

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

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

  2. Überprüfen Sie den Paketnamen, den Sie beim Erstellen der 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 AndroidManifest.xml übereinstimmt. Wenn es eine Abweichung gibt, erstellen Sie eine neue Client-ID 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 Zertifikat-Fingerabdruck übereinstimmen, der Ihrer Client-ID zugeordnet ist. Dazu prüfen Sie zuerst den SHA1-Fingerabdruck Ihres Zertifikats so:

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

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

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

  1. Generiere das APK deines Spiels aus deinem Build-Tool und signiere 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 Ihre APK-Datei zu entpacken.

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

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

    Alternativ können Sie den privaten Schlüssel mithilfe einer DSA-Zertifikatsdatei generieren:

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

    Diese Ziffernfolge sollte mit dem Fingerabdruck Ihres Zertifikats aus dem vorherigen Schritt übereinstimmen. Im Fall einer Abweichung ist das Build-Tool oder System nicht für das Signieren Ihrer Anwendung mit Ihrem Zertifikat konfiguriert. Lesen 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 Fingerabdruck des Zertifikats 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 Infos zum Spiel 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. Der API-Status der Google Play-Spieldienste muss in der Liste der APIs AN sein.
  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 Zertifikatfingerabdruck (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 Zertifikatfingerabdruck 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

Vor der Veröffentlichung eines Spiels 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 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 du Proguard verwendest und bei dem verschleierten APK Fehler auftreten, prüfe das Ziel-API-Level auf deinem 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 wurden. Sie können die App auch veröffentlichen, ohne die Spieleinstellungen zu veröffentlichen. Rufe dazu die Google Play Console auf und rufe deine App auf. Im Kästchen neben dem Namen des Spiels wird angezeigt, dass es veröffentlicht wurde. Wenn ein anderer Status angezeigt wird, z. B. „Bereit zur Veröffentlichung“ oder „Bereit zum Testen“, klicken Sie auf das Feld und wählen Sie Spiel veröffentlichen aus.
  • Wenn Sie Ihr Spiel nicht veröffentlichen können, prüfen Sie, ob bei genau einer der Client-IDs die Option Diese App wird für neue Installationen bevorzugt aktiviert ist.

Anonyme Zuhörer

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

    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 vom Play Spiele SDK als schwache Referenzen behandelt werden. Dies bedeutet, dass sie möglicherweise von der automatischen Speicherbereinigung zurückgefordert werden, bevor sie aufgerufen werden. Implementieren Sie den Listener stattdessen mit einem nichtflüchtigen Objekt wie 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...
        }
    }