Rozwiązywanie problemów z usługami gier Play w grach na Androida

Z tego artykułu dowiesz się, jak rozwiązywać problemy, które mogą wystąpić podczas tworzenia gier na Androida przy użyciu usług gier Google Play.

Logowanie

Aby rozwiązać problemy z grą, możesz włączyć szczegółowe logowanie na urządzeniu za pomocą polecenia adb shell. Następnie możesz wyświetlić komunikaty z dziennika usług gier Google Play za pomocą narzędzia logcat.

Włącz rejestrowanie

Aby włączyć logowanie na urządzeniu testowym:

  1. Połącz urządzenie z komputerem, na którym jest zainstalowany pakiet Android SDK.

  2. Otwórz terminal i uruchom to polecenie:

    adb shell setprop log.tag.Games VERBOSE
  3. Uruchom grę na urządzeniu i odtwórz problem, który próbujesz debugować.

  4. Wyświetl logi:

    adb logcat

Wyłącz logowanie

Aby wyłączyć logowanie szczegółowe w usługach gier Play na urządzeniu i przywrócić pierwotne działanie logowania, uruchom to polecenie:

adb shell setprop log.tag.Games INFO

Nie można się zalogować

Jeśli nie możesz zalogować graczy do gry, najpierw upewnij się, że postępujesz zgodnie z instrukcjami tworzenia identyfikatorów klientów i konfigurowania usług gier. Jeśli nadal występują błędy logowania, sprawdź te elementy, aby upewnić się, że gra jest prawidłowo skonfigurowana.

Sprawdź tagi metadanych

AndroidManifest.xml musi zawierać tag metadanych gier. Aby sprawdzić, czy tagi metadanych są prawidłowo skonfigurowane:

  1. Otwórz plik AndroidManifest.xml i sprawdź, czy zawiera tag meta-data, jak pokazano poniżej:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Znajdź definicję zasobu @string/app_id. Zwykle jest definiowany w pliku XML, który znajduje się w katalogu res/xml, np. res/xml/strings.xml lub res/xml/ids.xml.

  3. Sprawdź, czy wartość zasobu @string/app_id jest zgodna z liczbowym identyfikatorem aplikacji. Wartość tego zasobu powinna zawierać tylko cyfry. Na przykład:

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

Sprawdź nazwę pakietu

Nazwa pakietu gry musi być taka sama jak nazwa pakietu podana w identyfikatorze klienta. Aby zweryfikować nazwę pakietu:

  1. Otwórz aplikację AndroidManifest.xml i sprawdź, czy nazwa pakietu gry jest prawidłowa. Nazwa pakietu to wartość atrybutu package w tagu manifest.

  2. Sprawdź nazwę pakietu podaną podczas tworzenia identyfikatora klienta. Aby sprawdzić nazwę pakietu w Konsoli Google Play, otwórz Konsolę Play i kliknij wpis odpowiadający Twojej grze.

  3. Otwórz kartę Połączone aplikacje i sprawdź listę identyfikatorów klientów. Na liście powinna znajdować się połączona aplikacja na Androida, której nazwa pakietu odpowiada nazwie pakietu w Twoim AndroidManifest.xml. Jeśli występują niezgodności, utwórz nowy identyfikator klienta z prawidłową nazwą pakietu i spróbuj zalogować się jeszcze raz.

Sprawdź odcisk cyfrowy certyfikatu

Certyfikat, którym podpisujesz grę, powinien być zgodny z odciskiem cyfrowym certyfikatu powiązanym z Twoim identyfikatorem klienta. Aby to sprawdzić, najpierw sprawdź odcisk cyfrowy SHA1 swojego certyfikatu w ten sposób:

  1. Znajdź plik certyfikatu i uzyskaj jego odcisk cyfrowy SHA1. Aby uzyskać odcisk cyfrowy SHA1, uruchom to polecenie:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Zanotuj sekwencję cyfr szesnastkowych oznaczonych jako SHA1: w danych wyjściowych. To jest odcisk cyfrowy Twojego certyfikatu.

