Ошибка входа в систему 12500

Я пытаюсь интегрировать Google Sign In в свое приложение. У меня нет серверного сервера, я просто получаю информацию о зарегистрированном аккаунте Google в своем приложении.

Сначала я попробовал его, используя Пример входа в Google, но у меня возникла ошибка (никаких изменений кода не было, кроме печати стека). Я просто использовал пример SignInActivity, поскольку у меня нет серверного сервера.

 Exception com.google.android.gms.common.api.ApiException: 12500: 
 at com.google.android.gms.common.internal.zzb.zzz(Unknown Source)
 at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
 at com.ewise.android.api.MainActivity.onActivityResult(SignInActivity.java:89)     at android.app.Activity.dispatchActivityResult(Activity.java:7010)
 at android.app.ActivityThread.deliverResults(ActivityThread.java:4187)
 at android.app.ActivityThread.handleSendResult(ActivityThread.java:4234)
 at android.app.ActivityThread.-wrap20(ActivityThread.java)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6316)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

код

 public class SignInActivity extends AppCompatActivity implements
         View.OnClickListener {

     private static final String TAG = "SignInActivity";
     private static final int RC_SIGN_IN = 9001;

     private GoogleSignInClient mGoogleSignInClient;
     private TextView mStatusTextView;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         // Views
         mStatusTextView = findViewById(R.id.status);

         // Button listeners
         findViewById(R.id.sign_in_button).setOnClickListener(this);
         findViewById(R.id.sign_out_button).setOnClickListener(this);
         findViewById(R.id.disconnect_button).setOnClickListener(this);

         // [START configure_signin]
         // Configure sign-in to request the user ID, email address, and basic
         // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
         GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                 .requestEmail()
                 .build();
         // [END configure_signin]

         // [START build_client]
         // Build a GoogleSignInClient with the options specified by gso.
         mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
         // [END build_client]

         // [START customize_button]
         // Set the dimensions of the sign-in button.
         SignInButton signInButton = findViewById(R.id.sign_in_button);
         signInButton.setSize(SignInButton.SIZE_STANDARD);
         signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
         // [END customize_button]
     }

     @Override
     public void onStart() {
         super.onStart();

         // [START on_start_sign_in]
         // Check for existing Google Sign In account, if the user is already signed in
         // the GoogleSignInAccount will be non-null.
         GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
         updateUI(account);
         // [END on_start_sign_in]
     }

     // [START onActivityResult]
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);

         // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
         if (requestCode == RC_SIGN_IN) {
             // The Task returned from this call is always completed, no need to attach
             // a listener.
             Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
             handleSignInResult(task);
         }
     }
     // [END onActivityResult]

     // [START handleSignInResult]
     private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
         try {
             GoogleSignInAccount account = completedTask.getResult(ApiException.class);

             // Signed in successfully, show authenticated UI.
             updateUI(account);
         } catch (ApiException e) {
             // The ApiException status code indicates the detailed failure reason.
             // Please refer to the GoogleSignInStatusCodes class reference for more information.
             Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
             e.printStackTrace();
             updateUI(null);
         }
     }
     // [END handleSignInResult]

     // [START signIn]
     private void signIn() {
         Intent signInIntent = mGoogleSignInClient.getSignInIntent();
         startActivityForResult(signInIntent, RC_SIGN_IN);
     }
     // [END signIn]

     // [START signOut]
     private void signOut() {
         mGoogleSignInClient.signOut()
                 .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> task) {
                         // [START_EXCLUDE]
                         updateUI(null);
                         // [END_EXCLUDE]
                     }
                 });
     }
     // [END signOut]

     // [START revokeAccess]
     private void revokeAccess() {
         mGoogleSignInClient.revokeAccess()
                 .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> task) {
                         // [START_EXCLUDE]
                         updateUI(null);
                         // [END_EXCLUDE]
                     }
                 });
     }
     // [END revokeAccess]

     private void updateUI(@Nullable GoogleSignInAccount account) {
         if (account != null) {
             mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));

             findViewById(R.id.sign_in_button).setVisibility(View.GONE);
             findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
         } else {
             mStatusTextView.setText(R.string.signed_out);

             findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
             findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
         }
     }

     @Override
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.sign_in_button:
                 signIn();
                 break;
             case R.id.sign_out_button:
                 signOut();
                 break;
             case R.id.disconnect_button:
                 revokeAccess();
                 break;
         }
     }
  }

