Устранение неполадок игровых сервисов Play в играх для Android

На этой странице описано, как устранить проблемы, с которыми вы можете столкнуться при разработке игр для Android с помощью игровых сервисов Google Play.

Ведение журнала

Чтобы устранить проблемы с игрой, вы можете включить подробное ведение журнала на своем устройстве с помощью команды adb shell . Затем вы можете просмотреть сообщения журнала игровых сервисов Google Play, используя logcat.

Включить ведение журнала

Чтобы включить ведение журнала на тестовом устройстве:

  1. Подключите устройство к компьютеру, на котором установлен Android SDK.

  2. Откройте терминал и выполните следующую команду:

    adb shell setprop log.tag.Games VERBOSE
  3. Запустите игру на устройстве и воспроизведите проблему, которую вы пытаетесь устранить.

  4. Просмотр журналов:

    adb logcat

Отключить ведение журнала

Чтобы отключить подробное ведение журнала для игровых сервисов Play на вашем устройстве и вернуться к исходному поведению журнала, выполните следующую команду:

adb shell setprop log.tag.Games INFO

Не удалось войти в систему

Если вам не удается войти в игру, сначала убедитесь, что вы выполнили инструкции по созданию идентификаторов клиентов и настройке игровых сервисов . Если вы по-прежнему сталкиваетесь с ошибками входа в систему, проверьте следующие пункты, чтобы убедиться, что ваша игра настроена правильно.

Проверьте теги метаданных

Ваш AndroidManifest.xml должен содержать тег метаданных игры. Чтобы убедиться, что ваши теги метаданных настроены правильно:

  1. Откройте файл AndroidManifest.xml и убедитесь, что он содержит тег meta-data как показано ниже:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Найдите определение вашего ресурса @string/app_id . Обычно он определяется в XML-файле, расположенном в каталоге res/xml , например res/xml/strings.xml или res/xml/ids.xml .

  3. Убедитесь, что значение ресурса @string/app_id соответствует числовому идентификатору вашего приложения. Значение этого ресурса должно содержать только цифры. Например:

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

Проверьте имя вашего пакета

Имя пакета вашей игры должно совпадать с именем пакета в вашем идентификаторе клиента. Чтобы проверить имя пакета:

  1. Откройте AndroidManifest.xml и убедитесь, что имя пакета вашей игры правильное. Имя пакета — это значение атрибута package в теге manifest .

  2. Проверьте имя пакета, которое вы указали при создании идентификатора клиента. Чтобы проверить имя пакета в консоли Google Play, перейдите в консоль Play и щелкните запись, соответствующую вашей игре.

  3. Перейдите на вкладку «Связанные приложения» и просмотрите список идентификаторов клиентов. В этом списке должно быть связанное с Android приложение, имя пакета которого соответствует имени пакета в вашем AndroidManifest.xml . В случае несоответствия создайте новый идентификатор клиента с правильным именем пакета и попробуйте войти еще раз.

Проверьте отпечаток сертификата

Сертификат, которым вы подписываете свою игру, должен совпадать с отпечатком сертификата, связанным с вашим идентификатором клиента. Чтобы убедиться в этом, сначала проверьте отпечаток SHA1 вашего сертификата следующим образом:

  1. Найдите файл сертификата и получите его отпечаток SHA1. Чтобы получить отпечаток SHA1, выполните следующую команду:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Обратите внимание на последовательность шестнадцатеричных цифр, обозначенных SHA1: в выводе. Это отпечаток вашего сертификата.

Затем убедитесь, что ваш инструмент сборки использует этот сертификат:

  1. Создайте APK-файл вашей игры с помощью инструмента сборки и подпишите его нужным сертификатом. Скопируйте созданный APK во временный каталог.
  2. Во временном каталоге выполните следующую команду, чтобы разархивировать APK.

    unzip YourGame.apk
    
  3. Создайте закрытый ключ, используя файл сертификата RSA:

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

    Альтернативно вы можете сгенерировать закрытый ключ, используя файл сертификата DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Обратите внимание на последовательность шестнадцатеричных цифр в строке с надписью SHA1: .

    Эта последовательность цифр должна совпадать с отпечатком вашего сертификата, полученным на предыдущем шаге. Если есть несоответствие, ваш инструмент сборки или система не настроены для подписи вашего приложения с помощью вашего сертификата. В этом случае обратитесь к документации вашей среды сборки, чтобы определить, как ее правильно настроить, и попытайтесь войти еще раз.

Затем проверьте, соответствует ли отпечаток сертификата отпечатку пальца, настроенному в вашем идентификаторе клиента. Для этого:

  1. Откройте Play Console и перейдите к своей игре.
  2. На странице сведений об игре прокрутите страницу вниз и щелкните ссылку на связанный проект Google Cloud Platform.
  3. Выберите свой проект.
  4. На боковой панели слева выберите API и аутентификация . Убедитесь, что в отображаемом списке API статус API игровых сервисов Google Play включен .
  5. На боковой панели слева выберите Зарегистрированные приложения .
  6. Разверните раздел «Идентификатор клиента OAuth 2.0» и обратите внимание на отпечаток сертификата (SHA1).

Если этот отпечаток не совпадает с отпечатком вашего сертификата, полученным на предыдущих шагах, вам необходимо создать новый идентификатор клиента с правильным отпечатком сертификата. Вы должны создать новый идентификатор клиента в Play Console, а не в проекте Google Cloud Platform.

Убедитесь, что тестовые учетные записи включены

Прежде чем игра будет опубликована, учетная запись, создавшая игру в Play Console, также должна быть включена в качестве тестера. Чтобы проверить правильность настройки:

  1. Откройте Play Console и перейдите к своей игре.
  2. Откройте вкладку «Тестирование» .
  3. Убедитесь, что учетная запись, под которой вы пытаетесь войти, находится в списке тестировщиков.

Если учетной записи, под которой вы пытаетесь войти, нет в списке, добавьте ее в список, подождите несколько минут и попробуйте войти еще раз.

Проблемы с прогардом

Если вы используете Proguard и видите ошибки в запутанном APK, проверьте целевой уровень API в AndroidManifest.xml . Обязательно установите значение 17 или выше.

Другие причины проблем с настройкой

Проверьте другие распространенные причины ошибок:

  • Если ваша игра опубликована, убедитесь, что настройки игры также опубликованы (можно опубликовать приложение без публикации настроек игры). Для этого перейдите в консоль Google Play, перейдите к своему приложению и установите флажок рядом с названием игры, указывающий, что она опубликована. Если указано, что она находится в другом состоянии, например «Готово к публикации» или «Готово к тестированию», щелкните поле и выберите «Опубликовать игру» .
  • Если вы не можете опубликовать свою игру, убедитесь, что ровно для одного из идентификаторов клиента включена опция «Это приложение является предпочтительным для новых установок» .

Анонимные слушатели

Не используйте анонимных прослушивателей. Анонимные прослушиватели — это реализации интерфейса прослушивателя, которые определены в строке, как показано ниже.

    ImageManager im = ...;

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

Анонимные прослушиватели ненадежны, поскольку Play Games SDK поддерживает их как слабые ссылки, а это означает, что сборщик мусора может удалить их до того, как они будут вызваны. Вместо этого вам следует реализовать прослушиватель, используя постоянный объект, такой как 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...
        }
    }