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

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

Невозможно войти

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

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

Ваш 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, перейдите в консоль Google Play и щелкните запись, соответствующую вашей игре. Перейдите на вкладку «Связанные приложения» и просмотрите список идентификаторов клиентов. В этом списке должно быть связанное с Android приложение, имя пакета которого совпадает с именем пакета в вашем AndroidManifest.xml .
  3. Если есть несоответствие, создайте новый идентификатор клиента с правильным именем пакета и повторите попытку входа.

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

Сертификат, которым вы подписываете свою игру, должен совпадать с отпечатком сертификата, связанным с вашим идентификатором клиента. Чтобы убедиться в этом, сначала проверьте отпечаток пальца 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. Откройте консоль Google Play и перейдите к своей игре.
  2. На странице сведений об игре прокрутите вниз и щелкните ссылку на связанный проект Google Cloud Platform.
  3. В Google Cloud Platform выберите свой проект.
  4. На боковой панели слева выберите APIs & auth . Убедитесь, что статус API игровых сервисов Google Play включен в отображаемом списке API.
  5. На боковой панели слева выберите Зарегистрированные приложения .
  6. Разверните раздел идентификатора клиента OAuth 2.0 и обратите внимание на отпечаток сертификата (SHA1).

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

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

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

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

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

Проблемы с Proguard

Если вы используете 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...
        }
    }