1
votes

Flutter firebase_auth signInWithCredential ne fonctionne pas sur Android

Les développeurs sont en train de développer une application pour iOS et Android qui utilise l'authentification par téléphone pour authentifier les utilisateurs, tout fonctionne bien sous iOS mais pour Android lorsque cette ligne est appelée, j'obtiens une erreur:

Future<String> signIn(String smsCode) async {

final AuthCredential credential = PhoneAuthProvider.getCredential(
  verificationId: verificationId,
  smsCode: smsCode,
);

final FirebaseUser user = await _auth.signInWithCredential(credential);


final FirebaseUser currentUser = await _auth.currentUser();
DatabaseReference user_db = pDatabase.reference().child("users");
DatabaseReference phone_id = pDatabase.reference().child("phone_id");

String uid = user.uid;
usersModel new_user = new usersModel();
new_user.phone=_phoneController.text;
new_user.email=_emailController.text;
new_user.name=_nameController.text;
user_db.child(uid).child("name").set(new_user.userName);
user_db.child(uid).child("phone").set(new_user.userPhone);
user_db.child(uid).child("email").set(new_user.userEmail);
phone_id.child(new_user.userPhone).set(uid);
assert(user.uid == currentUser.uid);
Navigator.pop(context);
Navigator.of(context).pushNamed('/Home');
return 'signInWithPhoneNumber succeeded: $user';
}

l'erreur:

E / flutter (14190): [ERREUR: flutter / shell / common / shell.cc (184)] Erreur Dart: exception non gérée: E / flutter (14190): PlatformException (erreur, référence nulle, nulle) E / flutter (14190): # 0 StandardMethodCodec.decodeEnvelope (package: flutter / src / services / message_codecs.dart: 551: 7) E / flutter (14190): # 1 MethodChannel.invokeMethod (package: flutter / src / services / platform_channel.dart: 292: 18) E / scintillement (14190): E / flutter (14190): # 2 FirebaseAuth.signInWithCredential (fichier: ///Users/pocketcarage/Desktop/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.8.0+1/lib/src /firebase_auth.dart:211:54) E / scintillement (14190): E / flutter (14190): # 3 _RegisterState.signIn (paquet: pocketcarage_official / UI / register.dart: 92: 43) E / scintillement (14190): E / flutter (14190): # 4 _RegisterState.smsCodeDialog .. (package: pocketcarage_official / UI / register.dart: 77: 23) E / flutter (14190): # 5 _InkResponseState._handleTap (package: flutter / src / material / ink_well.dart: 507: 14) E / flutter (14190): # 6 _InkResponseState.build. (paquet: flutter / src / material / ink_well.dart: 562: 30) E / flutter (14190): # 7 GestureRecognizer.invokeCallback (package: flutter / src / gestures / Recognizer.dart: 102: 24) E / flutter (14190): # 8 TapGestureRecognizer._checkUp (package: flutter / src / gestures / tap.dart: 242: 9) E / flutter (14190): # 9 TapGestureRecognizer.handlePrimaryPointer (package: flutter / src / gestures / tap.dart: 175: 7) E / flutter (14190): # 10 PrimaryPointerGestureRecognizer.handleEvent (package: flutter / src / gestures / Recognizer.dart: 315: 9) E / flutter (14190): # 11 PointerRouter._dispatch (paquet: flutter / src / gestures / pointer_router.dart: 73: 12) E / flutter (14190): # 12 PointerRouter.route (paquet: flutter / src / gestures / pointer_router.dart: 101: 11) E / flutter (14190): # 13 _WidgetsFlutterBinding & BindingBase & GestureBinding.handleEvent (package: flutter / src / gestures / binding.dart: 180: 19) E / flutter (14190): # 14 _WidgetsFlutterBinding & BindingBase & GestureBinding.dispatchEvent (package: flutter / src / gestures / binding.dart: 158: 22) E / flutter (14190): # 15 _WidgetsFlutterBinding & BindingBase & GestureBinding._handlePointerEvent (package: flutter / src / gestures / binding.dart: 138: 7) E / flutter (14190): # 16 _WidgetsFlutterBinding & BindingBase & GestureBinding._flushPointerEventQueue (package: flutter / src / gestures / binding.dart: 101: 7) E / flutter (14190): # 17 _WidgetsFlutterBinding & BindingBase & GestureBinding._handlePointerDataPacket (package: flutter / src / gestures / binding.dart: 85: 7) E / flutter (14190): # 18 _invoke1 (fléchette: ui / hooks.dart: 168: 13) E / flutter (14190): # 19 _dispatchPointerDataPacket (fléchette: ui / hooks.dart: 122: 5)

qui indique PlatformException (erreur, référence nulle, nulle) qu'il existe une référence nulle bien que cela fonctionne à 100% sur iPhone. J'ai cherché et j'ai trouvé qu'il y avait des problèmes avec les plugins de flutter et qu'une solution migrerait vers androidx et j'ai essayé mais je continue à obtenir le compilesdk requis au moins 28 et je l'ai déjà changé que dois-je faire?

this est le code qui est appelé

    final FirebaseUser user = await _auth.signInWithCredential(credential);


0 commentaires

4 Réponses :


4
votes

MISE À JOUR: après avoir apporté les modifications suivantes à mon projet, la méthode de connexion semble fonctionner:

Dans pubspec.yaml: a mis à jour la version sdk de "> = 2.0.0-dev.68.0 <3.0.0" à "> = 2.1.0 <3.0.0"

Dans android / build.gradle: a mis à jour la dépendance pour com.android.tools.build:gradle:3.3.1 pour utiliser la version 3.2.1 a mis à jour la dépendance pour com.google.gms: google-services: 4.0.1 pour utiliser la version 4.2.0

De plus, comme il y a eu un problème de gradle avec le multidexing après ces modifications, j'ai mis à jour le fichier android / app / build.gradle pour avoir une propriété "multiDexEnabled true" sous defaultConfig et ajouté "implementation" com.android.support : multidex: 1.0.3 '"aux buildTypes


OP:

Quelqu'un d'autre a remarqué le même problème et a déposé un problème sur le référentiel du package firebase_auth Dart: https://github.com/flutter/flutter/issues/28057


1 commentaires

J'ai effectué les modifications, mais j'obtiens toujours l'erreur lorsque j'entre OTP manuellement.



3
votes

J'ai le même problème, après avoir cherché une journée entière, je résous le problème, le problème est dans la dépendance, veuillez ajouter la dépendance suivante

google_sign_in: ^ 4.0.1 + 1 firebase_auth: ^ 0.8.1 + 1


0 commentaires

4
votes

J'ai eu le même problème. Cela a fonctionné pour moi.

(await _auth.signInWithCredential(credential)).user;


0 commentaires

0
votes
try {
      final AuthCredential credential = PhoneAuthProvider.getCredential(
        verificationId: verificationId,
        smsCode: smsOTP,
      );
      final FirebaseUser user =
          (await _auth.signInWithCredential(credential)).user;
} catch (e) {
      print("Error: $e");
    }

0 commentaires