PlatformException (PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null))

Строка, в которой произойдет сбой:

GoogleSignInAccount googleUser = await _googleSignIn.signIn();

Что я пробовал:

  1. Я сгенерировал свой ключ SH1 с помощью этой команды keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore
  2. Добавление шифрования SH1 в console.firebase.google.com
  3. Повторная загрузка google-service.json
  4. Копирование debug.keystore из .android в MyProject/android
  5. Запустить отладку и выпустить
  6. Добавляем в android/build.gradle эти строки:

    • classpath 'com.android.tools.build:gradle:3.2.1'
    • classpath 'com.google.gms: google-services: 4.2.0'
  7. Добавляем в android/app/build.gradle эти строки:

    • implementation 'com.google.firebase:firebase-core:16.0.9' under dependencies
    • примените плагин: 'com.google.gms.google-services' в конце файла.
  8. Creating a file named release-signing.properties under my project folder with those lines in it.
    • storeFile=debug.keystore
    • keyAlias ​​= androiddebugkey
    • storePassword = android
    • keyPassword = android

Кроме того, я искал в ВСЕХ вопросах StackOverflow, которые мне удалось найти, и ни один из них не оказался для меня полезным.

Мой pubspec.yaml:

firebase_core: ^0.4.0+1
firebase_analytics: ^3.0.1

cloud_firestore: ^0.11.0+2

firebase_auth: ^0.11.1
google_sign_in: ^4.0.1+3

rxdart: ^0.22.0

Класс аутентификации:

class AuthService {
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final Firestore _db = Firestore.instance;

  Observable<FirebaseUser> user;
  Observable<Map<String, dynamic>> profile;
  PublishSubject loading = PublishSubject();

  AuthService() {
    user = Observable(_auth.onAuthStateChanged);
    profile = user.switchMap((FirebaseUser user) {
      if (user != null) {
        return _db
            .collection('user')
            .document(user.uid)
            .snapshots()
            .map((snap) => snap.data);
      } else {
        return Observable.just({});
      }
    });
  }

  Future<FirebaseUser> googleSignIn() async {
    loading.add(true);
    GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    GoogleSignInAuthentication googleAuth = await googleUser.authentication;
    // FirebaseUser user = await _auth.signInWithGoogle(
        // accessToken: googleAuth.accessToken, idToken: googleAuth.idToken);
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    FirebaseUser user = await _auth.signInWithCredential(credential);
    updateUserData(user);
    print("Sign in" + user.displayName);

    loading.add(false);

    return user;
  }
}

Основной класс:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  AuthService authService = AuthService();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blueGrey,
      ),
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              MaterialButton(
                child: Text("Log in with Google"),
                color: Colors.blueGrey,
                textColor: Colors.deepOrange,
                onPressed: () => authService.googleSignIn(),
              ),
              MaterialButton(
                child: Text("LogOut"),
                color: Colors.redAccent,
                textColor: Colors.purple,
                onPressed: () => authService.signOut(),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Если бы кто-нибудь из вас мог указать мне правильное направление, я был бы очень благодарен.

Вот несколько ссылок на stackoverflow, которые я уже пробовал:

  1. Вход в Google не работает после выпуска приложения flutter
  2. Плагин Flutter и google_sign_in: PlatformException (sign_in_failed, com .google.android.gms.common.api.ApiException: 10:, null)
  3. Ошибка входа в Google 12500

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


person Mircea    schedule 17.05.2019    source источник
comment
Когда именно вы столкнетесь с этой ошибкой?   -  person ThinkDigital    schedule 17.05.2019
comment
После того, как я нажму кнопку «Войти с помощью Google», я открою всплывающее окно, в котором мне нужно выбрать свою учетную запись Google. Я получу эту ошибку сразу после того, как нажму на свою учетную запись Google.   -  person Mircea    schedule 17.05.2019
comment
Я добавил к вопросу строку, где произойдет сбой.   -  person Mircea    schedule 17.05.2019
comment
Вы проверили logcat для получения более подробного сообщения об ошибке? Поскольку это исключение платформы, он не работает на стороне платформы, поэтому иногда вы можете найти сообщения об ошибках в журналах Android или iOS, которые вы не найдете в флаттере.   -  person ThinkDigital    schedule 17.05.2019


Ответы (9)


OP, @Mircea, конкретно упомянул ошибку 12500. Вот как я преодолел эту ошибку:

Я провел последние несколько дней, сталкиваясь с той же проблемой. Я реорганизовывал свой код десятки раз, добавлял точки останова, сбрасывал SHA-1, SHA-256 и делал практически все другие решения на основе «кода», которые я мог найти. Постоянно сталкивался с ошибкой:

E/flutter (11935): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null)

