【问题标题】:Error while doing phone authentication on firebase在 Firebase 上进行电话身份验证时出错
【发布时间】:2020-10-30 08:39:13
【问题描述】:

在 Firebase 上进行电话号码身份验证时,我遇到了此错误消息而崩溃。请帮忙。

com.russvkm.chathut 是我的包名

E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.russvkm.chathut, PID: 24323
        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.0:92)
            at com.google.firebase.auth.api.internal.zzeq.zza(com.google.firebase:firebase-auth@@20.0.0:79)
            at com.google.firebase.auth.api.internal.zzeq.onPostExecute(com.google.firebase:firebase-auth@@20.0.0:88)
            at android.os.AsyncTask.finish(AsyncTask.java:695)
            at android.os.AsyncTask.access$600(AsyncTask.java:180)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:201)
            at android.app.ActivityThread.main(ActivityThread.java:6826)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.russvkm.chathut-22XI8m2uPLL7Q6CgxXHPiw==/base.apk"],nativeLibraryDirectories=[/data/app/com.russvkm.chathut-22XI8m2uPLL7Q6CgxXHPiw==/lib/arm, /system/lib, /vendor/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
            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.0:92) 
            at com.google.firebase.auth.api.internal.zzeq.zza(com.google.firebase:firebase-auth@@20.0.0:79) 
            at com.google.firebase.auth.api.internal.zzeq.onPostExecute(com.google.firebase:firebase-auth@@20.0.0:88) 
            at android.os.AsyncTask.finish(AsyncTask.java:695) 
            at android.os.AsyncTask.access$600(AsyncTask.java:180) 
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712) 
            at android.os.Handler.dispatchMessage(Handler.java:106) 
            at android.os.Looper.loop(Looper.java:201) 
            at android.app.ActivityThread.main(ActivityThread.java:6826) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 
    I/Process: Sending signal. PID: 24323 SIG: 9

我的应用程序与 firebase 服务器通信良好,因为我在进行电子邮件身份验证时没有发现任何错误或崩溃。

我正在使用以下方法进行身份验证

PhoneAuthProvider.verifyPhoneNumber(
                PhoneAuthOptions.newBuilder(mAuth)
                        .setPhoneNumber(phoneNumber)
                        .setActivity(this)
                        .setTimeout(60,TimeUnit.SECONDS)
                        .setCallbacks(object:PhoneAuthProvider.OnVerificationStateChangedCallbacks(){
                            override fun onVerificationCompleted(credential:PhoneAuthCredential) {
                                dismissDialog()
                                val smsCode=credential.smsCode
                                Log.i("SMS code",smsCode!!)
                                signInWithPhoneAuthCredential(credential)
                            }

                            override fun onVerificationFailed(p0: FirebaseException) {
                                Toast.makeText(this@Register,p0.message,Toast.LENGTH_SHORT).show()
                            }
                            override fun onCodeSent(verificationId: String, token: PhoneAuthProvider.ForceResendingToken) {
                                super.onCodeSent(verificationId, token)
                                numberLinearLayout.visibility=View.GONE
                                otpLinearLayout.visibility=View.VISIBLE
                                storedVerificationId=verificationId
                                resendToken=token
                                dismissDialog()
                            }
                        })
                        .build()
               )

程序没有执行 otpSent 方法,它在没有发送 otp 的情况下崩溃。

【问题讨论】:

  • 你能用你的依赖编辑你的问题吗?
  • 如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。请回复@AlexMamo
  • 谢谢哥们,问题已经解决了。解决方案是实现 'androidx.browser:browser:1.2.0'

标签: android firebase firebase-authentication


【解决方案1】:

Firebase 身份验证进行了一些重大更改,例如用于人工验证的 Recaptcha。它需要浏览器进行验证,因此添加以下 depen。并阅读有关更改refer me

    implementation 'androidx.browser:browser:1.2.0'

更新: 如果您想避免人工验证,您需要在 Google Cloud Console 中为您的 Firebase 项目 refer this 启用安全网。

【讨论】:

    【解决方案2】:

    通过添加

    实现“androidx.browser:browser:1.3.0”

    它解决了我的问题,但用户体验不佳,因为 firebase 正在打开浏览器来验证 Recaptcha,这在应用流程中看起来很奇怪。

    Firebase 引用“仅当 SafetyNet 不可用或您的设备未通过可疑检查时才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都正常工作。”

    因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问 Firebase Auth 了解更多信息。

    1.转到谷歌云控制台,选择你的项目。

    2.点击导航菜单,选择APIs & services,然后选择Dashboard。

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

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

    5.再次测试您的应用。(测试使用真实设备而不是模拟器)

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 2021-06-16
      • 2018-07-03
      • 2021-07-13
      • 1970-01-01
      • 2018-01-19
      • 2018-02-21
      相关资源
      最近更新 更多