Службы Google Play Game - невозможно войти в систему

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

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

  • добавлено и связано мое приложение в Dev Console (игровые службы).
  • включил идентификатор клиента OAuth в мое приложение/манифест
  • добавил BaseGameActivity и GameHelper к моему проекту (из GitHub)
  • добавлена ​​библиотека google-play-services в мой проект
  • extended 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 и правильный сертификат.

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

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

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

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

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

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

Решение от Hartok!

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

d-выберите его и нажмите ok --- > вы увидите банку, добавленную в окне JARs и папок классов.

e-Перейдите на вкладку "Заказ" и "Экспорт" в правой части библиотек и убедитесь, что "Android private libraries" и "Android Dependencies" отмечены флажком. Также убедитесь, что выбран google-play-services.jar.

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

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

a-right нажмите на приложение hello world в правой части в проводнике проекта

b-клик по пути построения Java

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

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

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

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

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

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

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

 <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-скопируйте отладочный ключ, который у вас есть на вашей Eclipse IDE, прежде чем добавлять это приложение в консоль разработчика. это происходит в eclipse, происходит следующим образом:

a-click по окну b-select 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 недели, чтобы понять

a- найдите приложение 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 с консоли разработчика,

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

b- щелкните имя игры в нашем случае helloWorld

c- Прокрутите вниз до "API Console Project"

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

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

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

g- в APconsole щелкните по API Access

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

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

И вот вам теперь вы сможете протестировать свой знак, используя сервис игровой игры google

Ответ 3

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

Я пробовал использовать только один или другой другой до этого, и он тоже не работал.

Ответ 4

В Шаг 3. Создайте идентификатор клиента OAuth 2.0 он дает следующее предупреждение:

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Ответ 8

Парень, вы правильно настроили свою учетную запись для тестирования?

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

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

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

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

Ответ 9

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

Подробнее см. в параграфе "Другие причины" при поиске и устранении неисправностей https://developers.google.com/games/services/android/troubleshooting

Ответ 10

Подход Hartok мне тоже помогал, однако "Возможно, вам придется удалить проекты с консоли google api". этого звука достаточно, но это не так, по крайней мере, не для меня. У Google мало возможностей "восстановить" в консоли API. Вы можете просто восстановить все, это означает, что они хранят ваши ключи SHA-1, но помечены как удаленные (?). То, что работало для меня снова использовать ключ отладки, который также был заблокирован, заключается в том, что я восстановил все свои тестовые проекты и вручную удалил все ключи OAuth в опции "API Access" из всех этих удаленных проектов, после чего я мог использовать свой отладочный ключ еще раз. Надеюсь, что кто-то поможет...

Ответ 11

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

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

  • Хотя документы относятся к Google Developers Console), не играйте в смарт и не пытайтесь добавить идентификатор клиента. Хотя, в конце концов, идентификатор клиента также будет там. Там небольшая заметка, которую можно легко прочесть:

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

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

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

Ответ 12

Благодаря Sachin Chavan, наконец, решил, что проблемы были:
1. Игра Google приняла неверный 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, а второй раз отлаживал SHA1, после многих ошибок, которые его решили (этапы выделены полужирным шрифтом).

Ответ 13

Все еще не работает для меня. Google выполнил полный reset моих Служб Google Play Game и сделал шаг за шагом интеграцию. Еще сказал, что у меня нет зарегистрированного идентификатора клиента Google. Довольно неудача, учитывая 3 года, чтобы сделать сервисы Google Play Games.

Последнее, учетная запись с @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): at ajy.a(SourceFile: 108) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at abm.a(SourceFile: 213 05-22 00: 35: 58.205: E/SignInIntentService (11166): at abm.a(SourceFile: 194) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at aav.a(SourceFile: 486) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at aqu.a(SourceFile: 221) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at com.google.android.gms.games.service.GamesSignInIntentService.onHandleIntent(SourceFile: 343) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at android.app.IntentService $ServiceHandler.handleMessage(IntentService.java:65) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at android.os.Handler.dispatchMessage(Handler.java:99) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at android.os.Looper.loop(Looper.java:137) 05-22 00: 35: 58.205: E/SignInIntentService (11166): at android.os.HandlerThread.run(HandlerThread.java:60) 05-22 00: 35: 58.205: E/LoadSelfFragment (15328): Невозможно войти в систему - приложение не имеет зарегистрированного идентификатора клиента

Ответ 14

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

Ответ 15

Пожалуйста, попробуйте следующее:

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

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

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

Ответ 16

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

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

Ответ 17

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

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

Ответ 18

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