当前位置: 首页 > 知识库问答 >
问题:

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

轩辕源
2023-03-14

我通过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) 

共有3个答案

江育
2023-03-14

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

添加以下内容

implementation "androidx.browser:browser:1.2.0"

进入android/app/build。gradle解决了依赖项问题。

孟浩慨
2023-03-14

在新的Firebase auth版本中,他们进行了重大更改,如Recaptcha、用于人工验证的安全网。加入

实现“androidx.browser:browser:1.3.0”

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

Firebase报价"只有当SafetyNet不可用或您的设备未通过可疑检查时,才会触发reCAPTCHA流。尽管如此,您应该确保这两种方案都正常工作。"因此,要启用SafetyNet,请遵循以下步骤,或者您也可以访问Firebase Auth了解更多信息。

>

  • 转到谷歌云控制台,选择您的项目。

    单击导航菜单并选择API

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

    在Firebase项目设置中添加SHA 256。

    下载并替换项目中的最新html" target="_blank">google-services.json文件。

  • 顾嘉德
    2023-03-14

    实现androidx。浏览器:浏览器:1.2.0

    使用此依赖项来解决问题。

     类似资料:
    • keytool-list-v-keystore my_keystore.jks

    • 但我有以下错误 {“错误”:{“代码”:403,“消息”:“来自此ios客户端应用程序的请求被阻止。”,“错误”:[{“消息”:“来自此ios客户端应用程序的请求被阻止。”,“域”:“全局”,“原因”:“禁止”}],“状态”:“允许_Denied”}} 我已经实现了这一点,正如文档中所示。 下面是AppDelegate.swift的代码: 下面是ViewController.swift的代码:

    • 问题内容: 我正在尝试将我的电话号码与我的电子邮件密码身份验证相关联。所以我使用以下步骤建立我的注册: 用户输入电子邮件地址和密码。 然后我打电话 那么我需要将当前帐户与电话号码相关联,因此我正在使用 但是,我没有看到任何链接。在我的Firebase控制台中创建的2个帐户和当前用户的详细信息中只有电话号码。当我再次使用电子邮件和密码登录并检查用户详细信息时,电话号码不存在! 请在下面找到我的代码:

    • 电话身份验证失败,出现以下异常: PlatformException(ERROR_SESSION_EXPIRED,sms代码已过期。请重新发送验证码重试。,null) 但如果我使用的电话号码不同于我的电话号码,它就会起作用。我从play store中添加了SHA-1和SHA-256指纹到firebase,并替换了google-services.json。 这是我的代码:

    • 我将SHA1和SHA-256添加到firebase控制台&以下是build.gradle文件中的依赖项。

    • 假设我需要通过Firebase电话身份验证来验证用户。但不知何故,用户没有得到otp短信。那么firebase是否提供了通过接收呼叫获取OTP的选项?