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:
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'
}
et voici les journaux d'erreurs:
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)
Réponses
la mise en oeuvre androidx.browser:browser:1.2.0
Utilisez cette dépendance pour résoudre le problème.
Puisque vous utilisez la firebase-bomdépendance , 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')
Si quelqu'un vient 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.
Vous avez besoin de CustomTabs à ajouter à votre projet afin que votre application mobile puisse accéder au navigateur à l'aide de CustomTabs
implementation 'com.android.support:customtabs:28.0.0'
La même chose s'est produite avec moi. Ce que j'ai fait a essentiellement supprimé la ligne suivante-
implementation platform('com.google.firebase:firebase-bom:26.0.0')
Les gars, j'ai trouvé un moyen de suivre les étapes. Dans "Documents d'authentification par téléphone" de Firebase, vous trouverez l'option (2. Activer la vérification de l'application) Suivez ces étapes:
Activez l'API de vérification d'AndroidDevice en cliquant dessus.
Ajoutez ensuite votre SHA-256. (Gradle sur le côté droit de
android studio->Tasks->android->signingReports.)
Vous y trouverez votre SHA-256 pour votre application.
Dans la nouvelle version d'authentification de Firebase, ils ont apporté des changements majeurs tels que Recaptcha, SafetyNet pour la vérification humaine. En ajoutant
implémentation "androidx.browser: navigateur: 1.2.0"
cela a résolu mon problème mais l'expérience utilisateur n'était pas bonne car Firebase ouvrait le navigateur pour vérifier Recaptcha et cela semblait étrange dans le flux de l'application.
Firebase Quote " Le flux reCAPTCHA ne sera déclenché que lorsque SafetyNet n'est pas disponible ou que votre appareil ne réussit pas les contrôles de suspicion. Néanmoins, vous devez vous assurer que les deux scénarios fonctionnent correctement. " Donc, pour activer SafetyNet, suivez les étapes ci-dessous ou vous pouvez également visiter Firebase Auth pour plus d'informations.
- Accédez à la console Google Cloud, sélectionnez votre projet.
- Cliquez sur le menu de navigation et sélectionnez APis & services, puis sélectionnez Dashboard.
- Cliquez sur Activer l'API et les services et activez l'API "Vérification de l'appareil Android".
4.Ajoutez SHA 256 dans les paramètres du projet Firebase (déboguez et relâchez les deux)