android - FLutter 中的 Firebase 电话 OTP 身份验证
问题描述
我正在构建一个涉及使用 Firebase 进行电话 OTP 身份验证的 Flutter 应用程序,它给出了以下错误。我在这里感到震惊,不知道如何调试。
2021-01-29 14:07:36.021 32521-32521/com.example.flutter_test1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.flutter_test1, PID: 32521
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder;
at com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase-auth@@20.0.1:13)
at com.google.android.gms.internal.firebase-auth-api.zzth.zzb(com.google.firebase:firebase-auth@@20.0.1:7)
at com.google.android.gms.internal.firebase-auth-api.zzth.onPostExecute(Unknown Source:2)
at android.os.AsyncTask.finish(AsyncTask.java:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7397)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.example.flutter_test1-VMY7lKsstWxY71zd6Q5xmA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.flutter_test1-VMY7lKsstWxY71zd6Q5xmA==/lib/arm64, /data/app/com.example.flutter_test1-VMY7lKsstWxY71zd6Q5xmA==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase-auth@@20.0.1:13)
at com.google.android.gms.internal.firebase-auth-api.zzth.zzb(com.google.firebase:firebase-auth@@20.0.1:7)
at com.google.android.gms.internal.firebase-auth-api.zzth.onPostExecute(Unknown Source:2)
at android.os.AsyncTask.finish(AsyncTask.java:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7397)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
这是我发送 OTP 的功能:
Future verifyPhoneNumber(BuildContext context) async{
FirebaseAuth auth = FirebaseAuth.instance;
final PhoneVerificationCompleted verificationCompleted = (PhoneAuthCredential phoneAuthCredential)
async {
await auth.signInWithCredential(phoneAuthCredential);
};
PhoneVerificationFailed verificationFailed =
(FirebaseAuthException authException){
print("FAILED AUTH $authException");
};
//When code is Sent
PhoneCodeSent codeSent =
(String verificationId, [int forceSendingToken]) async {
String smsCode = '';
PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential(verificationId:
verificationId, smsCode: smsCode);
await auth.signInWithCredential(phoneAuthCredential);
};
PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
(String verificationId) {
_verificationId = verificationId;
};
try {
await auth.verifyPhoneNumber(
phoneNumber: _mobileNumberController.text,
timeout: const Duration(seconds: 10),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout,
);
}catch(e){
print("error is : $e");
}
在输入手机号码后,我在单击按钮时调用此 verifyPhoneNumber()。
解决方案
由于您仍在调试,因此您还需要实现 reCaptcha 支持,因为使用调试 sha 指纹时 Android 的安全网将失败。
在您的项目 -> android -> app -> build.gradle 中,将以下行添加到底部的依赖项中:
implementation "androidx.browser:browser:1.2.0"
所以你的 build.gradle 文件应该是这样的:
还要确保您的 minSdk 至少为 21
我在这里制作了有关您需要的一切的视频教程:https ://youtu.be/dTmgjPkBN58
推荐阅读
- python - if 和 else 函数中的无效语法 | 带变量的数学方程
- python - Python 从不同的 .py 文件调用导入的函数,但导入的函数在主文件中看不到其他导入的模块
- java - 使用正则表达式的 Spring 请求映射,如 javax.ws.rs
- android - 如何在 Android 的 AutoCompleteTextiView 上获得“完成”以显示和退出键盘?
- c# - 如何访问属于列表的类的成员属性
类型 - html - 最小化左列的宽度以专注于一行的右列 HTML / in-line CSS / Markdown
- python - 如何找到接近给定目标集的numpy数组的元素?
- python - 如何使用 pandas 加速这个嵌套循环?
- javascript - d3.randomInt 不是函数
- azure-devops - Azure devops Web 扩展 - 在 javascript 中访问服务连接