43

Я использую google sign-in services для аутентификации пользователей, использующих мое приложение. Я получил его на работу, когда я запросил информацию по электронной почтеОшибка 12501 аутентификация с помощью входа google

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
        .requestEmail().build(); 

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

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}.

Я искал вокруг и нашел this post, что в значительной степени о том же. Тем не менее, я не делал ошибок, названных людьми, которые отвечали, идентификатор клиента OAuth в моей консоли для консоли - для веб-приложения: clientIDs И R.string.server_client_id - это первый идентификатор клиента на картинке. имена пакетов, конечно, правильны во всех размещенных, иначе он даже не будет работать без запроса маркера. 2 человека также предложили, чтобы приложение было подписано для этого, но документация в googles говорит, что отладочный ключ тоже должен работать, и нет смысла заставить людей подписывать приложения для отладки.

Я пытался понять это в течение нескольких часов, но безуспешно. В чем может быть проблема? Пожалуйста, не стесняйтесь запрашивать дополнительную информацию, которую я, возможно, забыл поставить здесь.

+0

Это больно! я столкнулся с ужасной проблемой после загрузки его в магазин! –

+0

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

+0

yea thats wat я сделал! Плохая документация .. –

ответ

17

Ну, это очень неудобно, но я понял это:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
        .requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id)) 
        .requestEmail().build(); 

я отправлял ему идентификатор ресурса вместо разыменованного строки ресурса.

+1

Какова ценность R.string.server_client_id? Откуда вы это взяли? – JoseF

+0

Вы получаете его с консоли разработчика. Следуйте руководству googles, они объясняют, как его получить. – jammaster

+1

Я не нахожу этот учебник? Вы можете отправить мне ссылку? – JoseF

3

В моем проекте у меня было другое приложение в моем файле gradle, кроме packagename в моем manifest.xml, и это стало причиной моей проблемы.

Ключ андроида мне нужно было создать, чтобы иметь applicationId fqdn и НЕ имя пакета (вопреки тому, что говорит Google), чтобы он работал для меня.

Думал, что оставлю это здесь, если это сэкономит время кому-то.

1

Вы уже создали свои signingConfigs и buildTypes в своей люльке? Я исправил это, явно указывая эти вещи на градле. Читайте здесь http://developer.android.com/tools/publishing/app-signing.html

+0

На этот вопрос был дан ответ несколько месяцев назад. – jammaster

+4

@jammaster я знаю, и я попробовал то же самое, что и в вашем проекте Android, и это не сработало для меня. Ну, в случае, если у других пользователей будет такая же проблема со мной, я хотел бы поделиться этим решением здесь. Просто говорю. :) –

0

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

9

Очевидно, что в первую очередь проверьте правильность выбранной версии ключа 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. Тогда этот ГСО объект может быть использован для создания 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 signin not working on release version of android

+0

В моем случае я переключился на новый (другой) компьютер, а затем эта проблема началась. У меня было так много других вещей, на мой взгляд, из-за того, что я получил еще один ноутбук и работал на работу, что я никогда не думал о том, что SHA-1 отличается. Я использую Firebase auth, поэтому я скопировал свой SHA-1 и обновил его конец, а затем сгенерировал новый json-файл, чтобы зайти в мое приложение. Исправлено. Благодаря silwalprabin для упоминания SHA. – Tequilaman

2

1.Specify signingConfigs в вашем Gradle файле

signingConfigs { 
     config { 
      keyAlias 'appalias' 
      keyPassword 'hunter123' 
      storePassword 'hunter123' 
      storeFile file('path/to/keystore.jks') 
     } 
} 

2.Go для создания типов в структуре проекта (в Android Studio) и укажите значение подписи для «config»

очистить ваш проект и построить снова. Он должен работать.

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

  1. Создайте подписанный apk (с подтверждением пароля).
  2. Перед подписанием проверьте имя файла хранилища ключей и тот, который вы дадите во время подписания apk (в студии android).
  3. Установите подписанный apk на свое устройство.
  4. Подождите пять минут.
  5. Попробуйте петь в google. Если все еще наступит 12501, подождите еще пять минут. Выполняя эту градиентную синхронизацию.
  6. Попробуйте еще раз. Он должен работать.

Редактировать: Google добавили подписку apk в консоли. Если вы уже подписали свой apk, игнорируйте его ИЛИ если вы хотите использовать его, будьте осторожны с ним, потому что он может нарушить ваши текущие настройки входа в Google.

+1

Ваш шаг 1 работал на меня. Я тестировал через андроид-debugged.apk после прочтения ответа на первый созданный подписанный apk, затем установил его и проверил логин google, он работает. –

+0

У Google signin есть много проблем при использовании студии Android. Если вы измените имя файла своего хранилища ключей, то измените его на прежнее, ваше идеальное приложение не позволит вам использовать подпись Google со следующей сборкой. –

2

У меня была эта проблема, когда я случайно использовал идентификатор клиента приложения для Android, а не Webapp как параметр requestIdToken().

Вы должны использовать идентификатор клиента Webapp. По умолчанию это называется Web client (auto created by Google Service)

0

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

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 

или ГСО = новые GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken (LoginActivity.this.getResources(). GetString (R.string.server_client_id)) .requestEmail(). построить(); , но если вы хотите создать приложение на другом ip-адресе с другим машинным шагом, вы увидите код состояния ошибки 12501, поэтому для этого вам нужно снова создать sha для этой конкретной машины. Благодаря

1

Убедитесь вы добавили Отпечаток SHA-1 для вашего (релиз) ключа подписи к Firebase console

Find your SHA1 key: keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>

Добавить его в firebase консоли: перейти на https://console.firebase.google.com, выберите ваше приложение, выберите настройки.

enter image description here

1

У меня была такая же проблема. Проблема заключалась в том, что я как-то выбрал неправильный «Проект API» и поэтому выбрал неправильный ключ веб-клиента. Очевидно, было два идентификатора клиента сервера OAuth2, созданные в обоих моих проектах API, в то время как мои попытки запустить демонстрационное приложение.

configuration view

Смежные вопросы