Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
原因:java.lang.ClassNotFoundException:Didn';在Firebase电话身份验证中找不到类_Java_Android_Firebase Authentication - Fatal编程技术网

原因:java.lang.ClassNotFoundException:Didn';在Firebase电话身份验证中找不到类

原因:java.lang.ClassNotFoundException:Didn';在Firebase电话身份验证中找不到类,java,android,firebase-authentication,Java,Android,Firebase Authentication,我通过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.constraintl

我通过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) 
由于您是,该库决定了您使用的所有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')

实现
androidx.browser:browser:1.2.0


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

您需要将自定义选项卡添加到项目中,以便移动应用程序可以使用自定义选项卡访问浏览器

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

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

添加以下内容

implementation "androidx.browser:browser:1.2.0"

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

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

  • 通过单击启用AndroidDevice check API

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


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

实现“androidx.browser:browser:1.3.0”

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

Firebase Quote“只有当SafetyNet不可用或您的设备未通过可疑检查时,才会触发reCAPTCHA流。不过,您应该确保这两种情况都正常工作。” 因此,要启用SafetyNet,请执行以下步骤,或者您也可以访问 更多信息

  • 转到google云控制台,选择您的项目

  • 单击导航菜单,选择API和服务,然后选择Dashboard

  • 单击启用api和服务并启用api“ Android设备验证”

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

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


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


    实施平台('com.google.firebase:firebase bom:26.0.0')

    遵循以下步骤:

  • 在Google云控制台中,为您的项目启用

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

  • 转到Firebase控制台的第页,选择您的项目并为您的应用程序设置SHA-256指纹

  • 重新运行应用程序

  • 有关更多信息,请访问文档。

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


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

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

    implementation platform('com.google.firebase:firebase-bom:26.2.0')
    
    现在,在android的右侧添加您的SHA-256(渐变) studio->Tasks->android->signingReports)在项目设置中

    以下步骤非常重要

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


    在这里,点击“查看所有内容以获取“Android设备验证”选项卡。

    你不能在模拟器上进行测试,你在使用真实的手机吗?如果您想从仿真器进行测试,请检查此项

    在build.gradle文件中添加此依赖项。。。
    实现'com.android.support:customtabs:28.0.0-alpha3'

    我添加了这个,但现在它在输入OTP代码时要求使用浏览器,这对用户不好。我曾经在
    com.google.firebase:firebase auth
    中使用早期版本(20.0.0之前),而且它不要求使用浏览器。如果您看到firebase phone auth更新文档,它说首先您需要通过浏览器重新验证。@user1801605您需要在Google云控制台中为您的项目启用Android DeviceCheck API,请按照此处的指南操作:如果未启用此API,则auth现在默认为reCAPTCHA验证,以检查用户是否为真人(这需要浏览器以及Tazulislam提到的导入)。对于以前的版本,不要求这样做,这是真的,但我想谷歌想提高这个身份验证系统的安全性。如果我启用Android DeviceCheck API,这会影响仍然使用旧版本(20.0.0之前)的用户吗?@ManuelRego启用了Android DeviceCheck API,验证码仍然打开,需要更多的配置吗?这解决了我的问题,我的项目完全是android。我也在使用firebase bom,所以我认为这应该是公认的答案。谢谢,兄弟,这是android Java中的工作。这对我来说很有用。使用最新版本。这不会解决问题problem@Frankvan Puffelen这并不能解决问题,firebase发行说明声明这已修复,并将回退到设备中存在的任何浏览器,但这并没有发生在发行说明中,他们声称这是一个错误,并已修复,它将回退到存在的任何浏览器!,我的应用程序在最新版本上崩溃了auth@Yadu在添加实现“androidx.browser:browser:1.2.0”Hi@ItayFeldman后修复了我的崩溃。如果您的项目已连接到firebase,则只需打开谷歌云控制台并从下拉列表中选择您的项目,您无需执行任何额外步骤。启用“Android设备验证”