原因:java.lang.ClassNotFoundException:在 Firebase 电话身份验证中未找到类

问题描述 投票:0回答:12

我通过 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
12个回答
33
投票

实施

androidx.browser:browser:1.2.0

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


22
投票

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

实现“androidx.browser:浏览器:1.3.0”

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

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

  1. 进入谷歌云控制台,选择您的项目。

  2. 单击导航菜单并选择 API 和服务,然后选择仪表板。

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

  4. 在firebase项目设置中添加SHA 256。(调试和 释放两者)

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


15
投票

如果有人来自

react-native
,在四处搜寻后我找到了这个临时解决方案。

添加以下内容

implementation "androidx.browser:browser:1.2.0"

进入

android/app/build.gradle
依赖关系解决了问题。


3
投票

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

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

3
投票

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

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


3
投票

将此依赖项添加到您的“build.gradle”文件中...

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

2
投票

由于您使用

firebase-bom
依赖项,因此 that 库决定了您使用的所有 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')

2
投票

请按照以下步骤操作:

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

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

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

  4. 重新运行应用程序。

有关更多信息,请访问启用应用程序验证文档。


0
投票

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

  • 点击启用 AndroidDevice check API。

  • 然后添加您的 SHA-256。 (Gradle 在您的右侧

    android studio->Tasks->android->signingReports.

您将获得适用于您的应用程序的 SHA-256。


0
投票

在您的 build.gradle 文件中添加此依赖项...

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

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

以下步骤非常重要...

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

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


0
投票

模拟器无法测试,你用的是真机吗?如果您想从模拟器进行测试,请查看此内容https://firebase.flutter.dev/docs/auth/phone/#testing


0
投票

只需添加这一行:

implementation "androidx.browser:browser:1.3.0"

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

© www.soinside.com 2019 - 2024. All rights reserved.