На этой странице описано, как устранять неполадки, которые могут возникнуть при разработке игр для 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="@string/app_id" />Найдите определение вашего ресурса
@string/app_id. Обычно оно находится в XML-файле, расположенном в каталогеres/xml, например,res/xml/strings.xmlилиres/xml/ids.xml.Убедитесь, что значение ресурса
@string/app_idсовпадает с числовым идентификатором вашего приложения. Значение этого ресурса должно содержать только цифры. Например:<string name="app_id">123456789012</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 или выше.
Другие причины проблем с настройкой
Проверьте наличие других распространенных причин ошибок:
- If your game is published, check that the game settings are also published (it is possible to publish the application without publishing the games settings). To do this, go to Google Play Console and navigate to your app, and check that the box next to the game's name indicates that it's published. If indicates that it is in another state, such as "Ready to Publish" or "Ready to Test", click the box and select Publish Game .
- Если вы не можете опубликовать свою игру, убедитесь, что хотя бы у одного из идентификаторов клиента включена опция «Это приложение предпочтительно для новых установок» .
Анонимные слушатели
Не используйте анонимные обработчики событий. Анонимные обработчики событий — это реализации интерфейса обработчика событий, определенные непосредственно в коде, как показано ниже.
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...
}
}