Okno dialogowe (formularz Google) dla poświadczeń zostało pomyślnie otwarte, ale po wypełnieniu moich danych pojawia się ten błąd. Postępowałem zgodnie z instrukcjami stąd . Stworzyłem projekt Firebase, włączyłem Google Drive API (tego właśnie potrzebuję) z Google APIs Console.
Kod zgłaszający wyjątek:
final GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
'https://www.googleapis.com/auth/drive',
],
);
await _googleSignIn.signIn();
To jest ślad stosu:
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)
Wersja wtyczki google_sign_in to 4.0.0.
Oto wynik działania flutter 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.
Każda pomoc będzie mile widziana. Dzięki!
firebase
flutter
dart
firebase-authentication
google-signin
Boyan Bozhidarov
źródło
źródło
ApiException: 10
i najpierw zapoznaj się z dokumentacją - developers.google.com/android/reference/com/google/android/gms/ ... Upewnij się, że rozwiązujesz właściwy problem. Na przykład kod 7 oznaczałby po prostu „brak połączenia z Internetem”.Odpowiedzi:
Właśnie teraz napotykam ten sam problem. Może się tak zdarzyć, jeśli uruchamiasz debugowanie i nie zarejestrowałeś
SHA
odcisku palca w firebase. Rozwiązałem to, generującdebug.keystore
i rejestrując go w aplikacji w Firebase. Nie zapomnij później pobrać nowegogoogle-services.json
. Zobacz także to .Edytuj Jeśli nie możesz użyć uwierzytelniania w trybie wydania, spróbuj wykonać następujące czynności:
-Dodaj odciski cyfrowe certyfikatu SHA klucza zwolnienia.
keytool -exportcert -list -v \ -alias <your-key-name> -keystore <path-to-production-keystore>
Więcej informacji na ten temat można znaleźć tutaj w sekcji
"get release certificate"
https://developers.google.com/android/guides/client-authJeśli Twoje uwierzytelnianie nadal nie działa, prawdopodobnie wynika to z tego, że pobrałeś aplikację z Playstore i włączyłeś funkcję „Podpisywanie aplikacji przez Google Play”. Następnie w tym przypadku przejdź do konsoli publikowania w sklepie Play i przejdź do podpisywania aplikacji w ramach zarządzania wydaniami. Znajdziesz tam odcisk palca certyfikatu SHA do zarejestrowania w konsoli Firebase.
źródło
W projekcie flutter działa następujące rozwiązanie:
Krok 1: Wygeneruj klucze SHA1 i SHA256 .
Krok 2: Dodaj SHA1 i SHA256 do Firebase. (w ustawieniach aplikacji)
Krok 3: Pobierz google-services.json na android / app w folderze projektu.
Krok 4: W terminalu uruchom polecenie
flutter clean
.Krok 5: Uruchom aplikację flutter.
Aby uzyskać więcej informacji, odwiedź:
https://developers.google.com/android/guides/client-auth
https://firebase.google.com/docs/flutter/setup
źródło
Kiedy natknąłem się na ten problem, wypróbowałem wszystkie inne rozwiązania opisane w tym poście. Żadne z nich nie działało. W końcu to rozgryzłem: w mojej sytuacji musiałem upewnić się, że mój „e-mail wsparcia” jest ustawiony.
źródło
Musisz skonfigurować projekt Google Cloud Api z pakietem.
Upewnij się, że jesteś zalogowany na to samo konto Firebase
cd android
./gradlew signingReport
lubgradlew signingReport
google-services.json
flutter clean
IOS:
GoogleService-info.plist
źródło
Spędziłem całe wieki próbując to naprawić.
1. Otwórz grade.properties Ten plik znajduje się w: {{TWÓJ PROJEKT}} / android / gradle.properties
2. Dodaj następujący argument do „org.gradle.jvmargs”, jak pokazano na zrzucie ekranu.
-XX: MaxHeapSize = 256m -Xmx256m
3. Kliknij prawym przyciskiem myszy „gradlew” i przejdź do „Otwórz w terminalu”. Ten plik znajduje się w lokalizacji {{TWÓJ PROJEKT}} / android / gradlew
4. Wpisz następujące polecenie.
Jeśli nie zadziałało, najpierw spróbuj drugiego polecenia:
5. Poczekaj, aż kompilacja się zakończy, a klucze SHA powinny zostać wydrukowane.
Użyj tych kluczy, aby uwierzytelnić swoją aplikację na https://console.firebase.google.com/
źródło
Nie musiałem dodawać dodatkowych SHA, zdałem sobie sprawę, że nie włączyłem metody logowania Google na karcie Uwierzytelnianie w konsoli Firebase
źródło
Dodatkowe kroki, które możesz wykonać, aby google_sign_in działało:
keytool -list -v -keystore ~/key.jks -alias key
Powinieneś otrzymać łącznie co najmniej 6 poświadczeń SHA : 2 z klucza debugowania, 2 z linku do Google Play i 2 z klucza zwalniającego. Pamiętaj, że nie musisz ponownie pobierać pliku google-services.json po dodaniu poświadczeń SHA wydania do 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.**
źródło
Pominięto krok konfiguracji, aby włączyć logowanie Google w Firebase.
✅ Po prostu wykonaj te wystarczające kroki poniżej
project-level setting
. Jak wygenerować certyfikat .google-service.json
do swojego projektu.flutter clean
flutter run
źródło
„Flutter clean” to fragment, którego brakuje wszystkim po zarejestrowaniu SHA1 w konsoli Firebase!
źródło
W przypadku wyjątku platformy 10 wypróbuj to:
źródło
Jednym z powodów, dla których możesz napotkać ten błąd, jest brak wypełnienia formularza zgody Google na OAuth. To jest nowa zmiana w Firebase.
Oto kroki, które musisz wykonać, aby wypełnić formularz zgody na swoją aplikację:
Twój ekran powinien teraz wyglądać jak ten przykład w kroku 6
Oto wyróżniony przykład tego, jak te regiony powinny zostać wypełnione w kroku 7
Te kroki zadziałały dla mnie! Choć związek nie może istnieć nadal, chciałbym odwołać się do źródła tego rozwiązania tutaj
źródło
To może wydawać się głupie, ale właśnie to mi się przydarzyło teraz (po pewnym doświadczeniu w pracy z firebase w przeszłości). Zauważyłem, że nie włączyłem uwierzytelniania Google. Upewnij się, że to zrobisz, ponieważ nadal możesz zobaczyć monit logowania (pokazujący użytkowników Google w telefonie, bez włączonego).
źródło
Upewnij się, że SHA-1 musi być kluczem debugowania, który jest generowany tylko w Twoim systemie, a następnie pobierz plik google-services.json i dołącz go do swojego projektu
źródło
upewnij się, że dodałeś
dependencies { classpath 'com.google.gms:google-services:4.2.0' }
w android / build.gradle i
apply plugin: 'com.google.gms.google-services'
w android / app / build.gradle . Upewnij się również, że applicationId w android / app / build.gradle jest taka sama jak nazwa twojego pakietu w AndroidManifest.xml (czasami możesz zapomnieć o zmianie applicationId po zmianie nazwy pakietu). Ten identyfikator aplikacji lub nazwa pakietu w pliku manifestu powinien być nazwą Twojego pakietu Androida w aplikacji Firebase.
źródło
Powinieneś wygenerować SHA-1 i SHA-256 dla każdego używanego komputera. I dodaj je wszystkie do ustawień projektu Firebase.
I powinieneś wypełnić formularz w zakładce Zgoda OAuth .
źródło
Jeśli wcześniej działało, ale teraz używasz innego komputera, musisz dodać nowe odciski palców SHA-1 / SHA-256 wygenerowane przez ten komputer do projektu w Firebase . Dobry przykład krok po kroku, jak to zrobić: https://stackoverflow.com/a/56091158/5365164
źródło
Jednak odpowiedzi podane powyżej są poprawne, ale nadal, jeśli masz problem, nie zapomnij zweryfikować sekcji signingConfig {} w pliku app / build.gradle. Nie powinno zawierać żadnych niechcianych odwołań do pliku kluczy, które mogą powodować niezgodność z plikiem google-services.json i magazynem kluczy.
źródło
W moim przypadku był to głupi błąd, upewnij się, że identyfikator aplikacji w Firebase, taki jak: „com.example.appname”, jest dokładnie zgodny z applicationId w pliku app / src / build.gradle w ramach defaultConfig {}. Brak błędów pisowni , brak konfliktów między dużymi literami, małe litery, w moim przypadku jedna litera była dużą, co powodowało wszystkie problemy.
źródło
W android / app / build.gradle zmieniłem zależności z com.android.tools.build:gradle:3.1.3 / com.google.gms: google-services: 3.2.1 na com.android.tools.build:gradle : 3.2.1 / com.google.gms: google-services: 4.2.0 . I zadziałało.
źródło
Podczas rejestracji aplikacji w Firebase zmieniłem identyfikator aplikacji na coś, co pasuje do mojej aplikacji. Jednak spowodowało to zainstalowanie drugiej aplikacji Flutter na moim telefonie, gdy uruchomiłem debugger (oczywiście ze względu na zmianę w applicationId). Tak więc w mojej sytuacji działały
remove
zarówno instalacje, jak ire-install
aplikacja.źródło
Próbowałem wszystkiego powyżej i nic nie działało. Mój błąd polegał na tym, że miałem na dysku wiele folderów z wersjami Android Studio i podawałem zły klucz SHA1 w ustawieniach firebase.
źródło
Zbudowanie pakietu aplikacji (zalecane przez Google Play i Flutter) spowoduje ten błąd. Zbudowanie apk rozwiąże ten problem.
Zobacz wydanie 58194425
źródło
Miałem problem i zajęło mi 5 godzin, aby go rozwiązać. Pamiętam, że gdzieś przeczytałem, że API Exception 10 oznacza, że jest problem z odciskami palców. Więc to musiał być magazyn kluczy lub błędna konfiguracja w firebase. Ostatecznie był to magazyn kluczy. Nadal nie jestem pewien, dlaczego to zadziałało, ale tak przy okazji, używam systemu Windows 10:
1.) Upewnij się, że w pliku android / build.gradle mam:
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.google.gms:google-services:4.2.0' } }
2.) Dodałem te dwie linie do pliku android / gradle.properties
android.useAndroidX=true android.enableJetifier=true
3.) Przejdź do C: \ Users \ YOURUSER \ .android i usunąłeś:
4.) Otwórz terminal jako administrator i wygeneruj magazyn kluczy debugowania w tym katalogu.
$ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
Uzyskano odciski palców:
5.) Dodano odciski palców SHA1 do konfiguracji w firebase
To było to z mojej strony. Mam nadzieję, że to komuś pomoże.
źródło
Upewnij się, że certyfikaty do podpisywania, których używasz w konsoli Firebase, są takie same, jak te używane w konfiguracji signingConfigs >> debugowania w pliku app / build.gradle, gdy są jeszcze w fazie rozwoju. Brak dopasowania powoduje błąd.
źródło
To naprawiło to dla mnie. Zrobiłem mały refaktor w nowym projekcie. Myślałem, że używam mojego starego
google-services.json
pliku, ale używałem niewłaściwego pliku. Próbowałem wszystkiego innego przez dwa dni, zanim zdałem sobie sprawę z tego prostego błędu.źródło
Pomogło mi to (wystąpił problem z importowaniem SHA1)
cd .android użyłem i skopiowałem klucz SHA1 i wkleiłem do firebase, konfiguracji projektu, aplikacji na Androida, certyfikatu SHA
keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android
i utworzyłem jeszcze jeden klucz z:
keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkeytwo -keypass android -keyalg RSA -keysize 2048 -wartość 10000
i użyłem tego do wzięcia jeszcze jednego klucza SHA:
keytool -list -v -keystore debug.keystore -alias androiddebugkeytwo -storepass android -keypass android
Skopiowałem i wkleiłem, dodając jeszcze jeden klucz w moim projekcie Firebase.
pobrałem również plik google-services.json i wklejono w Android / app wewnątrz projektu flutter.
To działało poprawnie, moje zależności pubspec.yml:
http: ^0.12.0+2 cupertino_icons: ^0.1.2 firebase_auth: ^0.15.1 firebase_analytics: ^5.0.6 firebase_core: ^0.4.2+1 google_sign_in: ^4.0.14
mój kod:
Widget _signInButton() { return OutlineButton( splashColor: Colors.grey, onPressed: () async { await signInWithGoogle() .then((FirebaseUser user) => print(user.displayName)) .catchError((e) => print(e)); }, ); } import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; final FirebaseAuth _auth = FirebaseAuth.instance; final GoogleSignIn googleSignIn = new GoogleSignIn(); Future<FirebaseUser> signInWithGoogle() async { final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication; final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); final AuthResult authResult = await _auth.signInWithCredential(credential); final FirebaseUser user = authResult.user; print(user.displayName.toString()); assert(!user.isAnonymous); assert(await user.getIdToken() != null); final FirebaseUser currentUser = await _auth.currentUser(); assert(user.uid == currentUser.uid); return user; } void signOutGoogle() async { await googleSignIn.signOut(); print("User Sign Out"); }
Mam nadzieję, że to zadziała.
źródło
Upewnij się, że robisz to:
Włącz logowanie Google z konsoli Firebase
Umieść SHA-1 podczas konfigurowania aplikacji Firebase na Androida
źródło
Otrzymuję ten błąd: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 7 null) Może rozwiązanie jest dla Ciebie dobre.
I zdaję sobie sprawę, że moje urządzenie debugujące (tryb debugowania systemu Android) nie jest połączone z Internetem. Myślę, że uwierzytelnianie nie powiodło się, więc metoda zwraca wartość null lub użytkownik równy null.
Zwracana zmienna musi zostać sprawdzona przed użyciem.
źródło
W moim przypadku żadna z odpowiedzi nie rozwiązała problemu. Po namyśle zdałem sobie sprawę, że jakiś czas temu zmieniłem nazwę pakietu mojej aplikacji . Jeśli tak jest w Twoim przypadku, po prostu utwórz inną aplikację w projekcie Firebase z nową nazwą pakietu i ponownie pobierz plik google-services.json.
źródło
Jeśli wydana aplikacja nie działa poprawnie i korzystasz z podpisu Google Play, skopiuj SHA z konta Play Store , ten z klucza lokalnego nie zadziała
źródło