Из того, что я прочитал, проблема может быть вызвана SHA1 Generation.

Я выполнил полный руководство, но, по-видимому, он не работает.

Я скопировал SHA1 из gradle signedReport

Variant: debug
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047

что может быть причиной этого?

Спасибо

P.S. Может ли это быть возможной причиной?

Google Play services out of date.  Requires 11720000 but found 10932470

Ответ 1

Просто обновите свои Службы Google Play до последней версии (или 11720000 в этом случае). Если вы используете AVD, изображения Nexus 5 и 5X поддерживают Google Play. После запуска эмулятора перейдите в меню расширенных элементов управления > Google Play, затем обновите.

Ответ 2

Ошибка PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, ноль)

Эту ошибку 12500 можно устранить, добавив адрес электронной почты поддержки в ваш проект в настройках проекта. Открыть ссылку https://console.firebase.google.com/

Выберите свой проект и откройте вкладку настроек.

Укажите действующий адрес электронной почты службы поддержки и перезапустите приложение.

enter image description here

Ответ 3

Проверьте, добавлены ли отпечатки SHA-1 в настройки проекта Firebase. Если нет, найдите отпечаток SHA-1, используя

https://developers.google.com/android/guides/client-auth

Также найдите отпечаток ключа разблокировки SHA-1, используя

keytool -list -v -keystore <keystore path>

Удалите <keystore path> вместе с путем хранилища ключей.

Затем добавьте оба отпечатка SHA-1 в настройки проектов Firebase.

NB. Не забудьте заменить google-services.json обновленным google-services.json новыми отпечатками пальцев. Я потерял два дня на этом.

Пока отлаживать

Студия Android автоматически генерирует ~/.android/debug.keystore при первой сборке отладки и использует его для подписи приложения.

Чтобы запустить SHA-1 (пароль android) (doc):

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

Этот SHA-1 следует добавить в настройки приложения на firebase чтобы разрешить использование возможностей входа в Google при тестировании отладочной сборки.

Ответ 4

для ошибки 12500 Необходимо добавить поддержку gmail только в настройках firebase, а для ошибки 10 добавить ssh-отпечаток в консоли firebase, как показано на рисунке

Ответ 5

Для работы Google SignIn необходима поддержка по электронной почте, а также все ссылки на проекты и конфиденциальность, в противном случае выдается 12500.

Установите его на https://console.developers.google.com/apis/credentials

Это не упоминается где-либо в руководствах по Firebase.

Ответ 7

Я застрял на некоторое время.

Убедитесь, что эти шаги performed-

  • Правильный ключ SHA сохранен на консоли Firebase.
  • Загрузите последнюю версию google-service.json
  • И последнее и самое важное - сохранить OAuth-согласие под учетными данными в google api, OAuth Screen. Чтобы понять это, потребовалось много времени. И после этого все заработало нормально.

Ответ 8

Кажется, ваш SHA1 перезаписан Google Play Store. Проверьте в своем магазине Google Play, панели запуска, под подписью приложения, посмотрите, есть ли в Google Play добавленный дополнительный SHA1.

И скопируйте, что SHA1, добавьте к вашему соответствующему месту, сделает работу.

Ответ 9

Я использую Аутентификацию Firebase. Мой SHA-1 был указан правильно, идентификатор клиента также был верным, но я все еще получал 12500.

Оказалось, что моя проблема заключалась в том, что я не указал адрес электронной почты службы поддержки в настройках своего проекта. (Настройки → вкладка Общие → раздел Ваш проект (Общие настройки)).

Ответ 10

Если есть еще кто-то с подобной проблемой, если вы добавляете пользовательские области, убедитесь, что это допустимая область. В моем случае я смешал области Facebook и Google, и мне потребовалось время, чтобы понять это!

Ответ 11

Перейдите к своему проекту в консоли Firebase, откройте "Настройки проекта" и добавьте туда отпечатки своих сертификатов SHA. Загрузите обновленный файл google-services.json и добавьте его в папку приложения Projects.

