firebase - 检索 SafetyNet token : 7, Flutter 时出现问题 - Firebase Phone_Auth

标签 firebase flutter firebase-authentication flutter-dependencies

我正在尝试实现 firebase 提供的 phone_auth,但它会抛出这些错误并在调用 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.
这是我的代码,当从用户那里获取电话号码后按下按钮时,我正在调用 verifyPhoneNumber()。
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,
));
}
这已经困扰了我近 3 天了。
任何帮助将不胜感激。

最佳答案

确保您已启用 Android Device Check API并且您已将 SHA256 添加到 Firebase 控制台。

关于firebase - 检索 SafetyNet token : 7, Flutter 时出现问题 - Firebase Phone_Auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64748170/

相关文章:

android - 用户是否可以在不安装您的应用程序的情况下通过 Firebase Auth 注册新帐户?

flutter - 在 Flutter 中,什么时候你更喜欢 `Widget` 继承而不是组合?

android - 成功重新加载后,Firebase AuthInstance.currentUser 为空

angular - Safari、Iphone 上的 Firebase 电话身份验证问题

javascript - 如何使用 Firebase 实时数据库和 React Native 上传图像/文件?

java - Firebase 获取条目的当前值

javascript - 从多个用户列表中选择特定用户后,如何导航到特定用户的个人资料页面?

flutter - 如何检查 Dart List 是否包含某个对象实例?

flutter - 尝试使用 Flutter 布局修复底部溢出

Firebase 3.0 Auth Facebook 内部错误?