На этой странице описывается, как устранять проблемы, с которыми вы можете столкнуться при разработке игр для Android с помощью Play Games SDK.
Невозможно войти
Если вам не удается зарегистрировать игроков в своей игре, сначала убедитесь, что вы выполнили инструкции по созданию идентификаторов клиентов и настройке игровых служб . Если вы по-прежнему сталкиваетесь с ошибками входа, проверьте следующие элементы, чтобы убедиться, что ваша игра настроена правильно.
Проверьте теги метаданных
Ваш 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, перейдите в консоль Google Play и щелкните запись, соответствующую вашей игре. Перейдите на вкладку «Связанные приложения» и просмотрите список идентификаторов клиентов. В этом списке должно быть связанное с 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:
.Эта последовательность цифр должна совпадать с отпечатком вашего сертификата из предыдущего шага. Если есть несоответствие, ваш инструмент сборки или система не настроены для подписи приложения вашим сертификатом. В этом случае обратитесь к документации по вашей среде сборки, чтобы определить, как ее правильно настроить, и попробуйте войти еще раз.
Затем проверьте, соответствует ли отпечаток сертификата отпечатку пальца, настроенному в вашем идентификаторе клиента. Сделать это:
- Откройте консоль Google Play и перейдите к своей игре.
- На странице сведений об игре прокрутите вниз и щелкните ссылку на связанный проект Google Cloud Platform.
- В Google Cloud Platform выберите свой проект.
- На боковой панели слева выберите APIs & auth . Убедитесь, что статус API игровых сервисов Google Play включен в отображаемом списке API.
- На боковой панели слева выберите Зарегистрированные приложения .
- Разверните раздел идентификатора клиента OAuth 2.0 и обратите внимание на отпечаток сертификата (SHA1).
Если этот отпечаток не совпадает с отпечатком вашего сертификата из предыдущих шагов, вы должны создать новый идентификатор клиента с правильным отпечатком сертификата. Вы должны создать новый идентификатор клиента в консоли Google Play, а не в Google Cloud Platform.
Убедитесь, что тестовые учетные записи включены
Прежде чем игра будет опубликована, учетная запись, которая создала игру в консоли Google Play, также должна быть включена в качестве тестировщика. Чтобы убедиться, что это правильно настроено:
- Откройте консоль Google Play и перейдите к своей игре.
- Откройте вкладку «Тестирование» .
- Убедитесь, что учетная запись, с которой вы пытаетесь войти, находится в списке тестировщиков.
Если учетной записи, с помощью которой вы пытаетесь войти, нет в списке, добавьте ее в список, подождите несколько минут и повторите попытку входа.
Проблемы с 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...
}
}