Ответ 1
Это может произойти, если вы не установили подпись для идентификатора клиента в проекте консоли API или не скопировали неправильное значение ключа из keytool. Это делается на этапах руководства быстрого запуска на шагах 7, 8, 9 и 10.
Я пытаюсь интегрировать Google plus Login в свое приложение в соответствии с инструкцией, приведенной по следующей ссылке: https://developers.google.com/+/quickstart/android#install-sdk
Я полностью соблюдаю все инструкции. И когда я запускаю образец приложения на реальном устройстве, представленном в android-sdk, и нажимаю кнопку signin
, он отображает сообщение Toast, что An internal error occurred
Что я делаю неправильно?
Это может произойти, если вы не установили подпись для идентификатора клиента в проекте консоли API или не скопировали неправильное значение ключа из keytool. Это делается на этапах руководства быстрого запуска на шагах 7, 8, 9 и 10.
У меня есть эта проблема и даже после создания 10 разных идентификаторов клиентов с разными SHA
и именем пакета, это не сработает... пока я не узнал, что вы должны заполнить Consent screen
.
Согласно консоли GoogleDevelopers -
Экран согласия будет отображаться для пользователей всякий раз, когда вы запрашиваете доступ к их личным данным, используя ваш идентификатор клиента.
Я решил проблему, удалив .setScopes("PLUS_LOGIN")
в PlusClient.Builder.
Я получил эту ошибку сообщения об ошибке в приложении для Android:
An internal error occurred
Резюме:
Предполагая, что вы допустили ошибку, настраивая переговоры между вашим приложением android и сервером API Android, предоставляющим вам доступ. Скорее всего, это связано с тем, что вы не добавляете правильное имя пакета или не корректируете отпечаток SHA1. Я выполнил следующие шаги, чтобы продуть неправильную конфигурацию и сделать все правильно.
Шаги для исправления:
Перейдите в консоль google api и выполните вход: https://code.google.com/apis/console
Нажмите вкладку "Доступ к API".
Нажмите кнопку "Создать другой идентификатор клиента".
Выберите: "Установленное приложение".
Выберите: переключатель "Android".
Введите имя пакета приложения для Android, отображающее указанную выше ошибку. Вы можете найти его в верхней части файла кода PlusSampleActivity.java
. Для меня это com.google.android.gms.samples.plus
Приобретите свое значение отпечатка SHA1:
а. Используйте команду keytool -list -v -keystore /home/el/.android/debug.keystore
. Введите пароль, если вы его никогда не устанавливали, пароль по умолчанию - "android".
б. Отпечаток SHA1 отображается на экране, скопируйте его.
Вставьте вышеуказанное значение в поле "Отпечаток пальца сертификата подписки (SHA1):".
Нажмите кнопку "Создать идентификатор клиента".
Запустите приложение для Android, нажмите "Войти".
Теперь вам будет представлена "Войти в Google+ SDK с Google".
В моем случае решение было фактически установить адрес электронной почты на экране согласия. Во-первых, я немного неохотно выбирал свой личный адрес, и по какой-то странной причине вы можете сохранить форму без этой части данных без ошибок. После проверки того, что предложили другие, как только я установил свой адрес электронной почты в этой форме, он начал работать.
Я искал, как исправить это в течение дня с полным исследованием без удачи, в конце концов мне удалось для решения этой проблемы с помощью следующего подхода.
Прежде чем я начну разрешать это (по крайней мере, как я работал у меня), я должен сказать, что все на документация правильная, и вам не нужно менять какие-либо строки кода или так. Это похоже на ошибку в облаке https://cloud.google.com/console
Сначала убедитесь, что вы получили правильный SHA1 и имя вашего проекта, как описано в документах https://developers.google.com/+/quickstart/android
Теперь эта ошибка, как я заметил (по крайней мере для меня), заключалась в том, что в моей облачной консоли проект, который я создал был давным-давно со старым интерфейсом, и несколько месяцев назад я перешел на новый GUI. Когда вы получите новый взгляд на облачную консоль, вы заметите, что новые проекты имеют автоматически сгенерированный id проекта например, atlantean-ares-331, а старые проекты получили длинное целочисленное значение как id проекта, которое не видно. Поэтому, если ваш проект был создан со старым графическим интерфейсом, и вы только что создали новый идентификатор клиента для OAuth для этого проекта, вы получите Toast "Внутренняя ошибка" при попытке войти в систему с Google.
Как исправить
Убедитесь, что ни один из ваших проектов не имеет одинакового имени пакета на
Идентификатор клиента OAuth с тем, который вы будете использовать в противном случае, вы получите Ошибка This client ID is globally unique and is already in use
(вам придется удалить старый идентификатор клиента OAuth с тем же именем пакета, которое вы будете использовать сейчас).
Перейдите в учетные данные. Создайте новый идентификатор клиента для OAuth.
Установленное приложение
Android
Введите название своего проекта и ваш SHA1
Готово
Мое решение проблемы было следующим.
Я сделал все, что рекомендовал, и не было опечаток относительно имени пакета и ключа SHA1. Я также попытался удалить ключ, а затем добавить его снова, но это не помогло.
Что помогло удалить ключ и создать новый проект (https://code.google.com/apis/console), а затем создать идентификатор клиента (с пакетом + sha1) снова там. После этого (5 секунд) все работало на моем устройстве Android.
Эта проблема связана с разрешениями с консоли api.
если вы используете разрешение, связанное с SCOPE_PLUS_LOGIN, в консоли api вы должны создать два ключа: один для идентификатора клиента OAuth и другие для открытого ключа api.
В моем случае проблема заключалась в том, что я изменил имя пакета приложения и не обновлялся в dev-консоли.
Для меня это было то, что я пытался использовать свой производственный ключ при его установке с помощью моего отладочного ключа. Убедитесь, что вы используете правильный SHA1 из правого хранилища ключей.
Я развернулся к Google IO 2013 и изменил инициализацию PlusClient, затем он работает.
public static final String AUTH_SCOPES[] = {
Scopes.PLUS_LOGIN,
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/developerssite" };
mPlusClient = new PlusClient.Builder(this, this, this)
.setScopes(AUTH_SCOPES)
.build();
Спасибо Thano за решение "Теперь эта ошибка, как я заметил (по крайней мере для меня), заключалась в том, что в моей облачной консоли проект, который я создал, был давно со старым интерфейсом, и несколько месяцев назад я перешел на новый GUI. Как только вы получите новый вид облачную консоль вы заметите, что в новых проектах есть автогенерированный идентификатор проекта, подобный этому atlantean-ares-331, тогда как старые проекты получили длинное целочисленное значение как идентификатор проекта, который не отображается. Поэтому, если ваш проект был создан со старым графическим интерфейсом, и у вас есть просто создал новый идентификатор клиента для OAuth для этого проекта, вы получите Toast" Внутренняя ошибка" при попытке войти в систему с Google.
Повторное создание проекта в Google Консоле работало для меня после нескольких других попыток:
По какой-либо причине у моего проекта не было идентификатора проекта (старая консоль/новая консоль?).
Как предложил Thano (выше), я создал совершенно новый проект, создал идентификаторы клиентов,... и затем работал. Спасибо за совет!
Не забудьте использовать встроенное хранилище отладки для тестирования. У меня было все, что работала правильно, но я установил свой производственный отпечаток SHA1 в хранилище в Credentials в Консоли разработчиков, что заставило его не работать.
Если вы сталкиваетесь с этой ошибкой при попытке запустить образец приложения или "скопируйте проект, который вы создали на другой машине, которая успешно работала в этом случае, и выдает такую всплывающую ошибку на другом компьютере, где вы пытаетесь для запуска вы можете следовать методу ниже, и это поможет.
Если вы создаете приложение для тестирования/отладки, тогда
1. Создайте новый SHA1, если вы скопируете проект и запустите его на другом компьютере для имени пакета и пути, предоставленного для хранилища ключей.
2.Измените ClientId в консоли разработчиков для нового сгенерированного SHA1 и запустите его на новом компьютере, где вы скопировали проект и попытались его запустить.
Что-то часто игнорируется - это имя пакета. Я хочу прояснить шаг 6 Эрика Лещински выше (не могу прокомментировать там): требуемый пакет не является пакетом действия, а скорее пакетом вашего манифеста приложения.
Вы можете получить правильное значение из корневого элемента AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ntk.darkmoor"
android:versionCode="1"
android:versionName="1.0" >
В этом примере определите "com.ntk.darkmoor" при создании идентификатора клиента
У меня была такая же проблема, когда я использовал SHA1 для debug.keystore для отладки, а затем экспортировал мое приложение, забыв создать SHA1 для хранилища ключей, которое я использовал для экспорта моего приложения.
Он работает для меня, когда я подключаю устройство и устанавливаю apk из Android Studio. Но теперь он работает для меня, когда я создаю .apk и устанавливаю его из dropbox.
Я просмотрел все предоставленные здесь ответы и другие. В моем случае проблема была также SHA-1. Причина, по которой я получил неправильный SHA-1, - это моя команда certtool export cert.
Раньше я использовал
C:\Users\mysuername\.android SHA 1 signature keytool -exportcert -alias androiddebugkey -keystore "keystorepath" -list -v
Проблема была в переменной androiddebugkey. Здесь вы должны указать имя ключа, который вы используете для подписания приложения.
C:\Users\mysuername\.android SHA 1 signature keytool -exportcert -alias mykeyname -keystore "keystorepath" -list -v
Надеюсь, это поможет кому-то!
Чтобы добавить к этому длинному списку причин, моя проблема заключалась в том, что я получил debugkey из файла jks, а не из приложения.
Его всегда что-то маленькое.