เกิดจาก: java.lang.ClassNotFoundException: ไม่พบคลาสใน Firebase Phone Authentication
ฉันใช้การตรวจสอบสิทธิ์โทรศัพท์ใน Android Studio ผ่าน Firebase ฉันเปิดใช้การลงชื่อเข้าใช้โทรศัพท์และเพิ่ม SHA-1 และ SHA-256 ในโครงการ Firebase นี่คือการอ้างอิงทั้งหมดของฉัน:
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'
}
และนี่คือบันทึกข้อผิดพลาด:
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)
คำตอบ
การนำไปใช้งาน androidx.browser:browser:1.2.0
ใช้การอ้างอิงนี้เพื่อแก้ปัญหา
เนื่องจากคุณกำลังใช้firebase-bomการพึ่งพา , ที่ห้องสมุดกำหนดรุ่นของทุก SDKs Firebase คุณใช้ ซึ่งหมายความว่าคุณไม่ควรระบุหมายเลขเวอร์ชันสำหรับ Firebase SDK อื่น ๆ ในไฟล์ gradle ของคุณ
ดังนั้นลบหมายเลขเวอร์ชันจากfirebase-auth:
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.firebase:firebase-analytics'
implementation platform('com.google.firebase:firebase-bom:26.0.0')
หากมีคนมาจากreact-nativeหลังจากค้นหาไปทั่วฉันพบวิธีแก้ปัญหาชั่วคราวนี้
เพิ่มด้านล่าง
implementation "androidx.browser:browser:1.2.0"
ลงในการอ้างอิง android / app / build.gradle แก้ไขปัญหา
คุณต้องเพิ่ม CustomTabs ลงในโปรเจ็กต์ของคุณเพื่อให้แอปของคุณในมือถือสามารถเข้าถึงเบราว์เซอร์โดยใช้ CustomTabs
implementation 'com.android.support:customtabs:28.0.0'
สิ่งเดียวกันเกิดขึ้นกับฉัน สิ่งที่ฉันทำโดยพื้นฐานแล้วลบบรรทัดต่อไปนี้ -
implementation platform('com.google.firebase:firebase-bom:26.0.0')
พวกฉันพบวิธีเพียงทำตามขั้นตอน ใน "เอกสารการตรวจสอบสิทธิ์โทรศัพท์" ของ firebase คุณจะพบตัวเลือก (2. เปิดใช้งานการยืนยันแอป) ทำตามขั้นตอนต่อไปนี้:
เปิดใช้งาน AndroidDevice check API โดยคลิกที่มัน
จากนั้นเพิ่ม SHA-256 ของคุณ (Gradle ทางด้านขวาของ
android studio->Tasks->android->signingReports.)
คุณจะได้รับ SHA-256 สำหรับแอปของคุณ
ในเวอร์ชันรับรองความถูกต้องของ Firebase ใหม่พวกเขาได้ทำการเปลี่ยนแปลงที่สำคัญเช่น Recaptcha, SafetyNet สำหรับการยืนยันโดยมนุษย์ โดยการเพิ่ม
การใช้งาน "androidx.browser: เบราว์เซอร์: 1.2.0"
มันแก้ปัญหาของฉันได้ แต่ประสบการณ์ของผู้ใช้ไม่ดีเพราะ firebase กำลังเปิดเบราว์เซอร์เพื่อยืนยัน Recaptcha และมันดูแปลก ๆ ในขั้นตอนของแอพ
ใบเสนอราคา Firebase " โฟลว์ reCAPTCHA จะทริกเกอร์ก็ต่อเมื่อ SafetyNet ไม่พร้อมใช้งานหรืออุปกรณ์ของคุณไม่ผ่านการตรวจสอบที่น่าสงสัยอย่างไรก็ตามคุณควรตรวจสอบให้แน่ใจว่าทั้งสองสถานการณ์ทำงานอย่างถูกต้อง " ดังนั้นในการเปิดใช้ SafetyNet ให้ทำตามขั้นตอนด้านล่างหรือคุณสามารถไปที่Firebase Auth ได้สำหรับข้อมูลเพิ่มเติม
- ไปที่ Google Cloud Console เลือกโครงการของคุณ
- คลิกที่เมนูการนำทางและเลือก APis & services จากนั้นเลือก Dashboard
- คลิกที่เปิดใช้งาน API และบริการและเปิดใช้งาน api "การยืนยันอุปกรณ์ Android"
4. เพิ่ม SHA 256 ในการตั้งค่าโปรเจ็กต์ firebase (แก้จุดบกพร่องและปล่อยทั้งสองอย่าง)