我确实按照this doc将firebase依赖关系更新为最新版本
旧的依赖项
implementation 'com.google.firebase:firebase-core:17.5.1'
implementation 'com.google.firebase:firebase-analytics:17.6.0'
implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
implementation 'com.google.firebase:firebase-auth:19.4.0'
implementation 'com.google.firebase:firebase-firestore-ktx:21.7.1'
更新的依赖项
//firebase
//By using the Firebase Android BoM, your app will always use compatible versions of the Firebase Android libraries.
implementation platform('com.google.firebase:firebase-bom:26.0.0')
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.google.firebase:firebase-firestore-ktx'
//The Firebase Authentication Android library now works on devices without Google Play services.
// implementation "com.google.android.gms:play-services-base:17.5.0"
旧手机身份验证方法可以正常工作
PhoneAuthProvider.getInstance().verifyPhoneNumber(
number,
60,
TimeUnit.SECONDS,
activity,
this
)
但是,更新后,上述方法的依赖性显示已弃用。因此,尝试了此
val auth = FirebaseAuth.getInstance()
binding.fab.setOnClickListener {
val options = PhoneAuthOptions.newBuilder(auth)
.setPhoneNumber("+1 5123456788")
.setTimeout(60L, TimeUnit.SECONDS)
.setActivity(this)
.build()
PhoneAuthProvider.verifyPhoneNumber(options);
}
调用build方法时会发生此错误。
2020-10-29 16:14:57.406 3422-3422/com.gowtham.firebasephoneauthwithmvvm E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gowtham.firebasephoneauthwithmvvm, PID: 3422
java.lang.NullPointerException: null reference
at com.google.android.gms.common.internal.Preconditions.checkNotNull(com.google.android.gms:play-services-basement@@17.1.0:2)
at com.google.firebase.auth.PhoneAuthOptions$Builder.build(com.google.firebase:firebase-auth@@20.0.0:22)
at com.gowtham.firebasephoneauthwithmvvm.MainActivity$onPostCreate$2.onClick(MainActivity.kt:50)
at android.view.View.performClick(View.java:7861)
at android.view.View.performClickInternal(View.java:7830)
at android.view.View.access$3600(View.java:878)
at android.view.View$PerformClick.run(View.java:29354)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8107)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
2020-10-29 16:14:57.428 3422-3422/com.gowtham.firebasephoneauthwithmvvm I/Process: Sending signal.
添加回调后出现此错误
2020-10-30 10:47:34.239 24898-24898/com.gowtham.firebasephoneauthwithmvvm E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gowtham.firebasephoneauthwithmvvm, PID: 24898
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:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8107)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.gowtham.firebasephoneauthwithmvvm-Cn_en1RDZ9XDneMCJamrPw==/base.apk"],nativeLibraryDirectories=[/data/app/com.gowtham.firebasephoneauthwithmvvm-Cn_en1RDZ9XDneMCJamrPw==/lib/arm64, /system/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
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:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8107)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
2020-10-30 10:47:34.314 24898-24898/com.gowtham.firebasephoneauthwithmvvm I/Process: Sending signal. PID: 24898 SIG: 9
答案 0 :(得分:2)
关于ducomation使用Firebase电话身份验证,您需要启用 reCAPTCHA验证
通过在build.gradle(模块应用)依赖项中添加实现“ androidx.browser:browser:1.2.0”
这将使firebase打开浏览器以进行reCAPTCHA验证。
答案 1 :(得分:1)
来自Firebase的马尔科姆!
您似乎缺少一套OnVerificationStateChangedCallbacks
-请在您的Builder
上致电#setCallbacks()
。
我会看看我们是否无法使该错误消息变得更加隐秘
答案 2 :(得分:0)
上述解决方案工作得很好,即在build.gradle(模块应用)依赖项中添加实现“ androidx.browser:browser:1.2.0”,但是会发生另一个错误,即它仅在api 26或更高版本上运行。 / p>
添加
android{
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
在build.gradle(模块应用)上,将有助于降低API。