4
votes

Causé par: java.lang.ClassNotFoundException: classe introuvable dans Firebase Phone Authentication

J'utilise l'authentification téléphonique dans Android Studio via Firebase, j'ai activé la connexion téléphonique et j'ai ajouté SHA-1 et SHA-256 dans Firebase Project. voici toutes mes dépendances:

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) 

et voici les journaux d'erreurs:

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


0 commentaires

4 Réponses :


2
votes

Puisque vous utilisez la dépendance firebase-bom , cette bibliothèque détermine la version de tous les SDK Firebase que vous utilisez. Cela signifie que vous ne devez pas spécifier de numéros de version pour les autres SDK Firebase dans votre fichier gradle.

Supprimez donc le numéro de version de firebase-auth :

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


0 commentaires

6
votes

implémentation androidx.browser:browser:1.2.0

Utilisez cette dépendance pour résoudre le problème.


4 commentaires

J'ai ajouté ceci, mais maintenant il demande un navigateur lors de la saisie du code OTP, ce qui n'est pas bon pour l'utilisateur. J'avais l'habitude d'utiliser la version précédente (avant 20.0.0) pour le com.google.firebase:firebase-auth , et il ne demandait pas de navigateur.


Si vous voyez la documentation mise à jour de l'authentification du téléphone Firebase et qu'elle indique que vous devez d'abord effectuer une vérification reCAPTCHA via votre navigateur.


@ user1801605, vous devez activer l'API Android DeviceCheck pour votre projet dans Google Cloud Console, suivez le guide ici: firebase.google.com/docs/auth/android/phone-auth Si cette API n'est pas activée, l'authentification est désormais par défaut Vérification reCAPTCHA pour vérifier si l'utilisateur est une personne réelle (ce qui nécessite le navigateur et l'importation mentionnée par TaizulIslam) .Comme pour les versions précédentes ne demandant pas cela, c'est vrai, mais je suppose que Google voulait améliorer la sécurité de ce système d'authentification .


Si j'active l'API Android DeviceCheck, cela affectera-t-il les utilisateurs qui utilisent encore l'ancienne version (antérieure à 20.0.0)?



0
votes

Vous devez ajouter des CustomTabs à votre projet afin que votre application mobile puisse accéder au navigateur à l'aide de CustomTabs

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


0 commentaires

0
votes

Si quelqu'un venant de react-native , après avoir cherché partout, j'ai trouvé cette solution temporaire.

Ajout de ce qui suit

implementation "androidx.browser:browser:1.2.0"

dans les dépendances android / app / build.gradle résolu le problème.


0 commentaires