web-dev-qa-db-fra.com

Plugin Flutter et google_sign_in: PlatformException (sign_in_failed, com.google.Android.gms.common.api.ApiException: 10:, null)

La boîte de dialogue (formulaire Google) pour les informations d'identification est ouverte avec succès, mais après avoir rempli mes informations d'identification, je reçois cette erreur. J'ai suivi les instructions de ici . Création d'un projet Firebase, activation de l'API Google Drive (c'est ce dont j'ai besoin pour l'instant) à partir de la console des API Google.

Le code levant l'exception:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/drive',
  ],
);

await _googleSignIn.signIn();

C'est la trace de la pile:

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)

La version du plugin google_sign_in est 4.0.0.

C'est la sortie de 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.

Toute aide sera très appréciée. Merci!

42
Boyan Bozhidarov

Je rencontre le même problème tout à l'heure. Cela peut se produire si vous utilisez le débogage et que vous n'avez pas enregistré une empreinte SHA dans Firebase. Je l'ai résolu en générant un debug.keystore et l'enregistrer dans l'application sur Firebase. N'oubliez pas de télécharger le nouveau google-services.json après ça. Voir aussi this .

enter image description here

Modifier Si vous ne pouvez pas utiliser l'authentification en mode de libération, essayez ce qui suit:

-Ajouter les empreintes digitales du certificat SHA de la clé de libération).

keytool -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>

Pour plus de détails à ce sujet, voir ici dans la section "get release certificate"https://developers.google.com/Android/guides/client-auth

Si votre authentification ne fonctionne toujours pas, c'est probablement parce que vous avez téléchargé l'application depuis Playstore et que vous avez activé la "Signature de l'application par la fonction Google Play" Puis pour dans ce cas, accédez à la console de publication Play Store et accédez à la signature d'application sous la gestion des versions. Vous y trouverez l'empreinte digitale du certificat SHA à enregistrer dans la console Firebase.

enter image description here

64
TSR

Lorsque je suis tombé sur ce problème, j'ai essayé toutes les autres solutions décrites dans cet article. Rien de tout cela n'a fonctionné. Finalement, je l'ai compris: dans ma situation, je devais m'assurer d'avoir défini mon "e-mail de support".

Public Setting Support Email

17
Johan Witters

La solution suivante fonctionne dans le projet flutter:

Étape 1: Générez SHA1 et SHA256 clés.
Étape 2: Ajoutez à la fois le SHA1 et le SHA256 à Firebase. (dans les paramètres de votre application)
Étape 3: Téléchargez google-services.json sur Android/application dans votre dossier de projet.
Étape 4: Dans votre terminal, exécutez la commande flutter clean.
Étape 5: exécutez votre application Flutter.

Pour plus d'informations, visitez:
https://developers.google.com/Android/guides/client-auth
https://firebase.google.com/docs/flutter/setup

13
Rabi Roshan

Vous devez configurer votre projet Google Cloud Api avec votre package.

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

Assurez-vous d'être connecté avec le même compte Firebase

  1. Sélectionnez votre projet Firebase
  2. Sélectionnez Android
  3. Terminal ouvert dans votre projet de flottement
  4. cd Android
  5. ./gradlew signingReport ou gradlew signingReport
  6. Collez le nom de votre package et votre clé SHA1
  7. Télécharger les informations client
  8. Téléchargez et remplacez le google-services.json
  9. flutter clean

IOS:

  1. Sélectionnez votre projet Firebase
  2. Sélectionnez IOS
  3. Entrez votre ID de forfait
  4. Télécharger les crédetials
  5. Téléchargez et remplacez GoogleService-info.plist
10
Matteo Antolini

Pour moi, je n'avais pas besoin d'ajouter de SHA supplémentaires, je me suis rendu compte que je n'activais pas la méthode de connexion Google dans le Onglet Authentification dans Console Firebase

Enabling google sign-in method in Firebase console

5
Vidral Bonvi

"Flutter clean" c'est la pièce qui manque à tout le monde après avoir enregistré le SHA1 dans Firebase Console!

3
Roger Gusmao

Étapes supplémentaires que vous devrez peut-être suivre pour que google_sign_in fonctionne:

][2]

  • Si vous pouviez exécuter Google Sign In pendant le débogage mais PAS dans la version, il y a de fortes chances que vous n'ajoutiez pas les clés SHA1 et SHA256 de votre clé de version à Firebase. Pour obtenir les SHA de la clé de libération, utilisez keytool -list -v -keystore ~/key.jks -alias key

