Wtyczka Flutter i google_sign_in: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 10:, null)

100

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!

Boyan Bozhidarov
źródło
Dla wszystkich: zwróć uwagę na kod wyjątku ApiException: 10i 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”.
Kirill Karmazin,
Uruchom ./gradlew signingReport, znajduje się w folderze aplikacji na Androida. Dodaj SHA1 w Google Firebase Konfiguracja logowania Google. developers.google.com/android/guides/client-auth . Będziesz potrzebował SHA1 dla każdego komputera, na którym pracujesz.
miłość na żywo
@KirillKarmazin masz jakiś pomysł, co to jest 12500? E / flutter (23795): [BŁĄD: flutter / lib / ui / ui_dart_state.cc (157)] Nieobsługiwany wyjątek: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)
raiton

Odpowiedzi:

155

Właśnie teraz napotykam ten sam problem. Może się tak zdarzyć, jeśli uruchamiasz debugowanie i nie zarejestrowałeś SHAodcisku palca w firebase. Rozwiązałem to, generując debug.keystorei rejestrując go w aplikacji w Firebase. Nie zapomnij później pobrać nowego google-services.json. Zobacz także to .

enter image description here

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-auth

Jeś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.

enter image description here

TSR
źródło
19
Dzięki za to. To pomogło. Warto zauważyć, że oba klucze SHA1 i SHA256 musiały zostać dodane, aby uwierzytelnianie działało
Srini
2
Zaakceptuj to jako odpowiedź.
Muruganandham K
@TSR to zadziałało, ale nie musiałem pobierać nowego google-services.json.
Darren Cole
2
FYI, miałem ten sam błąd nawet po skonfigurowaniu moich odcisków palców sha. Okazało się, że musiałem również dodać adres e-mail wsparcia na github.com/flutter/flutter/issues/25909#issuecomment-497378619 .
Michael Nelson
@MichaelNelson to też był mój problem
Tobias,
44

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

Rabi Roshan
źródło
10
czystość jest bardzo ważna
mkkhedawat
29

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.

Adres e-mail pomocy technicznej dotyczącej ustawień publicznych

Johan Witters
źródło
To zadziałało dla mnie.
dvallejo
27

Musisz skonfigurować projekt Google Cloud Api z pakietem.

https://developers.google.com/identity/sign-in/android/start-integrating#configure_a_project

Upewnij się, że jesteś zalogowany na to samo konto Firebase

  1. Wybierz projekt Firebase
  2. Wybierz Androida
  3. Otwórz terminal w swoim projekcie flutter
  4. cd android
  5. ./gradlew signingReport lub gradlew signingReport
  6. Wklej nazwę pakietu i klucz SHA1
  7. Pobierz informacje o kliencie
  8. Pobierz i zamień google-services.json
  9. flutter clean

IOS:

  1. Wybierz projekt Firebase
  2. Wybierz IOS
  3. Wprowadź swój identyfikator pakietu
  4. Pobierz referencje
  5. Pobierz i zamień GoogleService-info.plist
Matteo Antolini
źródło
2
Podpisywanie Gradlewów Raport bardzo mi pomaga, ponieważ najpierw używam niewłaściwego magazynu kluczy. Dzięki temu poleceniu masz zdecydowanie właściwą.
BHuelse
25

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

wprowadź opis obrazu tutaj

2. Dodaj następujący argument do „org.gradle.jvmargs”, jak pokazano na zrzucie ekranu.

-XX: MaxHeapSize = 256m -Xmx256m

wprowadź opis obrazu tutaj

3. Kliknij prawym przyciskiem myszy „gradlew” i przejdź do „Otwórz w terminalu”. Ten plik znajduje się w lokalizacji {{TWÓJ PROJEKT}} / android / gradlew

wprowadź opis obrazu tutaj

4. Wpisz następujące polecenie.

gradlew signingReport

Jeśli nie zadziałało, najpierw spróbuj drugiego polecenia:

./gradlew signingReport

5. Poczekaj, aż kompilacja się zakończy, a klucze SHA powinny zostać wydrukowane.

wprowadź opis obrazu tutaj

Użyj tych kluczy, aby uwierzytelnić swoją aplikację na https://console.firebase.google.com/

KylianMbappe
źródło
1
Dla mnie to jedyna rzecz, która zadziałała, moje narzędzie wygenerowało niedziałające SHA-1 / SHA-256
PRO GRAMMER
4
Jeśli krok 4 nie zadziałał, zamiast tego zadzwoń do gradlew w następujący sposób: ./gradlew signingReport
Tincho825
1
Wtrącenie się, by powiedzieć, że to jedyna rzecz, która działała dla mnie. Wypróbowałem wszystko inne i spędziłem wiele dni próbując rozwiązać problem, zanim go znalazł.
Mark Rawlingson
Pojawienie się tego błędu: nie można zainicjować klasy org.codehaus.groovy.runtime.InvokerHelper
Ramis
to jest najłatwiejsza metoda! należy to zaakceptować.
reverie_ss
11

Nie musiałem dodawać dodatkowych SHA, zdałem sobie sprawę, że nie włączyłem metody logowania Google na karcie Uwierzytelnianie w konsoli Firebase

Włączam metodę logowania Google w konsoli Firebase

Vidral Bonvi
źródło
7

Dodatkowe kroki, które możesz wykonać, aby google_sign_in działało:

] [2]

  • Jeśli mógłbyś uruchomić Google Sign In podczas debugowania, ale NIE w wersji, istnieje duża szansa, że ​​nie dodałeś SHA1 i SHA256 klucza wydania do firebase. Aby uzyskać SHA klucza zwalniającego, użyjkeytool -list -v -keystore ~/key.jks -alias key

