Problema al recuperar el token de SafetyNet: 7, Flutter - Firebase Phone_Auth

Nov 09 2020

Estoy tratando de implementar el phone_auth proporcionado por firebase, pero arroja estos errores y fuerza el cierre cuando se llama a FirebaseAuth.instance.verifyPhoneNumber ().

E/zza     (12829): Problem retrieving SafetyNet Token: 7: 
W/ActivityThread(12829): handleWindowVisibility: no activity for token android.os.BinderProxy@28af8e3
W/mesecure.wmsap(12829): Accessing hidden method Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I (greylist, linking, allowed)
W/mesecure.wmsap(12829): Accessing hidden method Lsun/misc/Unsafe;- 
>getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
W/mesecure.wmsap(12829): Accessing hidden method Lsun/misc/Unsafe;- 
>putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
W/mesecure.wmsap(12829): Accessing hidden method Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V (greylist, linking, allowed)
W/mesecure.wmsap(12829): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed)
W/mesecure.wmsap(12829): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)
.
.
D/DecorView(12829): onWindowFocusChangedFromViewRoot hasFocus: true, DecorView@5ad02b8[RecaptchaActivity]
D/AndroidRuntime(12829): Shutting down VM
E/AndroidRuntime(12829): FATAL EXCEPTION: main
E/AndroidRuntime(12829): Process: com.webmesecure.wmsapp, PID: 12829
E/AndroidRuntime(12829): java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder; E/AndroidRuntime(12829): at com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase-auth@@20.0.0:92) E/AndroidRuntime(12829): at com.google.firebase.auth.api.internal.zzeq.zza(com.google.firebase:firebase-auth@@20.0.0:79) E/AndroidRuntime(12829): at com.google.firebase.auth.api.internal.zzeq.onPostExecute(com.google.firebase:firebase-auth@@20.0.0:88) E/AndroidRuntime(12829): at android.os.AsyncTask.finish(AsyncTask.java:755) E/AndroidRuntime(12829): at android.os.AsyncTask.access$900(AsyncTask.java:192)
E/AndroidRuntime(12829):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772) E/AndroidRuntime(12829): at android.os.Handler.dispatchMessage(Handler.java:107) E/AndroidRuntime(12829): at android.os.Looper.loop(Looper.java:214) E/AndroidRuntime(12829): at android.app.ActivityThread.main(ActivityThread.java:7682) E/AndroidRuntime(12829): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(12829): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
E/AndroidRuntime(12829):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
E/AndroidRuntime(12829): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.webmesecure.wmsapp-q6bDzrSR-XHplgXhRtWLoQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.webmesecure.wmsapp-q6bDzrSR-XHplgXhRtWLoQ==/lib/arm64, /data/app/com.webmesecure.wmsapp-q6bDzrSR-XHplgXhRtWLoQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]
E/AndroidRuntime(12829):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
E/AndroidRuntime(12829):    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(12829):    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(12829):    ... 12 more
I/Process (12829): Sending signal. PID: 12829 SIG: 9
Lost connection to device.

Este es mi código, estoy llamando a verifyPhoneNumber () cuando se presiona un botón después de obtener el número de teléfono del usuario.

String phoneNumber, verificationId;
String otp, authStatus = "";

Future<void> verifyPhoneNumber(BuildContext context) async {
await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: phoneNumber,
  timeout: const Duration(seconds: 15),
  verificationCompleted: (AuthCredential authCredential) {
    setState(() {
      authStatus = "Your account is successfully verified";
    });
  },
  verificationFailed: (FirebaseAuthException authException) {
    setState(() {
      authStatus = "Authentication failed";
    });
  },
  codeSent: (String verId, [int forceCodeResent]) {
    verificationId = verId;
    setState(() {
      authStatus = "OTP has been successfully send";
    });
    otpDialogBox(context).then((value) {});
  },
  codeAutoRetrievalTimeout: (String verId) {
    verificationId = verId;
    setState(() {
      authStatus = "TIMEOUT";
    });
  },
);
}

Future<void> verifyPhoneNumber(BuildContext context) async {
await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: phoneNumber,
  timeout: const Duration(seconds: 15),
  verificationCompleted: (AuthCredential authCredential) {
    setState(() {
      authStatus = "Your account is successfully verified";
    });
  },
  verificationFailed: (FirebaseAuthException authException) {
    setState(() {
      authStatus = "Authentication failed";
    });
  },
  codeSent: (String verId, [int forceCodeResent]) {
    verificationId = verId;
    setState(() {
      authStatus = "OTP has been successfully send";
    });
    otpDialogBox(context).then((value) {});
  },
  codeAutoRetrievalTimeout: (String verId) {
    verificationId = verId;
    setState(() {
      authStatus = "TIMEOUT";
    });
  },
);
}

otpDialogBox(BuildContext context) {
return showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return new AlertDialog(
        title: Text('Enter your OTP'),
        content: Padding(
          padding: const EdgeInsets.all(8.0),
          child: TextFormField(
            decoration: InputDecoration(
              border: new OutlineInputBorder(
                borderRadius: const BorderRadius.all(
                  const Radius.circular(30),
                ),
              ),
            ),
            onChanged: (value) {
              otp = value;
            },
          ),
        ),
        contentPadding: EdgeInsets.all(10.0),
        actions: <Widget>[
          FlatButton(
            onPressed: () {
              Navigator.of(context).pop();
              signIn(otp);
            },
            child: Text(
              'Submit',
            ),
          ),
        ],
      );
    });
}

Future<void> signIn(String otp) async {
await FirebaseAuth.instance
    .signInWithCredential(PhoneAuthProvider.credential(
  verificationId: verificationId,
  smsCode: otp,
));
}

Esto me ha estado molestando durante casi 3 días. Cualquier ayuda será muy apreciada.

Respuestas

3 ZahariaLucian Nov 13 2020 at 11:38

Estoy teniendo el mismo problema El error son sus dependencias en la aplicación / build.gradle en mi caso agregué algunas dependencias adicionales de Google Analytics y después de eliminar que funcionó

6 actuallymicah Nov 10 2020 at 22:32

Asegúrese de haber habilitado la API de verificación de dispositivos Android y de haber agregado su SHA256 a la consola de Firebase.

umar_baloch Dec 23 2020 at 20:03

En mi caso, agregué la clave SHA256 a mi proyecto de Firebase y volví a instalar google-service.json. Y también habilité el dispositivo Android Check APi.