15
votes

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) 
12

12 Answers

30
votes

implementation androidx.browser:browser:1.2.0

Use this dependency to solve the problem.

20
votes

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.

13
votes

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.

3
votes

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'
3
votes

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

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

2
votes

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')
2
votes

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.

2
votes

Add this dependency in your build.gradle file... implementation 'com.android.support:customtabs:28.0.0-alpha3'

0
votes

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.

0
votes

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.

0
votes

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.

0
votes

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