2
votes

Comment détecter les erreurs dans la connexion GoogleSignInSilently?

J'ai le code suivant que j'utilise pour connecter un utilisateur en mode silencieux

PlatformException (PlatformException(sign_in_required, com.google.android.gms.common.api.ApiException: 4: 4: , null))

Si l'utilisateur ne peut pas se connecter en mode silencieux, cela entraîne une erreur.

try {
    result = await GoogleSignIn().signInSilently().catchError((x) {
      print(x);
    });
  } catch (e) {
    print(e);
  }

Le problème que j'ai est que je n'arrive pas à saisir l'exception. catchError ni le bloc catch ne sont touchés. Comment attraper cette erreur?


0 commentaires

4 Réponses :


1
votes

Cela pourrait aider .

Listes de contrôle:

  1. N'a pas enregistré d'empreinte digitale sha.
  2. Assurez-vous que mon "e-mail d'assistance" est défini.
  3. Activez la méthode de connexion Google.

1 commentaires

Salut, merci pour votre contribution. Le problème est que le code catch n'est jamais atteint.



2
votes

Procédez comme suit dans votre méthode

 /// Attempts to sign in a previously authenticated user without interaction.
  ///
  /// Returned Future resolves to an instance of [GoogleSignInAccount] for a
  /// successful sign in or `null` if there is no previously authenticated user.
  /// Use [signIn] method to trigger interactive sign in process.
  ///
  /// Authentication process is triggered only if there is no currently signed in
  /// user (that is when `currentUser == null`), otherwise this method returns
  /// a Future which resolves to the same user instance.
  ///
  /// Re-authentication can be triggered only after [signOut] or [disconnect].
  ///
  /// When [suppressErrors] is set to `false` and an error occurred during sign in
  /// returned Future completes with [PlatformException] whose `code` can be
  /// either [kSignInRequiredError] (when there is no authenticated user) or
  /// [kSignInFailedError] (when an unknown error occurred).
  Future<GoogleSignInAccount> signInSilently({bool suppressErrors = true}) {
    final Future<GoogleSignInAccount> result = _addMethodCall('signInSilently');
    if (suppressErrors) {
      return result.catchError((dynamic _) => null);
    }
    return result;
  }

Par défaut suppressErrors = true en supprimant les messages d'erreur que vous souhaitez intercepter.

En regardant le code source

La méthode SignInSilently est utilisé pour supprimer les messages d'erreur, évitant ainsi de lever l'exception que vous souhaitez intercepter.

D'après la documentation de cette méthode:

  /// When [suppressErrors] is set to `false` and an error occurred during sign in
  /// returned Future completes with [PlatformException] whose `code` can be
  /// either [kSignInRequiredError] (when there is no authenticated user) or
  /// [kSignInFailedError] (when an unknown error occurred).

Méthode complète

try {
    result = await GoogleSignIn().signInSilently(suppressErrors: false).catchError((x) {
      print(x);
    });
  } catch (e) {
    print(e);
  }

Référence


1 commentaires

Salut, merci pour votre contribution. Le problème est que l'erreur est lancée et qu'elle n'est tout simplement pas interceptée, alors ma fonction qui encapsule le code signInSilently renvoie un type _TypeError et n'exécute pas le code dans le bloc catch.



0
votes

Le bloc catchError est en fait atteint si vous utilisez suppressErrors = false
Essayez le code suivant et voyez ce qu'il imprime sur votre console.

result = await GoogleSignIn().signInSilently(suppressErrors: false).
  catchError((x) {
    print("inside catchError");
  });


1 commentaires

Merci, cela m'a aidé sur mon chemin car j'ai supprimé la ligne print (e)!



0
votes

Le problème est la ligne print (e); dans l'instruction catch. «e» n'est pas une chaîne donc une erreur se produit. Je ne sais pas pourquoi mais aucun point d'arrêt n'est atteint dans l'instruction catch pour cette erreur et aucune erreur n'est sortie vers la console. Si je mets une déclaration catch autour d'une fonction qui appelle le code de connexion, c'est-à-dire

try {
  result = await GoogleSignIn().signInSilently().catchError((e) {
    print(e.toString());
  });
} catch (e) {
  print(e.toString());
}

Alors j'obtiens un message d'erreur

Unhandled Exception: type '_TypeError' is not a subtype of type 'String'

Donc pour être clair, le code correct serait

void tryLogin(){
  try{
    myLoginLogic();
  } catch(e) {
    print(e);
  }
}

Pourquoi le code ne casse pas en cas d'erreur et aucun message n'est écrit sur la console pour la fonction d'origine Je ne le fais pas connaître. Ce que je ne comprends pas non plus, c'est pourquoi, même lorsque l'instruction catch est écrite sans erreur, en mode débogage, le code se brise sur la ligne signInSilently () .

p>


0 commentaires