【问题标题】:Caused by: java.lang.ClassNotFoundException: Didn't find class in Firebase Phone Authentication原因:java.lang.ClassNotFoundException:在 Firebase 电话身份验证中找不到类
【发布时间】:2021-02-11 17:30:41
【问题描述】:

我正在通过 Firebase 在 Android Studio 中使用电话身份验证, 我在 Firebase 项目中启用了电话登录并添加了 SHA-1 和 SHA-256。 这是我所有的依赖项:

dependencies {

implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.13.1'
implementation 'com.hbb20:ccp:2.4.0'
implementation 'com.google.firebase:firebase-auth:20.0.0'
implementation 'com.google.firebase:firebase-analytics'
implementation platform('com.google.firebase:firebase-bom:26.0.0')
implementation 'com.google.android.gms:play-services-safetynet:17.0.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

这是错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.securechat, PID: 24159
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:193)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.example.securechat-GUvvd01g4yeRO2eP4pBFfA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.securechat-GUvvd01g4yeRO2eP4pBFfA==/lib/arm64, /system/lib64, /vendor/lib64]]
    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:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6692) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

【问题讨论】:

    标签: java android firebase-authentication


    【解决方案1】:

    在新的 Firebase 身份验证版本中,他们进行了重大更改,例如 Recaptcha、SafetyNet 以进行人工验证。通过添加

    实现“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. 在您的项目中下载并替换最新的 google-services.json 文件。

    【讨论】:

    • 在发行说明中他们声称这是一个错误并且已修复,它会回退到任何存在的浏览器!,我的应用程序只是在最新的身份验证时崩溃
    • @Yadu 添加实现“androidx.browser:browser:1.2.0”后我的崩溃已修复
    • 嗨@ItayFeldman 如果您的项目已连接到firebase,则只需打开谷歌云控制台并从下拉列表中选择您的项目,您无需执行任何额外步骤。
    • 启用“Android 设备验证”并将 SHA256 添加到 firebase 项目是我的解决方案,非常感谢。
    • 这应该是公认的答案。非常感谢@HimanshiThakur。
    【解决方案2】:

    在你的 build.gradle 文件中添加这个依赖... 实现 'com.android.support:customtabs:28.0.0-alpha3'

    【讨论】:

      【解决方案3】:

      你不能在模拟器上测试,你用的是真手机吗?如果您想通过模拟器进行测试,请查看https://firebase.flutter.dev/docs/auth/phone/#testing

      【讨论】:

        【解决方案4】:

        如果有人来自react-native,在四处搜索后我找到了这个临时解决方案。

        添加以下内容

        implementation "androidx.browser:browser:1.2.0"
        

        进入android/app/build.gradle 依赖已解决问题。

        【讨论】:

        • 这解决了我的问题,我的项目是严格的 android。我也在使用 firebase bom,所以我认为这应该是公认的答案。
        • 这对我有用。使用最新版本。
        【解决方案5】:

        在你的 build.gradle 文件中添加这个依赖...

        implementation platform('com.google.firebase:firebase-bom:26.2.0')
        

        现在,在您的项目设置中添加您的 SHA-256(Gradle 在您右侧的 android studio->Tasks->android->signingReports)。

        以下步骤非常重要...

        • 转到Google Cloud 并选择您的项目。
        • 从左侧菜单中选择“API 和服务”,然后选择仪表板。
        • 点击“启用 api 和服务”,然后启用 api“Android 设备验证”。

        在此单击“查看全部”以获取“Android 设备验证”选项卡。

        【讨论】:

          【解决方案6】:

          只需添加这一行: 实现“androidx.browser:browser:1.3.0”

          它肯定会解决你的问题。确保还在 Firebase 中添加 SHA-256。

          【讨论】:

          • 欢迎来到 Stack Overflow。上面已经给出了这个答案。请给出能带来新信息的答案。
          【解决方案7】:

          按照以下步骤操作:

          1. 在 Google Cloud 控制台中,为您的项目启用 Android DeviceCheck API

          2. 获取以下框架的 SHA-256 指纹:

          3. 转到 Firebase 控制台的 Settings Page,选择您的项目并为您的应用设置 SHA-256 指纹。

          4. 重新运行应用程序。

          欲了解更多信息,请访问Enable app verification doc。

          【讨论】:

            【解决方案8】:

            同样的事情也发生在我身上。我所做的基本上删除了以下行-

            implementation platform('com.google.firebase:firebase-bom:26.0.0')

            【讨论】:

              【解决方案9】:

              伙计们,我找到了一种方法,只需按照步骤操作即可。 在 Firebase 的“电话验证文档”中,您会找到选项(2.启用应用验证) 请按以下步骤操作:

              • 通过点击启用 AndroidDevice 检查 API。

              • 然后添加您的 SHA-256。 (android studio->Tasks->android->signingReports.右侧的Gradle)

              您将在那里为您的应用获取 SHA-256。

              【讨论】:

                【解决方案10】:

                您需要将 CustomTabs 添加到您的项目中,以便您的移动应用可以使用 CustomTabs 访问浏览器

                implementation 'com.android.support:customtabs:28.0.0'
                

                【讨论】:

                  【解决方案11】:

                  实现androidx.browser:browser:1.2.0

                  使用这个依赖来解决问题。

                  【讨论】:

                  • 我添加了这个,但是现在输入OTP代码时要求浏览器,这对用户不利。 com.google.firebase:firebase-auth我以前用的是以前的版本(20.0.0之前),它不要求浏览器。
                  • 如果您看到 firebase phone auth 更新文档,并且它说首先您需要通过浏览器进行 reCAPTCHA 验证。
                  • @user1801605 您需要在 Google Cloud Console 中为您的项目启用 Android DeviceCheck API,请按照此处的指南进行操作:firebase.google.com/docs/auth/android/phone-auth 如果未启用此 API,则身份验证现在默认使用 reCAPTCHA 验证来检查如果用户是真实的人(需要浏览器,以及TaizulIslam提到的导入)至于以前的版本不要求这个,那是真的,但我想谷歌想提高这个身份验证系统的安全性。
                  • 如果我启用 Android DeviceCheck API,是否会影响仍在使用旧版本(20.0.0 之前)的用户?
                  • @ManuelRego 启用了Android DeviceCheck API,验证码还在,还需要配置吗?
                  【解决方案12】:

                  由于您是 using the firebase-bom dependency那个 库决定了您使用的所有 Firebase SDK 的版本。这意味着您不应在 gradle 文件中指定任何其他 Firebase SDK 的版本号。

                  所以从firebase-auth中删除版本号:

                  implementation 'com.google.firebase:firebase-auth'
                  implementation 'com.google.firebase:firebase-analytics'
                  implementation platform('com.google.firebase:firebase-bom:26.0.0')
                  

                  【讨论】:

                  • @Frank van Puffelen 这并不能解决问题,firebase 发行说明指出这是固定的,并将回退到设备中存在的任何浏览器,但它不会发生
                  猜你喜欢
                  • 2021-07-13
                  • 1970-01-01
                  • 2021-03-10
                  • 2021-06-10
                  • 2018-12-14
                  • 2020-01-28
                  • 1970-01-01
                  相关资源
                  最近更新 更多