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!


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


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


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


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

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/


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


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

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


6

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


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

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


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


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


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.


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 .



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.


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.


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.


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.


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.


0

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

Zobacz wydanie 58194425


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.


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.


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.


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.



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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.