console Vous devez vous retrouver avec un total de au moins 6 SHA : 2 à partir de la clé de débogage, 2 à partir de la liaison Google Play et 2 à partir de la clé de version. Notez que vous n'avez pas besoin de retélécharger le fichier google-services.json après avoir ajouté la version SHA credentials to 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.**
3
function1983

Cela peut sembler idiot, mais cela m'est juste arrivé maintenant (après avoir eu une certaine expérience de travail avec Firebase dans le passé). J'ai remarqué que je n'ai pas activé l'authentification Google. Assurez-vous de le faire, car vous pourriez toujours voir l'invite de connexion (vous montrant les utilisateurs Google de votre téléphone, sans l'activer).

2
Guy

Une des raisons pour lesquelles vous pouvez rencontrer cette erreur est que vous n'avez pas rempli le formulaire de consentement de google OAuth. Il s'agit d'une nouvelle modification de Firebase.

Voici les étapes que vous devez suivre pour remplir le formulaire de consentement pour votre application:

  1. Accédez à la console Google api (actuellement sur https://console.developers.google.com ), assurez-vous que vous êtes connecté à votre compte sous lequel votre projet Firebase est créé.
  2. Sélectionnez votre projet dans la liste déroulante "sélectionner un projet" en haut à gauche de la console développeur.
  3. Dans le volet de gauche, accédez aux "informations d'identification", puis passez à "l'écran de consentement OAuth".
  4. Sous "Nom de l'application", entrez le nom public de votre application
  5. Sous "Logo de l'application", téléchargez un fichier image local de votre application
  6. Sous "E-mail d'assistance", entrez le même e-mail d'assistance répertorié dans votre application Firebase.

Votre écran devrait maintenant ressembler à cet exemple à l'étape 6

  1. Faites défiler vers le bas et remplissez le "Lien vers la page d'accueil de l'application", le "Lien vers la politique de confidentialité de l'application" et le "Lien vers les conditions d'utilisation de l'application" en ajoutant http: // avant le domaine autorisé dans lequel réside votre application firebase.

Voici un exemple mis en évidence de la façon dont ces régions doivent être remplies à l'étape 7

  1. Cliquez sur Enregistrer

Ces étapes ont fonctionné pour moi! Bien que le lien n'existe peut-être pas encore, je voudrais faire référence à la source de cette solution ici

2
Ben Elliott

Vous avez manqué l'étape de configuration, activez la connexion Google sur Firebase.

La connexion à Google est automatiquement configurée sur vos applications iOS et Web connectées. Pour configurer la connexion Google à vos applications Android Android, vous devez ajouter l'empreinte SHA1 de chaque application dans les paramètres de votre projet.

Complétez simplement ces étapes ci-dessous

  1. Activer Google Méthode d'authentification
  2. Configurez les empreintes digitales des certificats dans votre projet en cours à project-level setting. Comment générer un certificat .
  3. Sélectionnez l'email pour Email de support du projet
  4. Télécharger google-service.json dans mon projet.
  5. Courir flutter clean
  6. début flutter run

image

1
Sen Sokha

J'ai passé des heures à essayer de résoudre ce problème.

1. Ouvrez grade.properties Ce fichier se trouve sous: {{YOUR PROJECT}}/Android/gradle.properties

enter image description here

2. Ajoutez l'argument suivant à 'org.gradle.jvmargs' comme indiqué dans la capture d'écran.

-XX: MaxHeapSize\= 256m -Xmx256m

enter image description here

3. Faites un clic droit sur "gradlew" et allez dans "Ouvrir dans le terminal" Ce fichier se trouve sous {{VOTRE PROJET}}/Android/gradlew

enter image description here

4. Tapez la commande suivante.

gradlew signingReport

5. Attendez la fin de la compilation et vos clés SHA doivent être imprimées pour vous.

enter image description here

Utilisez ces clés pour authentifier votre application dans https://console.firebase.google.com/

1
KylianMbappe

Assurez-vous que SHA-1 doit être une clé de débogage générée uniquement dans votre système, puis téléchargez le fichier google-services.json en ajoutant cela à votre projet

1
Varun Kumar Medam

Cela m'a arrangé. J'ai fait un petit refactor dans un nouveau projet. Je pensais que j'utilisais mon ancien google-services.json fichier mais j'avais utilisé le mauvais fichier. J'ai essayé tout le reste pendant deux jours avant de réaliser cette simple erreur.

0
Oprimus

J'ai tout essayé ci-dessus et rien n'a fonctionné. Mon erreur était que j'avais plusieurs dossiers Android version studio dans mon lecteur et que j'alimentais une mauvaise clé SHA1 dans les paramètres de Firebase.

0
shahana kareen

Cela m'a été aidé (c'était un problème lors de l'importation du SHA1)

cd .Android i utilisé et copié la clé SHA1 et collé dans firebase, configuration du projet, Android, SHA

keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass Android -keypass Android

et j'ai également créé une clé supplémentaire avec:

keytool -genkey -v -keystore debug.keystore -storepass Android -alias androiddebugkeytwo -keypass Android -keyalg RSA -keysize 2048 -validity 10000

et utilisé cela pour prendre un autre SHA clé:

keytool -list -v -keystore debug.keystore -alias androiddebugkeytwo -storepass Android -keypass Android

j'ai copié et collé en ajoutant une clé de plus dans mon projet Firebase.

également téléchargé le google-services.json et collé dans Android/app dans le projet flutter.

Cela a fonctionné correctement, mes dépendances 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

mon code:

    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");
}

