Сервисы Google Play - невозможно войти

Сразу после вчерашнего выступления Google I/O я обновил свой Android SDK, чтобы интегрировать игровые сервисы в одно из моих приложений.

Вещи, которые я сделал до сих пор:

  1. добавили и связали мое приложение в Dev Console (игровые сервисы)
  2. включил идентификатор клиента OAuth в мое приложение / манифест
  3. добавленной BaseGameActivity а также GameHelper в мой проект ( от GitHub)
  4. добавил библиотеку google-play-services в мой проект
  5. расширенный BaseGameActivity, добавил com.google.android.gms.common.SignInButton

Я также настроил метаданные игры и, конечно, некоторые достижения. Консоль разработчика заявляет, что она готова к выпуску. Чтобы проверить поток входа и достижения, я добавил две учетные записи Google+ в качестве тестовых пользователей.

Но когда я тестирую SignInButton, появляется предупреждение: неизвестная ошибка. Вот логкат:

ERROR/Volley: il.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/me
ERROR/SignInIntentService: Access Not Configured
ERROR/LoadSelfFragment: Unable to sign in - application does not have a registered client ID

Я построил свое приложение в производственном режиме - используя ProGuard и правильный сертификат.

Я что-то пропустил?

Обновление - еще несколько попыток

Вот краткий обзор того, что я пробовал за это время. Ничего не помогло

  • удалить и заново создать связанную запись приложения Android (дважды проверенный отпечаток сертификата)
  • отключить антипиратство
  • пропустить Proguard
  • создать новую (тестовую) игру и использовать ее идентификатор клиента

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

E/GameAgent: Unable to retrieve 1P application 547xxxxxx457 from network
E/CheckGameplayAcl: Unable to load metadata for game

Решение от Hartok!

Решение Хартока помогло мне решить эту проблему. Я никогда раньше не посещал Консоль API Google. Важно знать, что идентификатор клиента OAuth не удаляется, когда вы удаляете связанное приложение из вашей игры или даже удаляете игру (в консоли разработчика). Вы должны посетить консоль API и удалить ее вручную.

Автоматически выбранный отпечаток SHA1 (всегда) неверен! Вы должны искать свой собственный:

keytool -exportcert -alias <your-alias> -keystore <path-to-keystore> -list -v

Новый идентификатор клиента моего (правильно) связанного приложения выглядел как 89xxxxxxxx73-2u6mXXXXXXXXXXXXXXXXXXX8903.apps.goo..., а не просто 12 цифр, как раньше. Я наконец понял, что вы должны исключить тире и буквенно-цифровые данные и использовать только 12 цифр.

18 ответов

Решение

Я исправил эту проблему.

В моем случае, когда я связал свое приложение (еще не опубликованное) с моим проектом игровых сервисов Google Play, отпечаток сертификата, автоматически выбранный в Google Play, оказался не самым удачным.

Чтобы это исправить, я удалил свой идентификатор клиента приложения в консоли API Google, отменил связь с моим приложением, а затем заново связал его с соответствующим отпечатком сертификата. Этот отпечаток отображается при экспорте вашего приложения в Eclipse (если ваш плагин ADT обновлен).

Надеюсь, поможет.

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

До этого я пытался использовать только одно или только другое, и это не сработало ни для одного из них.

После долгих 2 недель, пытаясь решить эту проблему, я создал шаги для решения этой проблемы и решил поделиться ею со всеми, кто страдает от той же самой проблемы, без публикации игры. используется для тестирования. когда придет время публикации, я поделюсь шагами, использованными для публикации приложения, и убедимся, что оно работает с игровым сервисом Google play.

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

Ниже приведены пошаговые инструкции по использованию eclipse:

1-Импортируйте BaseGameUtils как библиотеку в рабочее пространство затмения, убедитесь, что после импорта не возникает ошибок. если произошла ошибка, сделайте следующее:

a - щелкните правой кнопкой мыши на проекте BaseGameUtil в проводнике проекта.

b-Click на пути сборки Java

c-Click, добавьте внешние jar оттуда, перейдите к местоположению вашего SDK и найдите Google-Play-services.jar

d-выберите его и нажмите ok ---> вы должны увидеть добавленный jar в окне JAR и папок классов.

Перейдите на вкладку "Заказ и экспорт", расположенную справа от библиотек, и убедитесь, что отмечены "Частные библиотеки Android" и "Зависимости Android", а также убедитесь, что выбран google-play-services.jar.

2. Теперь убедитесь, что вы правильно ссылаетесь на импортированную BaseGameUtility в приложении, которое вы хотите использовать: "Вы можете создать простое приложение hello world, чтобы проверить это", поэтому теперь мы будем ссылаться на BaseGameUtility в приложении hello world следующим образом:

(важно убедиться, что и hello world, и BaseGameUtil находятся на одном диске, два диска не будут работать)

щелкните правой кнопкой мыши приложение hello world в правой части окна проводника проекта.

b-клик по пути сборки Java

c-Click по библиотекам

d- добавить поддержку Android-v4, если необходимо, из внешнего или внутреннего источника (не требуется)

e- добавьте базовую игру.jard, нажав на кнопку добавить папку класса -> затем выберите BaseGameUtilProject --- Затем выберите папку / bin - Это должно импортировать ее в ваше приложение

f-добавить google-play-services.jar из внешнего источника также при необходимости

g-in "порядок и экспорт" гарантирует, что у вас выбраны следующие ---> "Частные библиотеки Android, зависимости Android, BasegameUtils.jar, GooglePlayGameServices.jar" вместе с обычными SRC и GEN, которые должны быть выбраны по умолчанию.

3- Теперь в вашем Java-файле helloworld.java убедитесь, что на вашем главном экране есть все необходимые импорты, а затем расширьте BaseGameUtil и убедитесь, что проект реализует ViewOnClickListener.

4- Отредактируйте свой манифест Android, включив в него следующее:

 <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />

а также

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

5. Убедитесь, что в вашем ресурсе есть файл ids.xml для включения идентификатора приложения после его создания.

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

Вы можете оставить это поле пустым, так как позже вам нужно будет поместить в него идентификатор приложения.

6-Скопируйте ключ отладки, который у вас есть в IDE eclipse, прежде чем добавить это приложение в консоль разработчика. в затмении это происходит следующим образом:

a-щелкните на Window b- выберите android c-Click build d- скопируйте отпечаток SHA1 и сохраните его для использования при создании приложения в консоли разработчика.

7- Создайте свою игру в консоли разработчиков и используйте SHA1, полученный с шага 6.

8- поместите идентификатор приложения в файл ids.xml, выделенный на шаге 5

9. Дважды проверьте ваши значения и убедитесь, что все имена пакетов указаны правильно между консолью разработчика и файлом манифеста.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
**package="com.helloword.check"**
android:versionCode="1"
android:versionName="1.0" >

10. Когда закончите, убедитесь, что приложение в консоли разработчика соответствует SHA1, назначенному в консоли разработчика с помощью инструмента keytool. Это шаг, который занял у меня 2 недели, чтобы выяснить,

Найдите приложение APK в папке bin вашего проекта hello world и скопируйте его в другое место, чтобы позже проверить его идентификатор с помощью ключевого инструмента.

b-найдите ваш keytool -> обычно расположенный в папке JAVA вашего компьютера, в моем случае это было в C: \ Program Files \ Java \ jdk1.7.0_09 \ jre \ bin

c- Извлеките ваш apk во временную папку

d- выполните следующую команду

keytool -printcert -file "TempLocation\Meta-INF\CERT.RSA"

Вы получите MD5 вместе с SHA1 и SHA256

Убедитесь, что SHA1 совпадает с таковым в консоли разработчика.

11- Вот как проверить свой SHA1 с консоли разработчика,

перейти к игровым сервисам

b- нажмите название игры в нашем случае helloWorld

c- Прокрутите вниз до "Консольный проект API"

d- Вы должны увидеть "эта игра связана с консольным проектом API под названием helloworld"

e-helloworld должен быть гиперссылкой, нажмите на нее,

е- это откроет консоль Google APis

g- в APconsole нажмите на API-доступ

h- прокрутите вниз до "Идентификаторы клиента для установленного приложения", вы увидите, что SHA1 гарантирует, что он такой же, как тот, который был сгенерирован из keytool ранее на шаге 10 . (если они не совпадают, вы должны удалить игру из консоли разработчиков и воссоздать ее с правильным SHA1). "Убедитесь, что вы не изменили SHA1 из консоли API Google, это вызовет проблемы.

I-Убедитесь, что имя пакета совпадает с именем пакета в вашем манифесте Android. Я имею в виду, что везде, где упоминается имя пакета, убедитесь, что оно совпадает с именем в "Идентификатор клиента для установленных приложений" (в моем случае оно не совпадало с тем, что в строка 4 моего манифеста)

И это все, что вы должны теперь иметь возможность проверить свой вход, используя игровой сервис Google Play

На шаге 3. Сгенерируйте идентификатор клиента OAuth 2.0, который, в частности, выдает следующее предупреждение:

Предупреждение. Не открывайте консоль API Google напрямую и вручную добавляйте свои идентификаторы клиентов на этой странице. Это может привести к ошибкам при отправке запросов в игровые сервисы.

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