Następnie sprawdź, czy narzędzie do kompilacji korzysta z tego certyfikatu:

  1. W narzędziu do tworzenia wygeneruj plik APK gry i podpisz go odpowiednim certyfikatem. Skopiuj wygenerowany plik APK do katalogu tymczasowego.
  2. W katalogu tymczasowym uruchom następujące polecenie, aby rozpakować pakiet APK.

    unzip YourGame.apk
    
  3. Wygeneruj klucz prywatny za pomocą pliku certyfikatu RSA:

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

    Klucz prywatny możesz też wygenerować za pomocą pliku certyfikatu DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Zwróć uwagę na sekwencję cyfr szesnastkowych w wierszu SHA1:.

    Ta sekwencja cyfr powinna być taka sama jak odcisk cyfrowy certyfikatu z poprzedniego kroku. Jeśli występuje niezgodność, narzędzie lub system do kompilacji nie został skonfigurowany do podpisywania aplikacji Twoim certyfikatem. W takim przypadku zapoznaj się z dokumentacją środowiska kompilacji, aby dowiedzieć się, jak je prawidłowo skonfigurować, i spróbuj zalogować się jeszcze raz.

Następnie sprawdź, czy odcisk cyfrowy certyfikatu jest zgodny z odciskiem cyfrowym skonfigurowanym w identyfikatorze klienta. Aby wykonać te działania:

  1. Otwórz Konsolę Play i przejdź do gry.
  2. Na stronie Szczegóły gry przewiń w dół i kliknij link do połączonego projektu Google Cloud Platform.
  3. Wybierz projekt.
  4. Na pasku bocznym po lewej stronie wybierz APIs & auth (Interfejsy API i uwierzytelnianie). Upewnij się, że interfejs API usług gier Google Play na wyświetlanej liście interfejsów API ma stan WŁ.
  5. Na pasku bocznym po lewej stronie kliknij Zarejestrowane aplikacje.
  6. Rozwiń sekcję Identyfikator klienta OAuth 2.0 i zanotuj odcisk cyfrowy certyfikatu (SHA1).

Jeśli ten odcisk cyfrowy nie jest zgodny z odciskiem cyfrowym certyfikatu z poprzednich kroków, musisz utworzyć nowy identyfikator klienta z właściwym odciskiem certyfikatu. Nowy identyfikator klienta musisz utworzyć w Konsoli Play, a nie w projekcie Google Cloud Platform.

Sprawdź, czy konta testowe są włączone

Przed opublikowaniem gry musisz mieć włączone konto testera na koncie, z którego została ona utworzona w Konsoli Play. Aby sprawdzić, czy konfiguracja jest prawidłowa:

  1. Otwórz Konsolę Play i przejdź do gry.
  2. Otwórz kartę Testowanie.
  3. Sprawdź, czy konto, za pomocą którego próbujesz się zalogować, znajduje się na liście testerów.

Jeśli konta, za pomocą którego próbujesz się zalogować, nie ma na liście, dodaj je do listy, odczekaj kilka minut i spróbuj zalogować się ponownie.

Problemy z ProGuard

Jeśli używasz ProGuard i w zaciemnionym pliku APK występują błędy, sprawdź docelowy poziom interfejsu API na urządzeniu AndroidManifest.xml. Pamiętaj, aby ustawić go na 17 lub więcej.

Inne przyczyny problemów z konfiguracją

Sprawdź, czy nie ma innych częstych przyczyn błędów:

  • Jeśli gra została opublikowana, sprawdź, czy jej ustawienia również zostały opublikowane (możesz opublikować aplikację bez publikowania ustawień gier). Aby to zrobić, otwórz Konsolę Google Play, przejdź do swojej aplikacji i zaznacz pole obok nazwy gry, która wskazuje, że została opublikowana. Jeśli wskazuje, że jest w innym stanie, np. „Gotowa do publikacji” lub „Gotowa do testów”, kliknij pole i wybierz Opublikuj grę.
  • Jeśli nie możesz opublikować gry, sprawdź, czy tylko jeden z identyfikatorów klienta ma włączoną opcję Ta aplikacja jest preferowana w przypadku nowych instalacji.

Anonimowi słuchacze

Nie używaj anonimowych detektorów. Anonimowe detektory to implementacje interfejsu odbiornika, które są zdefiniowane w tekście, jak pokazano poniżej.

    ImageManager im = ...;

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

Anonimowe detektory są zawodne, ponieważ pakiet SDK Gier Play utrzymuje je jako słabe odniesienia, co oznacza, że mogą zostać odzyskane przez moduł śmieci przed ich wywołaniem. Zamiast tego należy wdrożyć detektor za pomocą trwałego obiektu, takiego jak 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...
        }
    }