konsola 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.

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.**
function1983
źródło
7

Pominięto krok konfiguracji, aby włączyć logowanie Google w Firebase.

Logowanie przez Google jest automatycznie konfigurowane w połączonych aplikacjach iOS i aplikacjach internetowych. Aby skonfigurować logowanie Google dla aplikacji na Androida, musisz dodać odcisk palca SHA1 dla każdej aplikacji w ustawieniach projektu.

Po prostu wykonaj te wystarczające kroki poniżej

  1. Włącz metodę uwierzytelniania Google
  2. Skonfiguruj odciski cyfrowe certyfikatów w bieżącym projekcie pod adresem project-level setting. Jak wygenerować certyfikat .
  3. Wybierz adres e-mail dla pomocy technicznej programu Project
  4. Pobierz google-service.jsondo swojego projektu.
  5. Biegać flutter clean
  6. początek flutter run

wizerunek

Sen Sokha
źródło
6

„Flutter clean” to fragment, którego brakuje wszystkim po zarejestrowaniu SHA1 w konsoli Firebase!

Roger Gusmao
źródło
4

W przypadku wyjątku platformy 10 wypróbuj to:

  1. Wygeneruj nowy odcisk palca SHA1 na swoim komputerze,
  2. Przejdź do ustawień aplikacji Firebase na Androida w konsoli Firebase
  3. Kliknij dodaj nowy odcisk palca w ustawieniach aplikacji na Androida
  4. Wklej nowy odcisk cyfrowy SHA1 w polu
  5. Wygeneruj nowy plik konfiguracyjny JSON
  6. Zastąp plik konfiguracyjny w katalogu Androida
  7. Uruchom trzepotanie czyste
  8. Uruchom swój projekt
Mithilesh Parmar
źródło
3

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ę:

  1. Przejdź do konsoli Google API (obecnie pod adresem https://console.developers.google.com ), upewnij się, że jesteś zalogowany na swoje konto, na którym tworzony jest projekt Firebase.
  2. Wybierz projekt z menu „Wybierz projekt” w lewym górnym rogu konsoli programisty.
  3. W panelu po lewej stronie przejdź do „danych logowania”, a następnie przejdź do „ekranu akceptacji OAuth”.
  4. W polu „Nazwa aplikacji” wprowadź publiczną nazwę aplikacji
  5. W sekcji „Logo aplikacji” prześlij lokalny plik obrazu swojej aplikacji
  6. W sekcji „Adres e-mail pomocy” wpisz ten sam adres e-mail pomocy, który znajduje się w aplikacji Firebase.

Twój ekran powinien teraz wyglądać jak ten przykład w kroku 6

  1. Przewiń w dół i wypełnij „Link do strony głównej aplikacji”, „Link do polityki prywatności aplikacji” i „Link do Warunków korzystania z usługi”, dodając http: // przed autoryzowaną domeną, w której znajduje się Twoja aplikacja firebase.

Oto wyróżniony przykład tego, jak te regiony powinny zostać wypełnione w kroku 7

  1. Kliknij Zapisz

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

Ben Elliott
źródło
Czy to rzeczywiście odpowiedź na pytanie?
Bulat
Dziękuję za zwrotną informację. Próbowałem zaktualizować swoją odpowiedź, aby była bardziej szczegółowa - daj mi znać, jeśli jest teraz odpowiednia - a jeśli nie, jak mogę ją poprawić.
Ben Elliott,
1
Czy musisz „Prześlij do weryfikacji”, czy po prostu „Zapisz”?
Prostsze
2

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).

Chłopak
źródło
gdzie mogę to zrobić?
Ahmed Albarody
@AhmedAlbarody W konsoli Firebase - wybierz uwierzytelnianie, a następnie włącz usługi, z których chcesz korzystać.
Guy
1

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

Varun Kumar Medam
źródło
1

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.

Sachin
źródło
1

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 .

gökhan
źródło
1

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

J. Saw
źródło
1

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.

RamKr
źródło
1

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.

RohitDubey22
źródło
0

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.

Boyan Bozhidarov
źródło
0

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 removezarówno instalacje, jak i re-installaplikacja.

NielsB95
źródło
0

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.

shahana kareen
źródło
0

Zbudowanie pakietu aplikacji (zalecane przez Google Play i Flutter) spowoduje ten błąd. Zbudowanie apk rozwiąże ten problem.

Zobacz wydanie 58194425

Prostsze
źródło
0

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ś:

debug.keystore
debug.keystore.lock

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:

$ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android 

5.) Dodano odciski palców SHA1 do konfiguracji w firebase

To było to z mojej strony. Mam nadzieję, że to komuś pomoże.

Morfinismo
źródło
0

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.

Tonui Nicholus
źródło
0

To naprawiło to dla mnie. Zrobiłem mały refaktor w nowym projekcie. Myślałem, że używam mojego starego google-services.jsonpliku, 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.

Oprimus
źródło
0

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.

Pedro Molina
źródło
0

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.

Ali Baransel USTNA
źródło
Trudno mi podążać za twoją odpowiedzią: czy możesz uzyskać pomoc w używaniu angielskiego (nie mojego pierwszego języka)?
siwobrody
0

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.

Anderson Dalbert
źródło
0

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 wprowadź opis obrazu tutaj

Omar Amar
źródło