Ошибка 12501 аутентификация с помощью входа в google
Я использую службы входа google для аутентификации пользователей, которые используют мое приложение. Я получил его для работы, когда я только что запросил информацию по электронной почте.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail().build();
Затем я понял, что мне также нужно запросить маркер ID, чтобы иметь возможность аутентифицироваться с моим бэкэндом, поэтому я сделал:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(String.valueOf(R.string.server_client_id))
.requestEmail().build();
Проблема заключается в том, что он не позволил мне войти в систему после изменений. Статус, который я получаю каждый раз при попытке входа в систему, - Status{statusCode=unknown status code: 12501, resolution=null}
.
Я искал вокруг, и я нашел этот пост, что в значительной степени касается того же самого. Тем не менее, я не делал ошибок, названных людьми, которые отвечали, идентификатор клиента OAuth в моей консоли разработчика предназначен для веб-приложения:
И R.string.server_client_id
- это первый идентификатор клиента на картинке. имена пакетов, конечно, правильны во всех размещенных, иначе он даже не будет работать без запроса маркера. 2 человека также предложили, чтобы приложение было подписано для этого, но документация в googles говорит, что отладочный ключ тоже должен работать, и не имеет смысла заставить людей подписывать приложения для отладки.
Я пытался понять это часами, но безуспешно. В чем может быть проблема? Пожалуйста, не стесняйтесь запрашивать дополнительную информацию, которую я, возможно, забыл поставить здесь.
Ответы
Ответ 1
Ну, это очень неловко, но я понял это:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id))
.requestEmail().build();
Я отправлял ему идентификатор ресурса вместо разыменованного строкового ресурса.
Ответ 2
Очевидно, сначала проверьте правильность вашего ключа sha1 для выпуска. Но если он все еще не работает, и вы используете сервисы google play 8.4.0 (i.e.compile 'com.google.android.gms: play-services: 8.4.0'), проблема может быть решена путем изменения объекта GoogleSignInOption.
Вместо:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
.build();
Вы должны использовать:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.PLUS_LOGIN))
.requestScopes(new Scope(Scopes.PLUS_ME))
.requestEmail()
.build();
Это решает ошибку, возвращающую statusCode = INTERNAL_ERROR ИЛИ statusCode = Ошибка 12501 ИЛИ statusCode = Ошибка 12500.
Затем этот объект gso можно использовать для создания GoogleApiClient, как показано ниже:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
// .addApi(Plus.API, null)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
// .addScope(Plus.SCOPE_PLUS_LOGIN)
.build();
Подробнее см. ниже: Google не работает над версией андроида версии
Ответ 3
В моем проекте у меня было другое приложение в моем файле gradle, чем в packagename в моем manifest.xml, и это стало причиной моей проблемы.
Ключ андроида, который я должен был создать, должен был иметь applicationId fqdn и НЕ имя пакета (вопреки тому, что говорит Google), чтобы он работал у меня.
Думал, что оставлю это здесь, если это сэкономит время кому-то.
Ответ 4
1.Сохранить подпись в файле gradle
signingConfigs {
config {
keyAlias 'appalias'
keyPassword 'hunter123'
storePassword 'hunter123'
storeFile file('path/to/keystore.jks')
}
}
2.Go для создания типов в структуре проекта (в Android Studio) и укажите, что signedConfigs для "config"
Теперь очистить ваш проект и создать его снова. Он должен работать.
Если вышеуказанное не работает, то ниже - последнее.
Попробуйте выполнить первый шаг и выполните сборку и проверку. Если он не работает, перейдите к следующему шагу и попытайтесь построить снова.
- Создайте подписанный apk (с подтверждением пароля).
- Перед подписанием проверьте имя файла хранилища ключей и тот, который вы дадите во время подписания apk (в студии android).
- Установите подписанный apk на свое устройство.
- Подождите пять минут.
- Попробуйте петь в google. Если все еще наступит 12501, подождите еще пять минут. Выполняя эту комбинацию gradle.
- Повторите попытку. Он должен работать.
Изменить: Google добавили подписку apk в консоли. Если вы уже подписали свой apk, игнорируйте его ИЛИ если вы хотите использовать его, будьте осторожны с ним, потому что он может нарушить ваши текущие настройки входа в Google
Ответ 5
У меня была эта проблема, когда я случайно использовал идентификатор клиента приложения Android вместо Webapp в качестве параметра requestIdToken()
.
Здесь следует использовать идентификатор клиента Webapp. По умолчанию он называется Web client (auto created by Google Service)
Ответ 6
Вы уже настроили signingConfigs
и buildTypes
в своем Gradle? Я исправил его, явно указав те вещи на gradle. Читайте здесь http://developer.android.com/tools/publishing/app-signing.html
Ответ 7
Убедитесь, что вы добавили отпечаток SHA-1 для своего ключа (выпуска) под Firebase console
Найдите свой ключ SHA1: keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
Добавьте его в консоль firebase: перейдите в https://console.firebase.google.com, выберите свое приложение, выберите настройки.
![введите описание изображения здесь]()
Ответ 8
У меня была та же проблема. Проблема заключалась в том, что я как-то выбрал неправильный "Проект API" и поэтому выбрал неправильный ключ веб-клиента. Очевидно, что было два идентификатора клиента сервера OAuth2, созданные в обоих моих проектах API, в то время как мои попытки запустить демонстрационное приложение.
![вид конфигурации]()
Ответ 9
У меня возникла аналогичная проблема. В моем случае это произошло потому, что идентификатор клиента сервера, который я использовал, был из другого проекта, кроме клиентских. Оказывается, они должны быть из того же проекта.
Ответ 10
Привет, я видел выше комментарии, но, как я сделал практически, его все проблемы sha, означает, что если вы зарегистрируете sha определенного ip-адреса и получите google.services json, это улучшит либо вы можете использовать
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
или gso = новый GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(LoginActivity.this.getResources(). GetString (R.string.server_client_id)) .requestEmail() построить().
но если вы хотите создать приложение на другом ip-адресе с другим машинным sha, вы увидите код состояния ошибки 12501, поэтому для этого вам нужно снова создать sha для этой конкретной машины.
Спасибо
Ответ 11
<meta-data>
из Androidmanifest.xml находится вне оболочки <application></application>
. Вот почему вы получаете ошибку 12501
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="@string/app_id" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
Ответ 12
Я не знаю, насколько актуален этот вопрос в 2019 году. Однако код ошибки 12501 означает:
Вход был отменен пользователем. т.е. пользователь отменил некоторые из входов в резолюции, например, выбор учетной записи или согласие OAuth.
Проверьте следующую ссылку для получения дополнительной информации:
https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInStatusCodes.html#SIGN_IN_CANCELLED