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

12

18

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) 
Anele answered 29/10, 2020 at 9:30 Comment(0)
T
33

implementation androidx.browser:browser:1.2.0

Use this dependency to solve the problem.

Thorpe answered 29/10, 2020 at 18:38 Comment(6)
I added this, but now it's asking for a browser when entering the OTP code, which is not good for user. I used to use the previous version (before 20.0.0) for the com.google.firebase:firebase-auth, and it wasn't asking for a browser.Octamerous
If you see the firebase phone auth updated documentation and it says that first you need to reCAPTCHA verification through your browser.Thorpe
@Octamerous you need to enable the Android DeviceCheck API for your project in the Google Cloud Console, follow the guide here: firebase.google.com/docs/auth/android/phone-auth If this API is not enabled the auth now defaults to reCAPTCHA verification to check if the user is a real person (which requires the browser, and the import that TaizulIslam mentioned) As for the previous versions not asking for this, that's true, but I suppose Google wanted to improve the security of this auth system.Hammerfest
If I enable the Android DeviceCheck API, will that affect users that are still using the old version (prior to 20.0.0)?Octamerous
@ManuelRego enabled the Android DeviceCheck API, the captcha is still on, any more configuration is needed?Adamant
@Adamant follow this Enable Safety.Wampumpeag
C
22

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.

Command answered 10/12, 2020 at 8:23 Comment(6)
in the release note they claim it is a bug and its fixed, it'll fallback for whatever browser which exists!, my app just crashes on latest authIntolerable
@Intolerable my crash fixed after adding implementation "androidx.browser:browser:1.2.0"Command
Hey @HimanshiThakur , please help me understand, how do I connect the google cloud to my project so enabling the " Android Device Verification" API will have an effect?Eisenstark
Hi @ItayFeldman If your project is connected to firebase then just open google cloud console and select your project from dropdown you don't need to do any extra steps .Command
Enabling "Android Device Verification" and adding SHA256 to firebase project was my solution, thank you soo much.Litigant
This should be the accepted answer. Thanks a lot @HimanshiThakur.Soonsooner
G
15

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.

Gosnell answered 26/11, 2020 at 17:20 Comment(2)
This solved my issue and my project is strictly android. I was also using the firebase bom so I think this should be the accepted answer.Foamy
This worked for me. Use the latest version.Hooghly
V
3

You need CustomTabs to add to your project so your app in mobile can access browser using CustomTabs

implementation 'com.android.support:customtabs:28.0.0'
Valdes answered 23/11, 2020 at 20:33 Comment(0)
I
3

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

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

Infelicity answered 15/12, 2020 at 11:6 Comment(0)
D
3

Add this dependency to your 'build.gradle' file...

implementation 'com.android.support:customtabs:28.0.0-alpha3'
Deforce answered 27/2, 2021 at 6:12 Comment(0)
T
2

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')
Triumphant answered 29/10, 2020 at 13:48 Comment(1)
@Frank van Puffelen this doesnt solve the problem, and firebase release notes states this is fixed and will fallback to whatever browser is present in the device but it aint happeningIntolerable
W
2

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 to Settings 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.

Wampumpeag answered 26/12, 2020 at 9:33 Comment(0)
E
0

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.

Evonneevonymus answered 1/12, 2020 at 14:39 Comment(0)
B
0

Just add this line:

implementation "androidx.browser:browser:1.3.0"

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

Bellybutton answered 31/12, 2020 at 18:27 Comment(1)
Welcome to Stack Overflow. This answer has already been given above. Please give answer that bring new information.Danutadanya
E
0

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

enter image description here

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

Eroticism answered 9/1, 2021 at 13:32 Comment(0)
S
0

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

Sterner answered 12/2, 2021 at 14:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.