Я много боролся с этой проблемой. Изменения в консоли API Google только нарушают идентификатор клиента OAuth - не трогайте его. Единственным решением для меня было создать новый игровой сервис и подключить подписанный apk с обычным (не отладочным) ключом - потому что, если вы добавите apk с любым ключом, если вы попытаетесь снова добавить его с другим ключом, он не будет работать. Удаление игры не будет работать, Google все равно запомнит название пакета. Вы можете попытаться изменить имя пакета apk (конечно, это не лучшая идея) и попробовать еще раз, но это не всегда работает.

Поэтому, как только у вас возникнет эта проблема, лучшим решением будет изменить имя пакета apk и создать новый игровой сервис - это наверняка всегда работает - и, пожалуйста, будьте осторожны с названием игрового сервиса - не делайте это с именем, которое вы использовали ранее - оно все испортит.

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

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

Прочитайте это для получения дополнительной информации:

https://developers.google.com/games/services/console/enabling

Примечание. Для Android вам не нужно указывать полный идентификатор клиента в приложении, так как он будет автоматически получен из идентификатора приложения.

У меня возникают похожие проблемы, и я вижу, что эта страница была обновлена ​​30 мая 2013 года:

https://developers.google.com/games/services/android/troubleshooting

Это может помочь некоторым из нас.

Благодаря тому, что Сачин Чаван окончательно решил ее, проблемы были:
1. Гугл плей взял не тот ша1.
2. Попытался добавить его из консоли разработчика Google - не сработало.
Посмотрев на пост и ссылку Сачина Чавана, я увидел, что вы можете связывать одно и то же приложение из консоли Google Play несколько раз, поэтому я взял псевдоним SHA1 с:

keytool -exportcert \
-alias <your-key-name> \
-keystore <path-to-production-keystore> \
-list -v

и отладка SHA1 с:

keytool -exportcert \
-alias androiddebugkey \
-keystore <path-to-debug-keystore> \
-list -v

Я связал приложение еще два раза, первый раз я ввел псевдоним SHA1, а второй раз - отладочный SHA1, после дня множества ошибок, которые его решили (этапы, выделенные жирным шрифтом).

Парень, вы правильно настроили свой аккаунт для тестирования?

См. https://developers.google.com/games/services/console/testpub.

Если ваша игра находится в неопубликованном состоянии, вы должны внести в белый список учетные записи пользователей, которым вы хотите предоставить доступ для тестирования. В противном случае ваши тестеры будут сталкиваться с ошибками OAuth и 404 при попытке доступа к конечным точкам игровых сервисов.

Это был пропущенный шаг для меня. После этого я больше не получал эти ошибки:

E / GameAgent: невозможно получить приложение 1P 547xxxxxx457 из сети
E/CheckGameplayAcl: невозможно загрузить метаданные для игры

Вот контрольный список:

  1. Сначала проверьте, не сделали ли вы глупую ошибку или несоответствия, описанные в https://developers.google.com/games/services/android/troubleshooting.
  2. Распространенная проблема - конфликтующий идентификатор ресурса app_id, например, если вы используете SDK Facebook, он может использовать ключ с тем же именем, поэтому дважды проверьте это и переименуйте другие, если вы обнаружите конфликты. (Я бы оставил 'app_id' выделенным для этого проекта, поскольку библиотека BaseGameUtils называет его 'app_id' в некотором исходном коде, который я проверял).

  3. Хотя документы ссылаются на "Консоль разработчика Google", не играйте умно и попробуйте добавить идентификаторы клиентов оттуда. Хотя, в конце концов, идентификаторы клиентов также будут там. Есть небольшая заметка, которую можно легко неправильно прочитать:

Вы должны создать новый идентификатор клиента в консоли разработчика Google Play, а не в консоли разработчика Google.

  1. Поэтому, основываясь на этой заметке, создавайте свои идентификаторы клиентов только из консоли разработчика Google Play, другими словами, добавляя связанное приложение. Таким образом, вы обычно создаете 2 связанных приложения: одно для использования "debug.keystore" (используя тот же пакет, но с разными отпечатками пальцев), а другое "связанное приложение" для "производственного" хранилища ключей, но с тем же пакетом, но с другим отпечатки пальцев.

Я думаю, что это охватывает все, большинство людей могут оказаться в ловушке, так как все выглядит хорошо в консоли разработчика Google, но на самом деле, они, вероятно, пропустили шаги 3 и 4 выше.

