Подтвердить что ты не робот

Ошибка 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 в моей консоли разработчика предназначен для веб-приложения: clientIDs И R.string.server_client_id - это первый идентификатор клиента на картинке. имена пакетов, конечно, правильны во всех размещенных, иначе он даже не будет работать без запроса маркера. 2 человека также предложили, чтобы приложение было подписано для этого, но документация в googles говорит, что отладочный ключ тоже должен работать, и не имеет смысла заставить людей подписывать приложения для отладки.

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

4b9b3361

Ответ 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)

Ответ 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