Я терял рассудок, поэтому решил начать с чистого листа и еще раз медленно перейти к решениям. Я заметил неясное сообщение, спрятанное глубоко в ветке, в котором что-то упоминалось о наличии электронной почты поддержки. Только когда я добавил упомянутое электронное письмо поддержки, все «волшебным образом» начало работать. Ниже я прикрепил снимок экрана с настройками Firebase для моего проекта.

введите описание изображения здесь

person MiggityMac    schedule 29.05.2019
comment
Спасибо, чувак, я пробовал все остальное, но это действительно решило мою проблему, - person Shahzad Akram; 07.06.2019
comment
Большое вам спасибо, что вы спасли меня. Сообщения об ошибках должны быть более конкретными. Ваше здоровье - person Kareem JO; 16.06.2019
comment
@Miggity - Ты спас мне жизнь. Спасибо большое, дорогой :) - person Kamlesh; 27.11.2020
comment
У меня тоже сработало !. Большое спасибо, дружище! - person S_i_l_e_n_t C_o_d_e_r; 22.12.2020

Вам необходимо заполнить «Экран согласия Oauth».

Я перешел на эту страницу (https://console.developers.google.com/apis/credentials) Не забудьте выбрать свой проект в списке (вверху слева). Затем перейдите на «Экран согласия Oauth»

Я заполнил логотип приложения, ссылку на домашнюю страницу приложения и ссылку на политику конфиденциальности приложения (с помощью project.firebaseapp.com) и сохранил.

введите описание изображения здесь

Теперь все работает, я могу войти в систему.

Это должно быть объяснено в документации. Люди будут сумасшедшими и не будут волноваться из-за такого отсутствия документации.

person Xero    schedule 11.07.2019
comment
Я добавил логотип, как вы предложили, и он чудесным образом сработал. Немного смешно, но, по крайней мере, теперь все разобрано! - person Tom O'Sullivan; 24.07.2019
comment
О Господи! Это спасало жизнь. Голову ломал с SHA 1 и google-services.json - person Harikrishnan; 30.07.2020

В моем случае я не включил метод входа в Google.

введите описание изображения здесь

person Jayant Dhingra    schedule 06.07.2020

Я также попробовал почти все ответы, которые я могу найти в Интернете. Поэтому я решил попробовать сторону ios, тогда он все еще выдает ошибку «403 ограниченный клиент». Затем я определяю, что это проблема на стороне сервера. Наконец, я обнаружил, что забыл установить поддержку электронной почты адрес электронной почты в Google Developers Console> API и сервис> сертификат> экран согласия пользователя ссылка и эта опция также в настройках вашего проекта Firebase. После настройки все должно работать. Надеюсь, это вам поможет.

person flutroid    schedule 20.05.2019

После выполнения всех шагов, упомянутых в документации, даже я столкнулся с той же проблемой. Одна вещь сработала для меня, это добавление электронной почты поддержки на страницу настроек консоли firebase.

person Farmaan Elahi    schedule 25.05.2019

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

введите здесь описание изображения

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

И все поля ниже должны иметь значение

введите здесь описание изображения

Попробуйте авторизоваться сейчас, это сработает!

person Arun Yogeshwaran    schedule 24.07.2019

Я столкнулся с той же проблемой, что решило проблему для меня, так это добавление отпечатка пальца SHA-256 в дополнение к SHA-1.

как упоминалось здесь -> Плагин Flutter и google_sign_in: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 10:, null)

Надеюсь, это сработает и для вас!

person m_wer    schedule 25.05.2019

была та же проблема, что и при использовании визуальной студии, когда я перешел на студию Android, она сработала. Я думаю, потому что я вошел в firebase с помощью студии Android, я блуждаю, могу ли я сделать то же самое с VS, ну, надеюсь, это кому-то поможет

person ΘΗΣΈΑΣ    schedule 31.07.2020

Я столкнулся с той же проблемой, я решил ее, добавив отпечаток сертификата отладки / выпуска SHA1 и SHA256 с помощью Keytool

Выпускать

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

Отлаживать

keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

Подробнее здесь: https://developers.google.com/android/guides/client-auth

person Aravin    schedule 16.08.2020