На этой странице описано, как устранять неполадки, которые могут возникнуть при разработке игр для Android с использованием сервисов Google Play Games.
Ведение журнала
Для устранения неполадок в игре вы можете включить подробное логирование на своем устройстве с помощью команды adb shell . Затем вы можете просмотреть сообщения журнала Google Play Games Services с помощью команды logcat.
Включить ведение журнала
Чтобы включить ведение журнала на тестовом устройстве:
Подключите устройство к компьютеру, на котором установлен Android SDK.
Откройте терминал и выполните следующую команду:
adb shell setprop log.tag.Games VERBOSE
Запустите игру на устройстве и воспроизведите проблему, которую пытаетесь отладить.
Просмотреть журналы:
adb logcat
Отключить ведение журнала
Чтобы отключить подробное логирование для сервисов Play Games на вашем устройстве и вернуться к исходному режиму логирования, выполните следующую команду:
adb shell setprop log.tag.Games INFO
Не удалось выполнить аутентификацию.
Если вам не удаётся авторизовать игроков в игре, сначала убедитесь, что вы выполнили инструкции по созданию идентификаторов клиентов и настройке игровых сервисов . Если ошибки аутентификации сохраняются, проверьте следующие пункты, чтобы убедиться в правильной настройке игры.
Проверьте свои метаданные.
В вашем AndroidManifest.xml должен содержаться тег метаданных для игр. Чтобы убедиться в правильности настройки тегов метаданных:
Откройте файл
AndroidManifest.xmlи убедитесь, что он содержит тегmeta-dataкак показано ниже:<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@s>tring/app_id" /Найдите определение вашего ресурса
@string/app_id. Обычно оно находится в XML-файле, расположенном в каталогеres/xml, например,res/xml/strings.xmlилиres/xml/ids.xml.Убедитесь, что значение ресурса
@string/app_idсовпадает с числовым идентификатором вашего приложения. Значение этого ресурса должно содержать только цифры. Например:<string name="ap>p_id"12<3456789>012/string
Проверьте название вашей посылки.
Название пакета вашей игры должно совпадать с названием пакета в вашем клиентском идентификаторе. Чтобы проверить название пакета:
Откройте файл
AndroidManifest.xmlи убедитесь, что имя пакета вашей игры указано правильно. Имя пакета — это значение атрибутаpackageв тегеmanifest.Проверьте имя пакета, которое вы указали при создании идентификатора клиента. Чтобы проверить имя пакета в Google Play Console, перейдите в Play Console и щелкните запись, соответствующую вашей игре.
Перейдите на вкладку «Связанные приложения» и изучите список идентификаторов клиентов. В этом списке должно быть связанное приложение Android, имя пакета которого совпадает с именем пакета в вашем файле
AndroidManifest.xml. Если есть несоответствие, создайте новый идентификатор клиента с правильным именем пакета и попробуйте пройти аутентификацию снова.
Проверьте отпечаток сертификата.
Сертификат, с помощью которого вы аутентифицируете свою игру, должен совпадать с отпечатком сертификата, связанным с вашим идентификатором клиента. Для проверки этого сначала проверьте отпечаток SHA1 вашего сертификата следующим образом:
Найдите свой файл сертификата и получите его отпечаток SHA1. Для получения отпечатка SHA1 выполните следующую команду:
keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -vОбратите внимание на последовательность шестнадцатеричных цифр, обозначенную как
SHA1:в выходных данных. Это отпечаток вашего сертификата.
Далее убедитесь, что ваш инструмент сборки использует этот сертификат:
- Сгенерируйте APK-файл вашей игры с помощью инструмента сборки и подпишите его нужным сертификатом. Скопируйте сгенерированный APK-файл во временную директорию.
Во временной директории выполните следующую команду, чтобы распаковать APK-файл.
unzip YourGame.apkСгенерируйте закрытый ключ, используя файл сертификата RSA:
keytool -printcert -file META-INF/CERT.RSAВ качестве альтернативы, вы можете сгенерировать закрытый ключ, используя файл сертификата DSA:
keytool -printcert -file META-INF/CERT.DSAОбратите внимание на последовательность шестнадцатеричных цифр в строке с меткой
SHA1:.Эта последовательность цифр должна совпадать с отпечатком вашего сертификата, полученным на предыдущем шаге. Если есть несоответствие, значит, ваш инструмент или система сборки не настроены для подписи вашего приложения с помощью вашего сертификата. В этом случае обратитесь к документации вашей среды сборки, чтобы узнать, как правильно ее настроить, и попробуйте пройти аутентификацию снова.
Далее проверьте, совпадает ли отпечаток сертификата с отпечатком, настроенным в вашем идентификаторе клиента. Для этого:
- Откройте Play Console и найдите свою игру.
- На странице с подробной информацией об игре прокрутите страницу вниз и щелкните ссылку на соответствующий проект Google Cloud Platform.
- Выберите свой проект.
- В боковой панели слева выберите «API и аутентификация» . Убедитесь, что в отображаемом списке API сервисов Google Play Games статус «ВКЛ. ».
- В боковой панели слева выберите «Зарегистрированные приложения» .
- Разверните раздел «Идентификатор клиента OAuth 2.0» и запишите отпечаток сертификата (SHA1).
Если этот отпечаток не совпадает с отпечатком вашего сертификата, полученным на предыдущих шагах, необходимо создать новый идентификатор клиента с правильным отпечатком сертификата. Новый идентификатор клиента следует создавать в консоли Play, а не в проекте Google Cloud Platform.
Убедитесь, что тестовые учетные записи включены.
Перед публикацией игры необходимо также активировать учетную запись, создавшую игру в Play Console, в качестве тестировщика. Чтобы проверить правильность настройки:
- Откройте Play Console и найдите свою игру.
- Откройте вкладку «Тестирование» .
- Убедитесь, что учетная запись, с помощью которой вы пытаетесь пройти аутентификацию, находится в списке тестировщиков.
Если учетная запись, с помощью которой вы пытаетесь пройти аутентификацию, отсутствует в списке, добавьте ее, подождите несколько минут и попробуйте пройти аутентификацию снова.
Проблемы Proguard
Если вы используете Proguard и видите ошибки в обфусцированном APK-файле, проверьте уровень целевого API в файле AndroidManifest.xml . Убедитесь, что он установлен на 17 или выше.
Другие причины проблем с настройкой
Проверьте наличие других распространенных причин ошибок:
- Если ваша игра опубликована, убедитесь, что настройки игры также опубликованы (можно опубликовать приложение, не публикуя настройки игры). Для этого перейдите в Google Play Console, найдите своё приложение и убедитесь, что рядом с названием игры стоит галочка, указывающая на то, что игра опубликована. Если же галочка указывает на другое состояние, например, «Готово к публикации» или «Готово к тестированию», поставьте её и выберите «Опубликовать игру» .
- Если вы не можете опубликовать свою игру, убедитесь, что хотя бы у одного из идентификаторов клиента включена опция «Это приложение предпочтительно для новых установок» .
Анонимные слушатели
Не используйте анонимные обработчики событий. Анонимные обработчики событий — это реализации интерфейса обработчика событий, определенные непосредственно в коде, как показано ниже.
ImageManager im = ...;
// Anonymous listener -- dangerous:
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}
Анонимные обработчики событий ненадежны, поскольку SDK Play Games поддерживает их как слабые ссылки, а это значит, что они могут быть удалены сборщиком мусора до того, как будут вызваны. Вместо этого следует реализовывать обработчик событий с помощью персистентного объекта, такого как 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...
}
}