没有虚拟方法verifyPhoneNumber,致命异常:主线程

12

将库更新到Gradle文件后,我尝试通过手机号进行身份验证,但遇到了这个错误。

--------- beginning of crash
2020-11-04 00:33:11.574 23042-23042/com.roko.hearth E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.roko.hearth, PID: 23042
java.lang.NoSuchMethodError: No virtual method verifyPhoneNumber(Ljava/lang/String;JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/Executor;Lcom/google/firebase/auth/PhoneAuthProvider$OnVerificationStateChangedCallbacks;Lcom/google/firebase/auth/PhoneAuthProvider$ForceResendingToken;)V in class Lcom/google/firebase/auth/PhoneAuthProvider; or its super classes (declaration of 'com.google.firebase.auth.PhoneAuthProvider' appears in /data/app/com.roko.hearth-BB3VSAScHPWVlEGN0MD3dw==/base.apk!classes2.dex)
    at com.firebase.ui.auth.ui.phone.PhoneNumberVerificationHandler.verifyPhoneNumber(PhoneNumberVerificationHandler.java:32)
    at com.firebase.ui.auth.ui.phone.CheckPhoneNumberFragment.onNext(CheckPhoneNumberFragment.java:164)
    at com.firebase.ui.auth.ui.phone.CheckPhoneNumberFragment.onClick(CheckPhoneNumberFragment.java:140)
    at android.view.View.performClick(View.java:7140)
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
    at android.view.View.performClickInternal(View.java:7117)
    at android.view.View.access$3500(View.java:801)
    at android.view.View$PerformClick.run(View.java:27351)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

我搜索了解决方法,但问题仍然存在。

我已经将这些Firebase库添加到Gradle中。

// Firebase
implementation platform('com.google.firebase:firebase-bom:26.0.0')
//Firebase Authentication
implementation 'com.google.firebase:firebase-auth'
implementation 'com.firebaseui:firebase-ui-auth:6.2.1'

//Firebase Database
implementation 'com.google.firebase:firebase-database'
implementation 'com.firebaseui:firebase-ui-database:6.2.1'

//Firebase Messaging
implementation 'com.google.firebase:firebase-messaging'

//Firebase Storage
implementation 'com.google.firebase:firebase-storage'

implementation 'com.google.firebase:firebase-perf'

implementation 'com.google.firebase:firebase-core'

/////////////////////////////////////////////////////////////////////////////

SHA-1代码相同。有人能帮忙吗?

6个回答

9
implementation platform('com.google.firebase:firebase-bom:26.1.0')
    implementation 'com.google.firebase:firebase-auth'
    implementation 'com.firebaseui:firebase-ui-auth:7.0.0'

这是真正的更正;)


1
Firebase-UI-Auth 7.0.0在哪里包含?除了这个,我没有得到任何其他来源。 - Aman

7

只需将firebaseUI更新到最新版本即可。

implementation 'com.firebaseui:firebase-ui-auth:7.1.0' //or higher

这意味着,如果您使用最新的Firebase,您需要使用最新的FirebaseUI,如在此处提到的。


1
这应该是被接受的答案,并附有解释。 - Aman

4
今天,我在使用最新版本的Firebase Auth('com.google.firebase:firebase-auth:20.0.0')时遇到了同样的问题。然后我又将它改回之前的工作版本('com.google.firebase:firebase-auth:19.4.0'),这样它就又可以正常运行了。希望这就是你要找的答案。

4

我通过将 Firebase Auth 和 Firebase Auth-UI 降级到以下版本来解决了问题:

implementation 'com.google.firebase:firebase-auth:19.3.1'
implementation 'com.firebaseui:firebase-ui-auth:6.2.0'

然后我删除了:

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

因此,gradle现在看起来像:

// Firebase
//Firebase Authentication
implementation 'com.google.firebase:firebase-auth:19.3.1'
implementation 'com.firebaseui:firebase-ui-auth:6.2.0'

//Firebase Database
implementation 'com.google.firebase:firebase-database:19.5.1'
// FirebaseUI for Firebase Realtime Database
implementation 'com.firebaseui:firebase-ui-database:6.4.0'

//Firebase Messaging
implementation 'com.google.firebase:firebase-messaging:21.0.0'

//Firebase Storage
implementation 'com.google.firebase:firebase-storage:19.2.0'

implementation 'com.google.firebase:firebase-perf:19.0.9'

implementation 'com.google.firebase:firebase-analytics:18.0.0'
//////////////////////////////////////////////////////////////////////

一些方式导致 Firebase 性能与 Firebase 认证冲突。现在一切都按照预期工作。


当您指定 Firebase 依赖项的版本时,它会覆盖 BoM 版本。因此,无需指定所有其他模块。 - nyxee
非常感谢。我已经浪费了一整天的时间来解决这个问题。 - Viswanath Kumar Sandu
1
看看@DevAndroid的答案,那是解决这个问题的更好方法。 - Rajeev Jayaswal
我相信Firebase UI已经包含了所有必需的依赖项,例如Firebase Auth UI已经具有Auth API,那么为什么您还要指定Auth依赖项呢? - Venkatesh Talacheeru

1

如果您将来遇到此问题,请查看Firebase UI的GitHub页面。它始终具有库的更新版本。如果您深入了解,还会找到相关的依赖库并根据项目要求进行更新。


我认为这是目前正确的解决方案。 - nyxee

0

只用这一行代码就解决了我的问题。

implementation 'com.firebaseui:firebase-ui-auth:8.0.0'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接