Это сработало для меня.

Firebase console Screenshot

Ответ 12

Сначала убедитесь, что вы зарегистрировали свое приложение в консоли разработчиков Google.

Убедитесь, что в вашем приложении Firebase есть ключи debug и release. Если эта ошибка появляется в производственной среде, добавьте свой SHA-1 release key в базовое приложение. Если он появится в разработке, добавьте свой SHA-1 debug key.

Where to add SHA-1 finger print

Получение ключа отладки/выпуска:

keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]

Загрузите обновленный google-services.json в свое приложение.

Ответ 13

Для меня проблема заключалась в использовании ClientID 'release' с моим настроенным на отладку приложением. Убедитесь, что у вас есть ключи выпуска и отладки, использующие каждый SHA-1 соответственно.

Ответ 14

Я думаю, что ошибка произошла от неправильного SHA1. Пожалуйста, не забывайте, что SHA1 отличается между выпуском и режимом отладки в андроид студии. Вместо того, чтобы использовать keytool для получения SHA1, вы можете использовать проект Gradle → Task → android → signatureReport в студии android (можете открыть его с помощью меню View → Toolwindow → gradle), чтобы получить релиз и отладку SHA1. После этого для простоты работы вам нужно создать 2 отдельных учетных данных с двумя SHA1 на облачной консоли Google (Google просто дает указание создать 1 с помощью выпуска SHA1, когда мы разрабатываем его, он не будет работать, поскольку он использует отладочный SHA1).

Ответ 15

Также может случиться, что компилятор cordova не сможет найти нужный файл хранилища ключей.



Решение: перед выполнением ionic cordova build android укажите свойства подписи

Шаг 1: сгенерируйте файл хранилища ключей отладки

Выполнить команду

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

Используйте пароль: android

Шаг 2: Скопируйте файл хранилища ключей (debug.keystore) из ~/.android в ~/.android platform/android вашего текущего проекта

Шаг 3: Создайте файл с именем release-signing.properties в каталоге platform/android

Шаг 4: Добавьте содержимое в файл

storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=android
keyPassword=android

Примечание. Это значения по умолчанию. Если вы указали свой псевдоним и пароль, используйте их соответственно.

Шаг 5: Теперь строим ionic cordova build android

Ответ 16

У меня возникла та же проблема после открытия проекта на другом компьютере (в другой Android Studio). В моем случае я решил это с помощью Firebase Assistant, который я использовал для первоначальной настройки Firebase. Откройте Firebase Assistant (Инструменты> Firebase) и выберите Аутентификация> Подключиться. Это переподключило проект к Firebase и обновило конфиги

Ответ 17

Когда ваше приложение проходит проверку подлинности на бэкэнд-сервере или получает доступ к API-интерфейсам Google с вашего бэкэнд-сервера, вы должны передать идентификатор клиента OAuth 2.0, созданный для вашего сервера, методу requestIdToken при создании объекта GoogleSignInOptions для доступа к базовой информации профиля пользователя. а затем не забудьте отправить электронное письмо в службу поддержки на экране согласия OAuth, который находится на странице учетных данных в консоли API.

Ответ 18

Я застрял в проблеме входа в Google с 2-х недель, наконец-то хорошо разобрался. Давайте мне объяснить причину. Проблема была связана с пожарной базой. В Firebase они упомянули поле "поддержка по электронной почте" как необязательное. Но как только я добавил его (любой из ваших личных писем), проблема была решена, и я получил ответ. Если вы получили ошибку 12501, то это связано с настройками в вашем аккаунте Google.

Ответ 19

Если вы пришли сюда из флаттера: это один из ключевых случаев, который мы должны исправить согласно документации здесь: https://pub.dev/packages/google_sign_in enter image description here

  • Перейти к API и сервисам Google
  • Выберите приложение, в которое вы хотите выполнить вход в Google.
  • Затем нажмите Включить APIS и Сервисы

enter image description here

  • Тогда ищите Google Peoples API

enter image description here

  • Откройте API-карту Google People и нажмите "Включить", ваше приложение может избавиться от этой проблемы.

Ответ 20

В моем случае это из-за неправильного идентификатора клиента Google. Я изменяю свой ключ на ключ, указанный в google-services.json (под объектом oauth_client)