Подход Хартока помог мне, а также: "Возможно, вам придется удалить проекты из консоли Google API". этого звука достаточно, но это не так, по крайней мере, не для меня. Google имеет небольшую функцию "восстановить" в консоли API. Вы можете просто восстановить все, это означает, что они хранят ваши ключи SHA-1, но помечены как удаленные (?). Мне снова удалось использовать ключ отладки, который также был заблокирован, - это то, что я удалил все свои тестовые проекты и вручную удалил все ключи OAuth в опции "Доступ к API" из всех этих удаленных проектов, после чего я смог использовать свой ключ отладки. снова. Надеюсь, что это помогает кому-то...

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

Дополнительные сведения см. В разделе "Другие причины" при устранении неполадок. https://developers.google.com/games/services/android/troubleshooting устранение неполадок.

В моем случае я забыл изменить имя пакета в AndroidManifest.xml; это все. Я думаю, что это должно быть проверено в первую очередь.

Для меня работает отладочная подпись, нет подписи;/ Можем ли мы связаться с Google по этому поводу? Я потратил на это весь день;/ я получаю "нет связанного приложения, связанного с этим идентификатором клиента", но оба они находятся в Google Api в рамках правильного проекта.

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

Идентификатор версии! Мне пришлось изменить свой идентификатор версии на значение, большее, чем мой последний выпуск. Внезапно я мог войти!

Для меня я использовал Sample (Button Clicker) и маскировал его под одно из своих выпущенных приложений. Мне, вероятно, все еще приходилось делать все изменения в SHA1, так как казалось, что он выключен, но изменение, которое подсказало мне, было обновлением идентификатора версии до 3, поскольку пример начинается с 1, а мое реальное / опубликованное приложение было установлено на 2.

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

Пожалуйста, попробуйте это:

  1. Зарегистрируйте свое приложение в качестве тестирования (если оно еще не опубликовано) (на сайте разработчиков Google).
  2. Сделайте тестовый идентификатор пользователя и зарегистрируйте его там.
  3. Теперь напишите свой идентификатор SHA1 там.
  4. Запишите свой идентификатор разработчика, сгенерированный Google.
  5. Поместите его в подходящее место в вашем приложении.

Если вы уже сделали это, выполните этот самый важный шаг.

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

Все еще не работает для меня. Google полностью сбросил мои игровые сервисы Google Play и пошагово интегрировал их. Тем не менее сказал, что у меня нет зарегистрированного идентификатора клиента Google. Довольно неудачно, учитывая 3 года, чтобы сделать Google Play Games Services.

И последнее, учетная запись с @googlemail.com не распознается, вы не можете экспортировать идентификаторы достижений (вам нужно скопировать за HTML, когда у вас есть 40 достижений, это довольно сложно).

05-22 00:35:57.914: I/dqi(11166): исключение ввода-вывода (org.apache.http.NoHttpResponseException) при обработке запроса: целевой сервер не смог ответить 05-22 00:35:57.914: I/dqi(11166): повторная попытка запроса 05-22 00:35:58.135: E/Volley(11166): [506] il.a: код неожиданного ответа 403 для https://www.googleapis.com/games/v1/ Players/ Me 05-22 00:35:58.195: E/Volley(11166): [506] il.a: Неожиданный код ответа 403 для https://www.googleapis.com/games/v1/players/me 05-22 00:35:58.205: E/SignInIntentService(11166): доступ не настроен 05-22 00:35:58.205: E/SignInIntentService(11166): aol 05-22 00:35:58.205: E/SignInIntentService(11166): в ajy.a(SourceFile:108) 05-22 00:35:58.205: E/SignInIntentService(11166): в abm.a(SourceFile:213 05-22 00:35:58.205: E/SignInIntentService(11166): в abm.a(SourceFile:194) 05-22 00:35:58.205: E/SignInIntentService(11166): в aav.a(SourceFile:486) 05-22 00:35:58.205: E/SignInIntentService(11166): в aqu.a(SourceFile:221) 05-22 00:35:58.205: E/SignInIntentService(11166): на com.google.android.gms.games.service.GamesSignInIntentService.onHandleIntent(SourceFile:343) 05-22 00:35:58.205: E/SignInIntentService(11166): на android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 05-22 00:35:58.205: E/SignInIntentService(11166): на android.os.Handler.dispatchMessage(Handler.java:99) 05-22 00:35:58.205: E/SignInIntentService(11166): на android.os.Looper.loop(Looper.java:137) 05-22 00:35:58.205: E/SignInIntentService(11166): на android.os.HandlerThread.run(HandlerThread.java:60) 05-22 00:35:58.205: E/LoadSelfFragment(15328): невозможно войти - приложение не имеет зарегистрированного идентификатора клиента
Другие вопросы по тегам