Fehlerbehebung bei Play-Spieldiensten in Android-Spielen

Auf dieser Seite wird beschrieben, wie Sie Probleme beheben, mit den Google Play-Spieldiensten Android-Spiele entwickeln.

Protokollierung

Wenn du Probleme mit deinem Spiel beheben möchtest, kannst du die ausführliche Protokollierung aktivieren auf Ihrem Gerät mit dem Befehl adb shell. Sie können sich dann die Protokollnachrichten der Google Play-Spieldienste mit Logcat

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. Starten Sie Ihr Spiel auf dem Gerät und reproduzieren Sie das Problem, das Sie beheben möchten. .

  4. Protokolle aufrufen:

    adb logcat

Protokollierung deaktivieren

So deaktivieren Sie die ausführliche Protokollierung für die Play-Spieldienste auf Ihrem Gerät und Führen Sie den folgenden Befehl aus, um das ursprüngliche Logging-Verhalten wiederherzustellen:

adb shell setprop log.tag.Games INFO

Anmelden nicht möglich

Wenn Sie keine Spieler in Ihrem Spiel anmelden können, befolgen Sie die Anweisungen, Client-IDs erstellen und Spieldienste konfigurieren Falls weiterhin Anmeldefehler auftreten, überprüfen Sie die folgenden Punkte, um sicherzustellen, ob dein Spiel richtig eingerichtet ist.

Metadaten-Tags prüfen

AndroidManifest.xml muss ein Metadaten-Tag für Spiele enthalten. Um zu prüfen, ob müssen Ihre Metadaten-Tags richtig eingerichtet sein:

  1. Öffnen Sie die AndroidManifest.xml und prüfen Sie, ob sie wie unten gezeigt ein meta-data-Tag 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 ist normalerweise in einer XML-Datei definiert. im Verzeichnis res/xml, 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. Das Paket name ist der Wert des Attributs package im manifest-Tag.

  2. Überprüfe den Paketnamen, den du beim Erstellen der Client-ID angegeben hast. Zur Bestätigung den Paketnamen in der Google Play Console finden Sie im Play Console 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. Es muss eine verknüpfte Android-App in dieser Liste sein, deren Paketname mit dem Paketname in deinem AndroidManifest.xml. Wenn es eine Abweichung gibt, erstellen Sie eine neue Client-ID mit dem richtigen Paketnamen ein und versuchen Sie noch einmal, sich anzumelden.

Fingerabdruck des Zertifikats prüfen

Das Zertifikat, mit dem du dein Spiel signierst, sollte mit dem Zertifikatfingerabdruck, der mit Ihrer Client-ID verknüpft ist. Um dies zu überprüfen, So prüfen Sie den SHA1-Fingerabdruck Ihres Zertifikats:

  1. Suchen Sie Ihre Zertifikatdatei und rufen Sie ihren SHA1-Fingerabdruck ab. Um die SHA1-Fingerabdruck zu erhalten, führen Sie den folgenden Befehl aus:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Achten Sie auf die Folge der Hexadezimalziffern mit der Bezeichnung SHA1: in der . 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 aus 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. 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. Achten Sie auf die Folge von Hexadezimalziffern in der Zeile SHA1:.

    Diese Ziffernfolge sollte mit dem Fingerabdruck Ihres Zertifikats aus der vorherigen Schritt. Wenn es eine Diskrepanz gibt, ist Ihr Build-Tool oder System nicht konfiguriert, um Ihre Anwendung mit Ihrem Zertifikat zu signieren. In diesem Fall finden Sie in der Dokumentation Ihrer Build-Umgebung. und versuchen Sie noch einmal, sich anzumelden.

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

  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üpftes Google Cloud Platform-Projekt.
  3. Wählen Sie Ihr Projekt aus.
  4. Wählen Sie in der linken Seitenleiste APIs und auth. Achten Sie darauf, dass der Der API-Status der Google Play-Spieldienste ist in der angezeigten Liste der APIs EIN.
  5. Wählen Sie links Registrierte Apps aus.
  6. Maximieren Sie den Bereich „OAuth 2.0-Client-ID“ und notieren Sie sich das Zertifikat. Fingerabdruck (SHA1).

Wenn dieser Fingerabdruck nicht mit dem Fingerabdruck Ihres Zertifikats aus der müssen Sie eine neue Client-ID mit dem richtigen Zertifikat erstellen, Fingerabdruck. Erstellen Sie die neue Client-ID im in der Play Console und nicht im Google Cloud Platform-Projekt.

Aktivierung der Testkonten prüfen

Vor der Veröffentlichung eines Spiels: Das Konto, über das das Spiel erstellt wurde, Die Play Console muss auch als Tester aktiviert sein. Um das zu prüfen, Dies ist richtig konfiguriert:

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

Wenn das Konto, mit dem du dich anmelden möchtest, nicht aufgeführt ist, füge es der Liste hinzu und warte ein paar Minuten. und versuchen Sie noch einmal, sich anzumelden.

Proguard-Probleme

Wenn Sie Proguard verwenden und Fehler im verschleierten APK angezeigt werden, prüfen Sie 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, achten Sie darauf, dass auch die Spieleinstellungen veröffentlicht sind. die App veröffentlichen, ohne die Spieleinstellungen zu veröffentlichen. Gehen Sie dazu zu Google Play Console und gehen Sie zu Ihrer App. Klicken Sie auf das Kästchen neben dem Namen des Spiels, dass es veröffentlicht wird. Wenn ein anderer Status angegeben ist, z. B. „Bereit zur Veröffentlichung“ oder Klicken Sie auf das Feld „Ready to Test“ (Bereit zum Testen) und wählen Sie Publish Game (Spiel veröffentlichen) aus.
  • Wenn Sie Ihr Spiel nicht veröffentlichen können, achten Sie darauf, dass genau eine der Client-IDs den Vermerk Diese App ist für Neuinstallationen bevorzugt aktiviert ist.

Anonyme Zuhörer

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

    ImageManager im = ...;

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

Anonyme Zuhörer sind unzuverlässig, weil das Play Spiele SDK sie als schwache Referenzen Das bedeutet, dass sie vom Garbage Collector zurückgefordert werden können, bevor sie aufgerufen wird. Stattdessen sollten Sie den Listener mithilfe eines persistenten Objekts wie die 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...
        }
    }