J'espère que ce travail.

0
Pedro Molina

Dans Android/app/build.gradle j'ai changé les dépendances de com.Android.tools.build:gradle:3.1./com.google.gms : google-services: 3.2.1 à com.Android.tools.build:gradle:3.2.1/com.google.gms:google-services:4.2.. Et ça a marché.

0
Boyan Bozhidarov

Veuillez vous assurer de le faire:

  • Activer la connexion Google à partir de votre console Firebase

  • Mettez votre SHA-1 lors de la configuration de votre Android application firebase

  • Après vous être connecté avec le même compte avec lequel vous avez créé le projet Firebase, vous avez rempli ce consentement https://console.developers.google.com/apis/credentials/consent
0
ikhsanudinhakim

Lors de l'enregistrement de l'application dans Firebase, j'ai changé mon applicationId en quelque chose qui convient à mon application. Cependant, cela a entraîné l'installation d'une deuxième application Flutter sur mon téléphone lorsque j'ai exécuté le débogueur (bien sûr, en raison du changement d'applicationId). Donc, ce qui a fonctionné dans ma situation, c'était de remove à la fois les installations et re-install l'application.

0
NielsB95

Vous devez générer SHA-1 et SHA-256 pour chaque PC que vous avez utilisé. Et ajoutez-les tous aux paramètres du projet Firebase.

Et vous devez remplir le formulaire dans l'onglet OAuth Consent .

0
gökhan

Veuillez vous assurer que les certificats de signature que vous utilisez sur la console Firebase sont les mêmes que ceux utilisés dans la configuration de débogage de signatureConfigs >> dans le fichier app/build.gradle pendant le développement. Missmatch provoque une erreur.

0
Tonui Nicholus

J'ai eu le problème et j'ai pris 5 heures pour le résoudre. Je me souviens avoir lu quelque part que l'exception API 10 signifie qu'il y a un problème avec les empreintes digitales. Donc, ce devait être le magasin de clés ou une mauvaise configuration dans Firebase. Finalement, c'était le magasin de clés. Je ne sais toujours pas pourquoi cela a fonctionné, mais c'est ce que j'ai fait, d'ailleurs, j'utilise Windows 10:

1.) Assurez-vous que sur le fichier Android/build.gradle j'avais les éléments suivants:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.Android.tools.build:gradle:3.5.1'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

2.) J'ai ajouté ces deux lignes au fichier Android/gradle.properties

Android.useAndroidX=true
Android.enableJetifier=true

3.) Accédez à C:\Users\YOURUSER\.Android et supprimez les éléments suivants:

debug.keystore
debug.keystore.lock

4.) Ouvrez le terminal en tant qu'administrateur et générez le fichier de clés de débogage dans ce répertoire.

$ keytool -genkey -v -keystore debug.keystore -storepass Android -alias androiddebugkey -keypass Android -keyalg RSA -keysize 2048 -validity 10000

Obtenu les empreintes digitales:

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

5.) Ajout des empreintes digitales SHA1 à la configuration dans Firebase

C'était de mon côté. J'espère que ça aide quelqu'un.

0
Morfinismo

assurez-vous d'avoir ajouté

 dependencies {
    classpath 'com.google.gms:google-services:4.2.0'
}

dans Android/build.gradle et

apply plugin: 'com.google.gms.google-services'

dans Android/app/build.gradle. Assurez-vous également que applicationId dans Android/app/build.gradle est le même que le nom de votre package dans AndroidManifest.xml (Vous pouvez oublier de changer applicationId après avoir changé le nom du package parfois ). Ce nom d'application ou de package dans le fichier manifeste doit être le nom de votre Android dans l'application Firebase.

0
wicky

La création d'un ensemble d'applications (recommandé par Google Play et Flutter) provoquera cette erreur. Construire un apk résoudra cela.

Voir problème 58194425

0
Simpler