Я пытаюсь интегрировать 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'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 из Gradle SigningReport
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
android
google-signin
Аарон
источник
источник
Ответы:
Просто обновите свои сервисы Google Play до последней версии (или 11720000 в данном случае). Если вы используете AVD, образы Nexus 5 и 5X поддерживают Google Play. После того, как эмулятор будет запущен, перейдите в меню расширенных элементов управления> Google Play, затем обновите.
источник
Ошибка PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)
источник
Проверьте, добавлены ли отпечатки SHA-1 в настройки проекта firebase. Если нет, найдите отпечаток SHA-1, используя
https://developers.google.com/android/guides/client-auth
Также найдите SHA-1 отпечаток ключа разблокировки, используя
Убрать
<keystore path>
с пути хранилища ключей.Затем добавьте оба отпечатка SHA-1 в настройки проектов firebase.
NB: не забудьте заменить google-services.json обновленным google-services.json с новыми отпечатками пальцев. Я потерял на этом два дня.
Во время отладки
Android studio автоматически генерирует
~/.android/debug.keystore
при первой сборке отладки и использует ее для подписи приложения.Чтобы запустить SHA-1 (пароль
android
) ( док ):Это
SHA-1
следует добавить в настройки приложения на,firebase
чтобы разрешить использование возможностей входа в Google при тестировании отладочной сборки.источник
для ошибки 12500 вам нужно добавить поддержку gmail только в настройках firebase, а для ошибки 10 добавить отпечаток ssh в консоли firebase, как вы видите на картинке
источник
Электронная почта поддержки, а также все ссылки на проекты и конфиденциальность необходимы для работы Google SignIn, в противном случае выдается 12500.
Установите его на https://console.developers.google.com/apis/credentials внизу второй вкладки с названием «Экран согласия OAuth» - там вы найдете три ссылки, которые необходимо настроить.
Это нигде не упоминается в руководствах Firebase.
источник
Попробуйте обновить экран согласия OAuth на https://console.developers.google.com/apis/credentials.
источник
На какое-то время я застрял в этом.
Убедитесь, что этот шаг выполнен -
источник
Кажется, ваш SHA1 перезаписан магазином Google Play. Проверьте свой магазин Google Play, панель запуска, в разделе подписи приложений, посмотрите, добавлен ли в Google Play дополнительный SHA1.
И скопируйте этот SHA1, добавьте в нужное место, и все будет.
источник
Если еще есть кто-то с подобной проблемой, если вы добавляете настраиваемые области, убедитесь, что это допустимая область. В моем случае я смешал области видимости Facebook с областями действия Google, и мне потребовалось время, чтобы понять это!
источник
Я использую аутентификацию Firebase. Мой SHA-1 был указан правильно, идентификатор клиента также был правильным, но я все равно получал 12500.
Оказалось, что моя проблема заключалась в том, что я не указал адрес электронной почты службы поддержки в настройках своего проекта. (Настройки -> вкладка Общие -> раздел Ваш проект (Публичные настройки)).
источник
Я думаю, что ошибка возникла из-за неправильного SHA1. Пожалуйста, не забывайте, что SHA1 различается между режимами выпуска и отладки в студии Android. Вместо использования keytool для получения SHA1 вы можете использовать Gradle project -> Task -> android -> signedReport в студии android (можно открыть его в меню View -> Toolwindow -> gradle), чтобы получить релиз и отладить SHA1. После этого для упрощения работы вам необходимо создать 2 отдельных учетных данных с двумя SHA1 в облачной консоли Google (Google просто проинструктирует создать 1 с использованием релиза SHA1, при разработке он не будет работать, поскольку он использует отладочный SHA1).
источник
Перейдите в свой проект в консоли Firebase, откройте настройки проекта и добавьте туда свои отпечатки сертификата SHA. Загрузите обновленный файл google-services.json и добавьте его в папку приложения Projects.
Это сработало для меня.
источник
Сначала убедитесь, что вы зарегистрировали свое приложение в консоли разработчиков Google.
Убедитесь, что в приложении Firebase есть ключи
debug
иrelease
. Если эта ошибка появляется в производстве, добавьте своеSHA-1 release key
базовое приложение для запуска. Если он появится в разработке, добавьте свойSHA-1 debug key
.Получение ключа отладки / выпуска:
Обязательно загрузите обновление
google-services.json
в свое приложение.источник
Для меня проблема заключалась в использовании «Release» ClientID с моим настроенным для отладки приложением. Убедитесь, что у вас есть ключи выпуска и отладки, используя каждый SHA-1 соответственно.
источник
Если вы пришли сюда из-за флаттера : это один из крайних случаев, который мы должны исправить в соответствии с документацией здесь: https://pub.dev/packages/google_sign_in
источник
Когда ваше приложение аутентифицируется на внутреннем сервере или получает доступ к API Google с вашего внутреннего сервера, вы должны передать идентификатор клиента OAuth 2.0, который был создан для вашего сервера, в метод requestIdToken при создании объекта GoogleSignInOptions для доступа к базовой информации профиля пользователя. . Кроме того, не забудьте отправить электронное письмо службы поддержки на экране согласия OAuth на странице учетных данных в консоли API.
источник
В моем случае эта ошибка возникла из-за того, что аутентификация Android была удалена старшей командой, поскольку, похоже, нет необходимости в ключах Android для аутентификации на бэкэнд. Таким образом, для входа в Google необходимы ключи как Android, так и веб-клиента.
источник
Также может случиться, что компилятор Cordova не может найти нужный файл хранилища ключей.
Решение: Перед выполнением
ionic cordova build android
укажите свойства подписиШаг 1 Создайте файл хранилища ключей отладки
Выполнить команду
Используйте пароль:
android
Шаг 2. Скопируйте файл хранилища ключей (
debug.keystore
) из~/.android
вplatform/android
директории текущего проектаШаг 3. Создайте файл с именем release-signing.properties в
platform/android
каталогеШаг 4: Добавьте содержимое в файл
Шаг 5: Теперь соберите
ionic cordova build android
источник
У меня возникла такая же проблема после открытия моего проекта на другом компьютере (другой Android Studio). В моем случае я решил это с помощью Firebase Assistant, который изначально использовал для настройки Firebase. Открыл Firebase Assistant (Инструменты> Firebase) и выбрал Аутентификацию> Подключиться. Это повторно подключило проект к Firebase и обновило конфигурации.
источник
Я застрял в проблеме входа в Google с 2 недель, наконец, хорошо разобрался. Позвольте мне объяснить причину. Проблема была связана с firebase. В firebase они упомянули поле «электронная почта поддержки» как необязательное. Но как только я добавил его (любой из ваших личных писем), проблема решена, и я получил ответ. Если вы получаете сообщение об ошибке как 12501, то это связано с настройками вашей учетной записи Google.
источник
На какое-то время я застрял в этом.
Убедитесь, что этот шаг выполнен -
источник
В моем случае это из-за неправильного идентификатора клиента Google. Я меняю свой ключ на ключ, указанный в
google-services.json
(подoauth_client
объектом)источник
Убедитесь, что вы правильно настроили следующее:
strings.xml
,google-services.json
илиcredentials.json
файл.источник
https://developers.google.com/identity/sign-in/android/sign-in следуйте этой документации по API, но имейте в виду, что внутри WEB_CLIENT_ID используйте значение идентификатора клиента, которое создается внутри файла google-services.json.
источник
В моем случае, после добавления отпечатка пальца в консоль Firebase, он автоматически принимался консолью разработчика Google и отображал отпечатки пальцев. Но войти не получилось. Посмотрев на каждый шаг, я понял, что Google отменил мой пакет файла манифеста вот так
com.xxxxxxxx.app
. Но на самом деле этоapp.xxxxxxxx.com
в консоли разработчика Google. Поэтому я удалил автоматически созданный отпечаток пальца и добавил отпечаток пальца с правильным именем пакета. БУМ !!. Это сработало.источник
Ошибка появилась, когда опция Google не была включена, как показано на изображении .
Произошло это, когда я сменил аккаунт Google и забыл включить опцию подключения к Google.
источник
Убедитесь, что ваш проект не должен содержать никаких специальных символов, включая числовые или любые другие символы (название проекта должно быть простым, как com.google.testproject)
источник
В моем случае я работал над непроизводственным приложением, проблема заключалась в том, что при создании проекта в консоли firebase возникали проблемы с синхронизацией ключей SHA-1 между консолями разработчиков Firebase и Google. Итак, я решил сначала создать проект в консоли Google Developer, а затем выбрать его при создании нового проекта в консоли Firebase.
Я также сделал для этого учебник , который может вам помочь.
источник
В моем случае проблема заключалась в том, что в моем эмуляторе не было Play Store. Я создал эмулятор (названный API 23) через Visual Studio, потому что я также разрабатываю с использованием Xamarin.Forms, а в диспетчере устройств Android Visual Studio вы можете выбрать, должен ли ваш эмулятор иметь Google Play Store.
Пришлось создать эмулятор через AVD Android Studio и убедиться, что в нем есть Play Store:
источник
Попробуйте такие варианты:
Он запрашивает пароль и просто введите пароль. Вы можете увидеть отпечатки SHA1, MD5.
источник