Ошибка входа в Google 12500
Я пытаюсь интегрировать Google Sign In в свое приложение. У меня нет внутреннего сервера, я просто передаю данные о своей учетной записи Google в свое приложение.
Сначала я попробовал это с помощью Google Sign In Example, но я получил ошибку (без изменений кода, за исключением печати стека трассировки ниже). Я просто использовал пример 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's 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.
Я следовал за полным руководством, но, видимо, оно не работает.
Я скопировал SHA1 из подписи gradleReport
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
что может быть возможной причиной этого?
Спасибо
PS Может ли это быть возможной причиной?
Google Play services out of date. Requires 11720000 but found 10932470
40 ответов
Просто обновите свои Сервисы Google Play до последней версии (или 11720000 в этом случае). Если вы используете AVD, изображения Nexus 5 и 5X поддерживают Google Play. После запуска эмулятора перейдите в меню "Расширенные элементы управления"> "Google Play" и обновите его.
Ошибка PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, ноль)
Эту ошибку 12500 можно устранить, добавив адрес электронной почты поддержки в ваш проект в настройках проекта. Открыть ссылку https://console.firebase.google.com/
Выберите свой проект и откройте вкладку настроек.
Укажите действующий адрес электронной почты службы поддержки и перезапустите приложение.
Проверьте, добавлены ли отпечатки 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 новыми отпечатками пальцев. Я потерял два дня на этом.
Электронная почта поддержки, а также все ссылки на проекты и конфиденциальность необходимы для работы Google SignIn, в противном случае выдается 12500.
Установите его на https://console.developers.google.com/apis/credentials внизу второй вкладки с названием "Экран согласия OAuth" - там вы найдете три ссылки, которые необходимо настроить.
Это нигде не упоминается в руководствах Firebase.
Попробуйте обновить экран согласия OAuth на https://console.developers.google.com/apis/credentials
Я застрял на некоторое время.
Убедитесь, что эти шаги выполнены
- Правильный ключ SHA сохранен на консоли Firebase.
- Загрузите последнюю версию google-service.json
- И последнее и самое важное - сохранить OAuth-согласие под учетными данными в google api, OAuth Screen. Чтобы понять это, потребовалось много времени. И после этого все заработало нормально.
Кажется, ваш SHA1 перезаписан Google Play Store. Проверьте в своем магазине Google Play, панели запуска, под подписью приложения, посмотрите, есть ли в Google Play добавленный дополнительный SHA1.
И скопируйте, что SHA1, добавьте к вашему соответствующему месту, сделает работу.
1️⃣ Включите метод входа в GOOGLE.
2️⃣ Откройте настройки проекта.
3️⃣ Предоставьте электронную почту для поддержки.
PS. Vel_daN: Любите то, что делаете.
В моем случае проблема заключалась в том, что в моем эмуляторе не было Play Store. Я создал эмулятор (названный API 23) через Visual Studio, потому что я также разрабатываю с использованием Xamarin.Forms, а в диспетчере устройств Android Visual Studio вы можете выбрать, должен ли ваш эмулятор иметь Google Play Store.
Пришлось создать эмулятор через AVD Android Studio и убедиться, что в нем есть Play Store:
Если есть еще кто-то с подобной проблемой, если вы добавляете пользовательские области, убедитесь, что это допустимая область. В моем случае я смешал области Facebook и Google, и мне потребовалось время, чтобы понять это!
Я использую Аутентификацию Firebase. Мой SHA-1 был указан правильно, идентификатор клиента также был верным, но я все еще получал 12500.
Оказалось, что моя проблема заключалась в том, что я не указал адрес электронной почты службы поддержки в настройках своего проекта. (Настройки -> вкладка Общие -> раздел Ваш проект (Общие настройки)).
Я думаю, что ошибка произошла от неправильного SHA1. Пожалуйста, не забывайте, что SHA1 отличается между выпуском и режимом отладки в андроид студии. Вместо того, чтобы использовать keytool для получения SHA1, вы можете использовать проект Gradle -> Task -> android -> signatureReport в студии android (можете открыть его с помощью меню View -> Toolwindow -> gradle), чтобы получить релиз и отладку SHA1. После этого для простоты работы вам нужно создать 2 отдельных учетных данных с двумя SHA1 на облачной консоли Google (Google просто дает указание создать 1 с помощью выпуска SHA1, когда мы разрабатываем его, он не будет работать, поскольку он использует отладочный SHA1).
В моем случае эта ошибка возникла из-за того, что аутентификация Android была удалена старшей командой, поскольку, похоже, нет необходимости в ключах Android для аутентификации на бэкэнд. Таким образом, для входа в Google необходимы ключи как Android, так и веб-клиента.
Перейдите к своему проекту в консоли Firebase, откройте "Настройки проекта" и добавьте туда отпечатки своих сертификатов SHA. Загрузите обновленный файл google-services.json и добавьте его в папку приложения Projects.
Это сработало для меня.
Сначала убедитесь, что вы зарегистрировали свое приложение в консоли разработчиков Google.
Убедитесь, что у вас есть оба debug
а также release
ключи в вашем приложении Firebase. Если эта ошибка появляется в производстве, добавьте SHA-1 release key
запустить базовое приложение. Если он появится в разработке, добавьте SHA-1 debug key
,
Получение ключа отладки / выпуска:
keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]
Обязательно загрузите обновленное google-services.json
в ваше приложение.
Если вы пришли сюда из-за флаттера: это один из крайних случаев, который мы должны исправить в соответствии с документацией здесь: https://pub.dev/packages/google_sign_in
- Перейти к API и сервисам Google
- Выберите приложение, в котором вы хотите реализовать вход в Google.
- Затем нажмите Включить APIS и службы.
- Затем найдите API Google Peoples
- Откройте карточку API Google People и нажмите "Включить", ваше приложение может избавиться от проблемы.
Я перепробовал все ответы и все еще получал
12500
. Оказалось, что решение для меня было еще проще - мой проект настроен на
internal
и я пытался войти в систему с помощью электронной почты за пределами моей компании. Итак, если ни один из предыдущих ответов вам не подходит, проверьте, есть ли у вас
User Type
установите внутренний или внешний, и если вы попытаетесь войти в систему с приемлемой учетной записью.
Для меня проблема заключалась в использовании ClientID 'release' с моим настроенным на отладку приложением. Убедитесь, что у вас есть ключи выпуска и отладки, использующие каждый SHA-1 соответственно.
После того, как я попробовал все решения выше, и ничего не получилось. Я обнаружил, что запрашиваю область действия, которая не указана в облаке. это мой код
final GoogleSignIn googleSignIn = new GoogleSignIn(
scopes: [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/openid',
'https://www.googleapis.com/auth/youtube.force-ssl'
]);
После того, как я удалил все области, это сработало.
Вкладку Scopes можно найти здесь: https://console.cloud.google.com/apis/credentials/consent/edit .
Когда ваше приложение проходит проверку подлинности с помощью внутреннего сервера или обращается к API Google с вашего внутреннего сервера, вы должны передать идентификатор клиента OAuth 2.0, созданный для вашего сервера, методу requestIdToken при создании объекта GoogleSignInOptions для доступа к основной информации профиля пользователя. а затем не забудьте отправить электронное письмо в службу поддержки на экране согласия OAuth, который находится на странице учетных данных в консоли API.
Я застрял в проблеме входа в Google с 2 недель, наконец, разобрал ее хорошо. Позвольте мне объяснить причину. Проблема была связана с firebase. В firebase они упомянули поле "электронная почта поддержки" как необязательное. Но как только я добавил его (любой из ваших личных писем), проблема решена, и я получил ответ. Если вы получаете сообщение об ошибке как 12501, то это связано с настройками вашей учетной записи Google.
У меня возникла та же проблема после открытия проекта на другом компьютере (в другой Android Studio). В моем случае я решил это с помощью Firebase Assistant, который я использовал для первоначальной настройки Firebase. Откройте Firebase Assistant (Инструменты> Firebase) и выберите Аутентификация> Подключиться. Это переподключило проект к Firebase и обновило конфиги
На какое-то время я застрял в этом.
Убедитесь, что этот шаг выполнен -
Correct SHA key is saved on Firebase Console.
Valid reversed client id.
from fcm console=>select app=>from authentication=>enable google sign-in method
Я столкнулся с аналогичной проблемой, обновление электронной почты поддержки и форма экрана согласия OAuth не работали, однако добавление сертификата ключа подписи приложения Google Play Store в консоль Firebase работало:
- Скопируйте ключ подписи приложения из консоли Google Play (Настройка -> Целостность приложения -> Подписание приложения)
Обратите внимание, что эти ключи были сгенерированы случайным образом и не являются ключами моего проекта.
- Добавьте ключи в консоль Firebase.
Я знаю, что это кажется глупым, но у меня была эта ошибка в моем эмуляторе, и проблема была решена, когда я загрузил эмулятор, на котором был установлен Google Play API.
Также может случиться, что компилятор cordova не сможет найти нужный файл хранилища ключей.
Решение: перед выполнением ionic cordova build android
указать свойства подписи
Шаг 1: сгенерируйте файл хранилища ключей отладки
Выполнить команду
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
Используйте пароль: android
Шаг 2: Скопируйте файл хранилища ключей (debug.keystore
) от ~/.android
в platform/android
каталог вашего текущего проекта
Шаг 3: Создайте файл с именем release-signing.properties в platform/android
каталог
Шаг 4: Добавьте содержимое в файл
storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=android
keyPassword=android
Примечание. Это значения по умолчанию. Если вы указали свой псевдоним и пароль, используйте их соответственно.
Шаг 5: Теперь соберите ionic cordova build android
Если у вас есть готовый SHA-1 в настройках проекта Firebase, вы можете протестировать свое приложение, используя физическое устройство вместо использования эмулятора.
Ошибка появилась у меня, когда опция Google не была включена, как показано на рисунке.
Это произошло, когда я сменил аккаунт Google и забыл включить опцию подключения к Google.