Игровые сервисы Google Play-невозможно войти
сразу после вчерашнего Google I/O keynote я обновил свой Android SDK для интеграции игровых сервисов в одно из моих приложений.
вещи, которые я сделал до сих пор:
- добавлено и связано мое приложение в консоли разработчика (игровые сервисы)
- включил идентификатор клиента OAuth в мое приложение/манифест
- добавил
BaseGameActivity
иGameHelper
к моему проекту (из GitHub) - добавлена библиотека Google-play-services в мой проект
- продлен
BaseGameActivity
добавилcom.google.android.gms.common.SignInButton
Я также настроил метаданные игры и, конечно же, некоторые достижения. Консоль dev заявляет, что она готова к выпуску. Чтобы проверить поток входа и достижения, я добавил две учетные записи Google+ в качестве тестовых пользователей.
но когда я тестирую SignInButton, появляется предупреждение:неизвестная ошибка. Вот logcat:
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 и правильный сертификат.
Я что-то пропустил?
Update - еще несколько попыток
вот краткий обзор о том, что я пытался в то же время. Ничто не помогало.
- удалить и воссоздать связанную запись Android app (дважды проверенный сертификат отпечатков пальцев)
- отключить анти-пиратства
- пропустить помощью ProGuard
- создайте новую (тестовую) игру и используйте ее клиент id
проблема не связана с учетные записи для тестирования. Использование учетной записи, которая не включена для тестирования, приведет к другому сообщению об ошибке:
E/GameAgent: Unable to retrieve 1P application 547xxxxxx457 from network
E/CheckGameplayAcl: Unable to load metadata for game
решение от Hartok!
решение Хартока помогло мне решить эту проблему. Я никогда не посещал Консоль Google APIs раньше. Важно знать, что идентификатор клиента OAuth не удаляется при удалении связанного приложения из игры или даже удалите игру (в консоли Dev). Вы должны посетить консоль APIs и удалить ее вручную.
автоматически выбранный отпечаток пальца SHA1 (всегда) неправильный! Вы должны искать свой собственный:
keytool -exportcert -alias <your-alias> -keystore <path-to-keystore> -list -v
новый идентификатор клиента моего (правильно) связанного приложения выглядел как 89xxxxxxxx73-2u6mXXXXXXXXXXXXXXXXXXX8903.apps.goo...
, а не только 12 цифр, как раньше. Я, наконец, понял, что вы должны исключить тире и буквенно-цифровой материал и использовать только 12 цифр.
18 ответов
я исправил эту проблему.
в моем случае, когда я связал свое приложение (еще не Опубликовано) с моим проектом Google Play Game Services, автоматически выбранный Google Play отпечаток пальца сертификата не был хорошим.
чтобы исправить это, я удалил свой идентификатор клиента приложения на Консоль Google APIs, отсоединил мое приложение, а затем снова связал его с правильным отпечатком пальца сертификата. Этот отпечаток пальца отображается при экспорте вашего приложения в Eclipse (если ваш плагин ADT современный.)
надеюсь, что это помогает.
после долгих 2 недель, пытаясь исправить эту проблему, я создал шаги для меня, чтобы решить эту проблему, и решил поделиться ею со всеми, кто страдает от той же проблемы, это происходит без публикации игры . используется для тестирования. когда придет время публикации, я поделюсь шагами, используемыми для публикации приложения, и убедитесь, что оно работает с сервисом Google play game.
обратите внимание, что все, что я пытался сделать, это войти с помощью Google войти с кнопку никаких действий, что должно произойти после его подписания, также обратите внимание, что я использовал BaseGameUtils из примера Google play в качестве библиотеки, и моя IDE по выбору, чтобы все это сделать, была Eclipse.
Ниже приведены шаги один за другим с помощью eclipse:
1-импорт BaseGameUtils в качестве библиотеки в рабочем пространстве eclipse, убедитесь, что после импорта не возникает ошибок. если произошла ошибка, выполните следующие действия:
a - щелкните правой кнопкой мыши проект BaseGameUtil в обозревателе проектов
b-нажмите на Java build path
c-нажмите Добавить внешние банки оттуда перейдите к вашему местоположению SDK и найдите Google-Play-services.Джар
d-выберите его и нажмите ok - - - > вы должны увидеть банку, добавленную в окне JARs и Class folders.
e-перейдите на вкладку заказ и экспорт, справа от библиотек и убедитесь, что" частные библиотеки Android "и" зависимости Android " проверены также убедитесь, что Google-play-services.фляги выбранный.
2 - теперь убедитесь, что ссылки на импортированные BaseGameUtility правильно в приложение, которое вы хотите использовать ," вы можете создать простое приложение HelloWorld, чтобы проверить это " , поэтому сейчас мы будем ссылаться на BaseGameUtility в привет мирового приложения следующим образом:
(важно убедиться, что hello world и BaseGameUtil находятся на одном диске, два диска не будут работать)
a-щелкните правой кнопкой мыши на приложении hello world в правой части проекта исследователь!--5-->
b-нажмите на Java build path
c-нажмите на библиотеки
d-добавить поддержку android-v4 при необходимости из внешнего или внутреннего источника (не требуется)
e-добавить базовую игру utils .jard, нажав на add class folder --> затем выберите BaseGameUtilProject - - - затем выберите папку / bin-это должно импортировать его в приложение
f-добавить google-play-услуги.jar от внешнего источника также при необходимости
g-в "порядок и экспорт"убедитесь,что у вас есть следующие выбранные- - - >" частные библиотеки Android ,Android dependancies, 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 - убедитесь, что у вас есть идентификаторы.xml-файл в ресурсе для включения идентификатора приложения после его создания.
<string name="app_id"></string>
вы можете оставить его пустым, так как позже вам придется поместить в него идентификатор приложения
6-скопируйте ключ отладки, который у вас есть в Eclipse IDE, прежде чем добавлять это приложение в консоль разработчика. это происходит в eclipse следующим образом:
a-нажмите на окно b-выберите android c-нажмите на строить D-скопируйте отпечаток SHA1 и сохраните его для использования при создании приложения в консоли разработчиков.
7 - создайте свою игру в консоли разработчиков и используйте SHA1, полученный из шага 6.
8-поместите идентификатор приложения в идентификаторы.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 недели, чтобы понять
a-найдите свое приложение APK из папки bin вашего проекта hello world и скопируйте его в другое место, чтобы проверить его идентификатор с помощью ключевого инструмента позже
b-найдите свой keytool -- > обычно расположенный под Java-папка вашего компьютера, в моем случае она была под C:\Program файлы\Java\jdk1.7.0_09\jre\bin
c-извлеките apk в месте temp
d-выполните следующую команду
keytool-printcert-файл " TempLocation\Meta-INF\CERT.RSA"
вы получите MD5 вместе с SHA1 и SHA256
убедитесь, что SHA1 соответствует один в разработчики консоли.
11-Вот как проверить ваш SHA1 от разработчиков консоль,
a-перейти к игровым сервисам
b-нажмите на название игры в нашем случае helloWorld
C-прокрутите вниз до "проект консоли API"
d-вы должны увидеть "эта игра связана с консольным проектом API под названием helloworld"
e-helloworld должен быть гиперссылкой нажмите на нее,
f-это откроет консоль Google APis
g-in APconsole нажмите на API Access
h-прокрутите вниз до "Идентификаторы клиента для установленного приложения", вы должны увидеть SHA1 убедитесь, что он такой же, как тот, который был создан из keytool ранее на шаге 10 . ( если они не совпадают, вам нужно удалить игру из консоли разработчиков и воссоздать ее с правильным SHA1 ) " убедитесь, что не измените SHA1 из консоли Google APIs, это вызовет проблемы.
Я-убедитесь, что имя пакета является тем же именем пакета в вашем манифесте android, под этим я подразумеваю, что везде упоминается имя пакета он соответствует тому, что в "идентификатор клиента для установленных приложений" (в моем случае он не соответствует тому, что в строке 4 моего манифеста)
и именно теперь вы должны иметь возможность проверить свой вход с помощью Google play game service
была та же проблема. Мое решение состояло в том, чтобы связать один и тот же пакет дважды в консоли разработчика, первый используя отпечаток SHA1 из моего собственного сертификата, а второй-мой ключ отладки SHA1.
Я пробовал использовать только один или только другой до этого, и это не сработало ни для того, ни для другого.
на Шаг 3. Создайте идентификатор клиента OAuth 2.0 он специально дает предупреждение следующим образом:
Предупреждение: Не открывайте консоль Google APIs напрямую и вручную добавьте идентификаторы клиентов на эту страницу. Это может привести к ошибкам при вы отправляете запросы в игровые сервисы.
Так что мой опыт был в том, что вам нужно следовать руководству религиозно: настройка игровых сервисов Google Play с помощью разработчика Google Play Консоль
Я много боролся с этой проблемой. Изменения в консоли Google APIs нарушают только идентификатор клиента OAuth - не трогайте его. Единственным решением для меня было создать новый игровой сервис и подключить подписанный apk с обычным (не отладочным) ключом - потому что как только вы добавите apk с любым ключом, если вы снова попытаетесь добавить его с другим ключом, он не будет работать. Удаление игры не будет работать, google все равно будет помнить имя пакета. Вы можете попробовать изменить имя пакета apk (конечно, это не лучшая идея) и повторить попытку но это не всегда получается.
поэтому, как только у вас будет эта проблема, лучшим решением будет изменить имя пакета apk и создать новый игровой сервис - это наверняка всегда работает - и, пожалуйста, будьте осторожны с именем игрового сервиса - не делайте это с именем, которое вы использовали ранее - это испортит все.
из нескольких проблем, которые у меня есть с этой услугой, самое смешное, что теперь у меня есть apk, связанный с игровым сервисом, но он не указан в нем, и я не могу добавить его из-за ошибка: этот идентификатор клиента глобально уникален и уже используется - Я думаю, что идентификатор клиента не является идентификатором OAuth - я не могу удалить его - такой опции нет - и, возможно, это корневая проблема того, что мы получили здесь.
убедитесь, что идентификатор, который вы вводите в метаданные, является вашим идентификатором приложения, а не идентификатором клиента. И вы не можете жестко закодировать его, так как это должна быть строка, вы должны указать его в своих ресурсах, а затем ссылаться на него в манифесте.
читать это для получения дополнительной информации:
https://developers.google.com/games/services/console/enabling#c_specify_client_id_settings
Примечание: Для Android, вам не нужно включать полный идентификатор клиента в ваш применение, так как оно будет выведено автоматически из идентификатор приложения.
Я испытываю аналогичные проблемы, и я вижу, что эта страница была обновлена 30 мая 2013 года:
https://developers.google.com/games/services/android/troubleshooting
Это может помочь некоторым из нас.
Гай, вы правильно настроили свою учетную запись для тестирования ?
см https://developers.google.com/games/services/console/testpub#enabling_accounts_for_testing
Если ваша игра в неопубликованном состоянии, вы должны белый список учетных записей пользователей, которым вы хотите предоставить доступ для тестирования. В противном случае ваши тестеры столкнутся с ошибками OAuth и 404 при попытке доступа к конечным точкам игровых сервисов.
Это был пропущенный шаг для меня. После этого я больше не получал этих ошибок:
E / GameAgent: не удалось получить приложение 1P 547xxxxxx457 из сети
E / CheckGameplayAcl: невозможно загрузить метаданные для игры
трюк, который сработал для меня, состоял в том, чтобы опубликовать конфигурацию игровых сервисов, так как у меня уже был APK, опубликованный для альфа-тестирования.
дополнительные сведения см. В разделе "Другие причины" в разделе устранение неполадок https://developers.google.com/games/services/android/troubleshooting
подход Хартока также помог мне, однако "вам может потребоваться удалить проекты из консоли Google api.- этого достаточно, но не для меня. Google имеет небольшую функцию "undelete" в консоли API. Вы можете просто восстановить все, это означает, что они хранят ваши ключи SHA-1, но помечены как удаленные(?). Что сработало для меня, чтобы снова использовать ключ отладки, который также был заблокирован, это то, что я восстановил все свои тестовые проекты и вручную удалил все ключи OAuth внутри "Доступ к API" из всех этих проектов, после чего я смогу снова использовать мой ключ отладки. Надеюсь, это кому-то поможет...
вот список:
- сначала проверьте, не сделали ли вы какую-либо глупую ошибку или несоответствия, описанные на https://developers.google.com/games/services/android/troubleshooting
общей проблемой является конфликтующий идентификатор ресурса "app_id", например, если вы используете Facebook SDK, он может использовать ключ с тем же именем, поэтому дважды проверьте это и переименуйте другие, если вы найдете конфликты. (Я бы сохранил "app_id" выделено для этого проекта, так как библиотека BaseGameUtils ссылается на него как"app_id в исходном коде, я проверил).
хотя документы ссылаются на'Консоль Разработчиков Google ' не играйте умно и попробуйте добавить идентификатор клиента оттуда. Хотя, в конце концов, идентификатор клиента также будет там. Есть небольшая заметка, которую можно легко неправильно истолковать:
необходимо создать новый идентификатор клиента в Разработчик Google Play Консоль, не Консоль Разработчиков Google.
- поэтому на основе этой заметки создайте свои идентификаторы клиента только из Консоль Разработчика Google Play, другими словами, путем "добавления связанного приложения". Таким образом, вы обычно создаете 2 связанных приложения для использования " debug.keystore "(используя тот же пакет, но с разными отпечатками пальцев) и другое "связанное приложение" для "производственного" хранилища ключей, но с использованием тот же пакет, но с разными отпечатками пальцев.
Я думаю, что это охватывает все, большинство людей могут оказаться в ловушке, так как все выглядит хорошо в Консоль Разработчика Google, но на самом деле, они наверное пропустил шаги 3 и 4 выше.
благодаря Сачин Чаван, наконец, решил его, проблемы были:
1. Google play взял неправильный sha1.
2. Пытался добавить его с консоли разработчика Google-не получилось.
Посмотрев на сообщение и ссылку Sachin Chavan, я увидел, что вы можете связать одно и то же приложение с Google Play Console несколько раз, поэтому Я взял псевдоним 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 и во второй раз debug SHA1, после дня много ошибок, которые решили его (этапы жирным шрифтом).
все еще не работает на меня. Google сделал полный сброс моих игровых сервисов Google Play и сделал шаг за шагом интеграцию. Все еще сказал, что у меня нет зарегистрированного идентификатора клиента google. Довольно неудача, учитывая 3 лет, чтобы сделать Google Play Games Services.
последнее, аккаунт с @googlemail.com не распознаются, вы не можете экспортировать идентификаторы достижений (вам нужно скопировать мимо html, когда у вас есть 40 достижений, это довольно больно).
05-22 00: 35: 57.914: I/dqi(11166): исключение ввода-вывода (org.апаш.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): at ajy.a (исходный файл: 108) 05-22 00:35: 58.205: E/SignInIntentService(11166): at abm.a (исходный файл: 213 05-22 00:35: 58.205: E/SignInIntentService(11166): at abm.a (исходный файл: 194) 05-22 00:35: 58.205: E/SignInIntentService(11166): at aav.a (исходный файл: 486) 05-22 00: 35: 58.205: E / SignInIntentService (11166): at Аку.a (исходный файл: 221) 05-22 00:35: 58.205: E/SignInIntentService(11166): at com.гуглить.андроид.СБМ.игры.услуга.GamesSignInIntentService.onHandleIntent(исходный файл: 343) 05-22 00:35: 58.205: E/SignInIntentService(11166): at android.приложение.IntentService$ServiceHandler.handleMessage (IntentService.Ява:65) 05-22 00:35: 58.205: E/SignInIntentService(11166): at android.ОС.Обработчик.dispatchMessage(обработчика.java: 99) 05-22 00: 35: 58.205: E / SignInIntentService (11166): at андроид.ОС.Петлитель.петля (Looper.java: 137) 05-22 00:35: 58.205: E/SignInIntentService(11166): at android.ОС.HandlerThread.запустить(HandlerThread.java: 60) 05-22 00: 35: 58.205: E / LoadSelfFragment (15328): невозможно войти-приложение не имеет зарегистрированного идентификатора клиента
в моем случае я забыл изменить имя пакета в AndroidManifest.xml-вот и все. Я думаю, это нужно сначала проверить.
пожалуйста, попробуйте это:
- зарегистрируйте приложение в качестве тестирования (если оно еще не опубликовано) (на сайте разработчика Google).
- сделайте некоторый идентификатор пользователя тестирования и зарегистрируйте их там.
- теперь напишите свой идентификатор SHA1 там.
- запишите свой идентификатор разработчика, созданный Google.
- поместите его в соответствующее место в своем приложении.
Если вы уже это делаете, выполните этот самый важный шаг.
6 - сейчас экспортируйте приложение с тем же хранилищем ключей и теперь установите его на свое устройство (в котором вы вошли как Tester id, зарегистрированный в Google).
Теперь вы наверняка получите доступ к серверу Google real time без каких-либо ошибок.
номер версии! Мне пришлось изменить идентификатор версии на значение, большее, чем мой последний выпуск. Внезапно я смог войти в систему!
для меня я использовал образец (кликер кнопок) и маскировал его как одно из моих выпущенных приложений. Я, вероятно, все еще должен был сделать все изменения SHA1, так как он, казалось, был выключен, но изменение, которое подсказало в мою пользу, обновило идентификатор версии до 3, так как образец начинается с 1, а мое реальное/опубликованное приложение было установлено на 2.
для меня debug signing работает, не подписан; / можем ли мы связаться с google об этом ? Я потратил на это весь день; / я получаю "нет связанного приложения, связанного с этим идентификатором клиента", но оба они находятся в Google Api под правильным проектом.
также у меня случайно есть два связанных и опубликованных приложения, указывающих на один и тот же app_ID в консоли разработчика, оба опубликованы и не могут быть удалены.
пожалуйста, проверьте подключение к интернету, когда приложение работает. Если вы не подключены, это сообщение об ошибке регистрируется.