Ответ 21

Убедитесь, что вы правильно настроили следующие вещи:

  1. Сгенерируйте идентификатор клиента в вашем проекте Google.
  2. Укажите правильный ключ SHA-1 для этого идентификатора клиента. (отладка/выпуск)
  3. Укажите правильное имя пакета для этого идентификатора клиента.
  4. Убедитесь, что вы сгенерировали идентификатор клиента в файле strings.xml, google-services.json или credentials.json.

Ответ 22

https://developers.google.com/identity/sign-in/android/sign-in следуйте этой документации API, но имейте в виду, что внутри WEB_CLIENT_ID используется значение идентификатора клиента, которое создается в файле google-services.json.

class MainActivity : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener {
private val TAG = "JSAGoogleSignIn"
private val REQUEST_CODE_SIGN_IN = 1234
private val WEB_CLIENT_ID = "354298333018-XXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
private var mAuth: FirebaseAuth? = null

private var mGoogleApiClient: GoogleApiClient? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var txt_register = findViewById<TextView>(R.id.txt_register)
    txt_register.setOnClickListener {
        var intent = Intent([email protected], RegisterActivity::class.java)
        finish()
        startActivity(intent)
    }
    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(WEB_CLIENT_ID)
            .requestEmail()
            .build()
    mGoogleApiClient = GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build()

    mAuth = FirebaseAuth.getInstance()
    sign_in_button.setOnClickListener {
        val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
        startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
    }

}


override fun onConnectionFailed(p0: ConnectionResult) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}


private fun updateUI(user: FirebaseUser?) {
    if (user != null) {
        Log.e("Email", "Value" + user.email)
    }

}

fun signIn() {

}

override fun onStart() {
    super.onStart()
    val currentUser = mAuth!!.currentUser
    updateUI(currentUser)
}

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == REQUEST_CODE_SIGN_IN) {
        val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
        if (result.isSuccess) {
            // successful -> authenticate with Firebase
            val account = result.signInAccount
            firebaseAuthWithGoogle(account!!)
        } else {
            // failed -> update UI
            updateUI(null)
            Toast.makeText(applicationContext, "SignIn: failed!" + result.status,
                    Toast.LENGTH_SHORT).show()
        }
    }
}

private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
    Log.e(TAG, "firebaseAuthWithGoogle():" + acct.id!!)

    val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
    mAuth!!.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success
                    Log.e(TAG, "signInWithCredential: Success!")
                    val user = mAuth!!.currentUser
                    updateUI(user)
                } else {
                    // Sign in fails
                    Log.w(TAG, "signInWithCredential: Failed!", task.exception)
                    Toast.makeText(applicationContext, "Authentication failed!",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }
}

Ответ 23

В моем случае, после добавления отпечатка пальца в консоль Firebase, он автоматически выбирается консолью разработчиков Google и показывает отпечатки пальцев. Но войти не получилось. Посмотрев каждый шаг, я понял, что Google отменил мой пакет файлов манифеста, как этот com.xxxxxxxx.app. Но это на самом деле app.xxxxxxxx.com, в консоли разработчика Google. Поэтому я удалил автоматически созданный отпечаток и добавил отпечаток с правильным именем пакета. БУМ !!. Это сработало.

Ответ 24

Ошибка появилась у меня, когда опция Google не была включена, как показано на рисунке.

Это произошло, когда я сменил аккаунт Google и забыл включить опцию подключения к Google.

Ответ 25

Последние 4 дня вход в Google не работает, я попробовал все решения в этом посте, но безрезультатно. PS: логин работал 1 неделю назад.

Ответ 26

Убедитесь, что ваш проект не должен содержать никаких специальных символов, включая числовые или любые другие символы (имя проекта должно быть простым, например, com.google.testproject).

Ответ 27

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

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

Ответ 28

Попробуйте следующие варианты:

keytool -list -v -keystore C:\Users\MG\Desktop\test.jks -alias test

Он запрашивает пароль и просто введите пароль. Вы можете увидеть отпечатки пальцев SHA1, MD5.

enter image description here

Ответ 29

Мое решение: (редактировать: 04 января /2019) enter image description here

enter image description here

enter image description here