简体   繁体   中英

Caused by: java.lang.ClassNotFoundException: Didn't find class in Firebase Phone Authentication

I'm using Phone Authentication in Android Studio via Firebase, I Enabled Phone SignIn and Add SHA-1 And SHA-256 in Firebase Project. here is all of my dependencies :

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'
}

and here is the error logs:

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) 

implementation androidx.browser:browser:1.2.0

Use this dependency to solve the problem.

In new Firebase auth version,they've made major changes like Recaptcha , SafetyNet for human verification. By adding

implementation "androidx.browser:browser:1.3.0"

it solved my problem but user experience was not good because firebase was opening browser to verify reCAPTCHA and that was looking odd in app flow.

Firebase Quote " The reCAPTCHA flow will only be triggered when SafetyNet is unavailable or your device does not pass suspicion checks. Nonetheless, you should ensure that both scenarios are working correctly. " So to enable SafetyNet follow below steps or you can also visit Firebase Auth for more info.

  1. Go to google cloud console , select your project .

  2. Click on navigation menu and select APis & services and then select Dashboard .

  3. Click on enable api and services and enable api " Android Device Verification".

  4. Add SHA 256 in firebase project settings.(debug and release both)

  5. Download and replace the latest google-services.json file in your project.

If someone coming from react-native , after searching all around I found this temporary solution.

Adding the below

implementation "androidx.browser:browser:1.2.0"

into android/app/build.gradle dependencies solved issue.

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

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

Same thing happened with me. What I did basically removed the following line-

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

Since you're using the firebase-bom dependency , that library determines the version of all Firebase SDKs you use. This means that you should not specify version numbers for any other Firebase SDKs in your gradle file.

So remove the version number from firebase-auth :

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

Follow the below steps:

  1. In the Google Cloud console, enable the Android DeviceCheck API for your project.

  2. Get SHA-256 fingerprint for below frameworks:

  3. Go toSettings Page of the Firebase console, select your project and set the SHA-256 fingerprint for your app.

  4. Re-run the app.

For more info go to Enable app verification doc.

在您的 build.gradle 文件中添加此依赖项... implementation 'com.android.support:customtabs:28.0.0-alpha3'

Guys I have found a way just follow the steps. In "Phone Authentication docs" of firebase you will find the option (2.Enable app verification) Follow these steps:

  • Enable AndroidDevice check API by clicking on it.

  • Then add your SHA-256. (Gradle on your right side of android studio->Tasks->android->signingReports. )

You will get your SHA-256 there for your app.

Just add this line: implementation "androidx.browser:browser:1.3.0"

It will solve your problem definitely. Make sure to also add the SHA-256 in Firebase.

Add this dependency in your build.gradle file...

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

Now, Add your SHA-256 (Gradle on your right side of android studio->Tasks->android->signingReports) in settings of your project.

Following steps are very important...

  • Go to Google Cloud and select your project.
  • Select 'APis & services' from left hand side menu and then select Dashboard.
  • Click on 'Enable api and services' and then enable api 'Android Device Verification'.

在此处输入图片说明

In this click on 'VIEW ALL to get 'Android Device Verification' tab.

You can't test on an emulator, are you using a real phone? If you want to test from an emulator check this out https://firebase.flutter.dev/docs/auth/phone/#testing

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM