在android中使用firebase电话身份验证时应用程序崩溃

Posted

技术标签:

【中文标题】在android中使用firebase电话身份验证时应用程序崩溃【英文标题】:app crash while using firebase phone Auth in android 【发布时间】:2021-04-26 14:34:59 【问题描述】:

这个问题与其他任何问题都不相似。我已经尝试了App crashes with firebase phone auth、error while getting firebase phone auth OTP的许多解决方案

android app crashes on firebase phone authentication,但没有任何效果。

在我的颤振应用程序(android)中,我正在使用 firebase 电话身份验证。当我调用 firebase 的“verifyPhoneNumber”方法发送 OTP 时,我的应用程序崩溃并退出,不留下任何错误消息。

这是我的代码

 final FirebaseAuth _auth = FirebaseAuth.instance;
 Future sendOTP(String mobNo, BuildContext context, UserData _userData) async 
 try 
  _auth.verifyPhoneNumber(
      phoneNumber: mobNo,
      verificationCompleted: (val) 
        print("verification completed val = $val");
      ,
      verificationFailed: (val) 
        print("verification failed val = $val");
      ,
      codeSent: (String verificationId, [int forceResendingToken]) 
        print("code sent to $mobNo");
        Navigator.pushNamed(context, '/get_otp', arguments: 
          'verificationId': verificationId,
          'UserData': _userData,
        );
      ,
      codeAutoRetrievalTimeout: (val) 
        print("code auto retrieval timeout val = $val");
      );
 catch (e) 
  print("auth error = $e");
  

我在我的 firebase 项目中添加了我的 SHA-1、SHA-256 证书,我尝试更改 firebase_auth、fiebase_core 的版本。但是,没有任何效果。我尝试在所有行中添加断点。到达此行时应用程序退出。 _auth.verifyPhoneNumber( 它没有进一步进行。 请帮我解决这个问题!!????

这是我的调试控制台日志

E/AndroidRuntime(17712): java.lang.NoClassDefFoundError: Failed resolution of: 
Landroidx/browser/customtabs/CustomTabsIntent$Builder;
E/AndroidRuntime(17712):    at                     
com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase- 
auth@@20.0.2:13)
E/AndroidRuntime(17712):    at com.google.android.gms.internal.firebase-auth- 
api.zztw.zzb(com.google.firebase:firebase-auth@@20.0.2:7)
E/AndroidRuntime(17712):    at com.google.android.gms.internal.firebase-auth- 
api.zztw.onPostExecute(Unknown Source:2)
E/AndroidRuntime(17712):    at android.os.AsyncTask.finish(AsyncTask.java:755)
E/AndroidRuntime(17712):    at android.os.AsyncTask.access$900(AsyncTask.java:192)
E/AndroidRuntime(17712):    at 
android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
E/AndroidRuntime(17712):    at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(17712):    at android.os.Looper.loop(Looper.java:228)
E/AndroidRuntime(17712):    at 
android.app.ActivityThread.main(ActivityThread.java:7826)
E/AndroidRuntime(17712):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(17712):    at 
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime(17712):    at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)
E/AndroidRuntime(17712): Caused by: java.lang.ClassNotFoundException: Didn't find 
class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip 
file "/data/app/com.creda.location_project- 
1fyv3Q9ek4vLZKMcRkGyDQ==/base.apk"],nativeLibraryDirectories= 
[/data/app/com.creda.location_project-1fyv3Q9ek4vLZKMcRkGyDQ==/lib/arm64, 
/data/app/com.creda.location_project-1fyv3Q9ek4vLZKMcRkGyDQ==/base.apk!/lib/arm64-v8a, 
/system/lib64, /system/product/lib64]]

【问题讨论】:

你在模拟器上试试这个吗?如果是,您可以使用真实设备进行验证吗? 试试这个:***.com/questions/64588281/… 我在真机上运行[realme 6 pro] 您可以尝试将实现 'androidx.browser:browser:1.3.0' 添加到 app/build.gradle 吗? 尝试从 gradle 卸载并重新安装。 【参考方案1】:

在新的 Firebase 身份验证版本(即 20.0.0)中,他们进行了重大更改,例如 Recaptcha、SafetyNet 以进行人工验证。要修复崩溃,您可以添加

实现“androidx.browser:browser:1.3.0”

这个依赖只修复了崩溃,但用户体验仍然看起来不太好,因为 firebase 会打开浏览器来验证 Recaptcha。

Firebase 引用“仅当 SafetyNet 不可用或您的设备未通过可疑检查时才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都正常工作。”因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问 Firebase Auth 了解更多信息。

    进入谷歌云控制台,选择你的项目。

    点击导航菜单并选择 APIs & services 然后选择 Dashboard 。

    点击启用api和服务,启用api“Android设备验证”。

    在 firebase 项目设置中添加 SHA 256。(同时调试和发布)

    在您的项目中下载并替换最新的 google-services.json 文件。

【讨论】:

【参考方案2】:

参考这个https://github.com/firebase/firebase-android-sdk/issues/2164

在 app/build.gradle 中添加“implementation 'androidx.browser:browser:1.3.0'”可以解决这个问题。 firebase_auth > version 20.0 需要此依赖项。 Firebase 没有在任何发行说明中提及这一新修改。或者可能只是一个错误,因为问题仍然存在。

【讨论】:

【参考方案3】:

是的,在我的 app/build.gradle 中添加“implementation 'androidx.browser:browser:1.3.0'”解决了这个问题。 firebase_auth > version 20.0 需要此依赖项。 Firebase 在任何发行说明中都没有提到这一新修改。无论如何,Stack Overflow 成员都做到了。感谢所有帮助我解决这个问题的人。 ?

【讨论】:

以上是关于在android中使用firebase电话身份验证时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 电话身份验证打开浏览器以在 Android 中进行重新验证

IOS:Firebase 电话身份验证在试飞中突然停止工作

Firebase 安全性和电话身份验证

Firebase 电话身份验证 (Flutter) 在某些 iOS 设备中不起作用

Firebase 电话身份验证未发送带有代码的短信

使用firebase电话身份验证验证失败