Флаттер и плагин google_sign_in: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 10:, null)
Диалоговое окно (форма Google) для учетных данных открывается успешно, но после заполнения учетных данных я получаю эту ошибку. Я следовал инструкциям отсюда. Создал проект Firebase, включил Google Drive API (то, что мне сейчас нужно) из консоли API Google.
Код, выбрасывающий исключение:
final GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
'https://www.googleapis.com/auth/drive',
],
);
await _googleSignIn.signIn();
Это трассировка стека:
E/flutter ( 5068): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 5068): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter ( 5068): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter ( 5068): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292:18)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #2 GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:226:58)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #3 GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:268:20)
E/flutter ( 5068): #4 GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:339:48)
E/flutter ( 5068): #5 ThatsMyComponentState.theSignInFuction.<anonymous closure> (package:my_app/widgets/my_file.dart:666:45)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #6 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 5068): #7 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 5068): #8 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 5068): #9 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 5068): #10 TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter ( 5068): #11 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 5068): #12 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
E/flutter ( 5068): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 5068): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 5068): #15 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 5068): #16 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 5068): #17 _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter ( 5068): #18 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)
Версия плагина google_sign_in - 4.0.0.
Это вывод трепетания doctot -v:
[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17763.253], locale en-US)
• Flutter version 1.0.0 at C:\src\flutter-0.7.3\flutter
• Framework revision 5391447fae (10 weeks ago), 2018-11-29 19:41:26 -0800
• Engine revision 7375a0f414
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at C:\Users\myuser\AppData\Local\Android\Sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\Users\myuser\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.
[√] Android Studio (version 3.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
[!] IntelliJ IDEA Community Edition (version 2018.1)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.6
X Flutter plugin not installed; this adds Flutter specific functionality.
X Dart plugin not installed; this adds Dart specific functionality.
• For information about installing plugins, see
https://flutter.io/intellij-setup/#installing-the-plugins
[!] VS Code, 64-bit edition (version 1.30.2)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension not installed; install from
https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)
! Doctor found issues in 2 categories.
Любая помощь будет высоко ценится. Спасибо!
Ответы
Ответ 1
Я столкнулся с той же проблемой только сейчас. Это может произойти, если вы работаете в режиме отладки, и вы не зарегистрировали отпечаток ша в firebase.
Я решил это, сгенерировав debug.keystore
и зарегистрировав его в приложении на Firebase. Не забудьте скачать новый google-services.json
после этого.
Смотрите также https://developers.google.com/android/guides/client-auth
Изменить
Если вы не можете использовать аутентификацию в режиме выпуска, попробуйте следующее:
-Add отпечаток сертификата SHA ключа разблокировки.
keytool -exportcert -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>
Подробнее об этом см. здесь, в разделе "get release certificate"
. https://developers.google.com/android/guides/client-auth
Если ваша аутентификация по-прежнему не работает, возможно, это связано с тем, что вы загрузили приложение из Playstore и включили "Подписание приложения с помощью функции Google Play"
Затем для этого случая перейдите в консоль публикации магазина игр и перейдите к подписанию приложения в разделе управления выпуском. Там вы найдете отпечаток сертификата SHA для регистрации в консоли Firebase.
Ответ 2
Когда я столкнулся с этой проблемой, я попробовал все другие решения, описанные в этом посте. Ничто из этого не сработало. В конце концов я понял это: в моей ситуации я должен был убедиться, что у меня установлена "электронная почта поддержки".
Ответ 3
В проекте флаттера работает следующее решение:
Шаг 1. Создайте ключи SHA1 и SHA256.
Шаг 2: Добавьте SHA1 и SHA256 в базу данных. (в настройках приложения)
Шаг 3. Загрузите google-services.json в android/app в папке своего проекта.
Шаг 4: В вашем терминале выполните команду flutter clean
.
Шаг 5. Запустите приложение для флаттера.
Для получения дополнительной информации посетите:
https://developers.google.com/android/guides/client-auth
https://firebase.google.com/docs/flutter/setup
Ответ 4
Чтобы google_sign_in работал, вам, возможно, придется предпринять дополнительные шаги:
- Если вы можете запустить Google Sign In во время отладки, но НЕ в выпуске, есть большая вероятность, что вы не добавили свои ключи релиза SHA1 и SHA256 в базу данных Firebase. Чтобы получить ключ разблокировки SHA, используйте ключ keytool
keytool -list -v -keystore ~/key.jks -alias key
В итоге вы должны получить не менее 6 учетных данных SHA: 2 из ключа отладки, 2 из ссылки Google Play и 2 из ключа выпуска. Обратите внимание, что вам не нужно повторно загружать файл google-services.json после добавления учетных данных релиза SHA в firebase.
# Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
# GooglePlay Services
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-keep class com.google.common.** { *; }
-dontwarn com.google.common.**
Ответ 5
Мне не нужно было добавлять дополнительные SHA, я понял, что не включил метод входа в Google на вкладке Аутентификация в консоли Firebase
Ответ 6
Одной из причин возникновения этой ошибки может быть то, что вы не заполнили форму согласия Google OAuth. Это новое изменение в Firebase.
Вот шаги, которые необходимо выполнить, чтобы заполнить форму согласия для вашего приложения:
- Перейдите в консоль API Google (в настоящее время по адресу https://console.developers.google.com) и убедитесь, что вы вошли в свою учетную запись, под которой создан ваш проект firebase.
- Выберите свой проект в раскрывающемся списке "выберите проект" в левом верхнем углу консоли разработчика.
- В левой панели перейдите к "учетным данным", а затем перейдите к "Экрану согласия OAuth".
- В поле "Имя приложения" введите публичное имя приложения.
- В разделе "Логотип приложения" загрузите локальный файл изображения вашего приложения.
- В разделе "Поддержка по электронной почте" введите тот же адрес поддержки, который указан в вашем приложении Firebase.
Теперь ваш экран должен выглядеть как этот пример к шагу 6
- Прокрутите вниз и заполните "Ссылку на домашнюю страницу приложения", "Ссылку на политику конфиденциальности приложения" и "Ссылку на условия использования приложения", добавив http:// перед авторизованным доменом, в котором находится ваше приложение firebase.
Вот выделенный пример того, как эти области должны быть заполнены в шаге 7
- Нажмите Сохранить
Эти шаги спомогли мне! Хотя ссылка может еще не существовать, я хотел бы сослаться на источник этого решения здесь
Ответ 7
"Flutter clean" - это то, что всем не хватает после регистрации SHA1 в консоли Firebase!
Ответ 8
Убедитесь, что SHA-1 должен быть ключом отладки, сгенерированным только в вашей системе, а затем загрузите файл google-services.json и добавьте его в свой проект.
Ответ 9
В android/app/build.gradle я изменил зависимости с com.android.tools.build:gradle:3.1.3/com.google.gms: google-services: 3.2.1 на com.android.tools.build:gradle: 3.2.1/com.google.gms: google-services: 4.2.0. И это сработало.
Ответ 10
При регистрации приложения в Firebase я изменил свой applicationId на то, что подходит моему приложению. Однако это привело к тому, что на моем телефоне было установлено второе приложение Flutter, когда я запустил отладчик (конечно, из-за изменения applicationId). Таким образом, вещь, которая работала для моей ситуации, состояла в том, чтобы remove
обе установки и re-install
приложение.
Ответ 11
Я перепробовал все выше и ничего не получалось. Моя ошибка заключалась в том, что у меня на диске было несколько папок с версией для Android, и в настройках Firebase я использовал неверный ключ SHA1.
Ответ 12
Я столкнулся с этой проблемой. Я удалил свое приложение в консоли Firebase и добавил его снова. Позже замените существующий файл "google-services.json" на новый сгенерированный файл "google-services.json". Это решило проблему
Ответ 13
убедитесь, что вы добавили
dependencies {
classpath 'com.google.gms:google-services:4.2.0'
}
в android/build.gradle и
apply plugin: 'com.google.gms.google-services'
в android/app/build.gradle. Также убедитесь, что applicationId в android/app/build.gradle совпадает с именем вашего пакета в AndroidManifest.xml(иногда вы можете забыть изменить applicationId после изменения имени пакета). Этот идентификатор приложения или имя пакета в файле манифеста должен быть
Имя вашего пакета Android в Firebase App.
Ответ 14
Вы должны сгенерировать SHA-1 и SHA-256 для каждого компьютера, который вы использовали. И добавьте их все в настройки проекта Firebase.
И вы должны заполнить форму на вкладке OAuth Consent.
Ответ 15
Сборка приложения (которая рекомендуется Google Play и Flutter) приведет к этой ошибке. Создание apk решит эту проблему.
Смотрите выпуск 58194425