PlatformException (PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)) - PullRequest
3 голосов
/ 17 мая 2019

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

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 этой строки:

    • реализация 'com.google.firebase: firebase-core: 16.0.9' под зависимостями
    • применить плагин: 'com.google.gms.google-services' в конце файла.
  8. Создание файла с именем release-signing.properties в папке моего проекта с этими строками в нем.
    • storeFile = debug.keystore
    • keyAlias ​​= androiddebugkey
    • storePassword = андроид
    • keyPassword = андроид

Кроме того, я искал в ALL 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(),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

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

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

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

Ответы [ 6 ]

4 голосов
/ 29 мая 2019

Оператор @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 для моего проекта.

enter image description here

2 голосов
/ 11 июля 2019

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

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

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

enter image description here

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

Это должно быть объяснено в документации. Люди будут сходить с ума и не пытаться трепетать с этимвид отсутствия документации.

1 голос
/ 25 мая 2019

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

1 голос
/ 20 мая 2019

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

0 голосов
/ 24 июля 2019

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

enter image description here

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

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

enter image description here

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

0 голосов
/ 25 мая 2019

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

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

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

...