【问题标题】:Firebase Phone Auth is not working version 20.0.0 in androidFirebase 电话身份验证在 android 中无法使用 20.0.0 版
【发布时间】:2020-10-29 05:12:51
【问题描述】:

我确实按照 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

【问题讨论】:

  • 你可以试试没有实际的电话号码吗?
  • 您在哪一行代码中遇到了这个错误?
  • 当我调用 build() 时出现此错误
  • 现在我添加了完整的错误日志@AlexMamo
  • @AmodGokhale 我也尝试了我的测试设备号

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

根据 Firebase Phone-Auth documentation,您需要启用 reCAPTCHA 验证

首先在 build.gradle(模块应用程序)依赖项中添加 implementation 'androidx.browser:browser:1.3.0'

这将使firebase打开浏览器进行reCAPTCHA验证。

【讨论】:

    【解决方案2】:

    来自 Firebase 的马尔科姆在这里!

    您似乎缺少一组OnVerificationStateChangedCallbacks - 请在您的Builder 上致电#setCallbacks()

    我会看看我们是否不能让那个错误消息不那么神秘

    【讨论】:

    • 谢谢..它解决了这个问题。但是,我得到另一个错误似乎与reCaptcha验证有关。我已经更新了我的问题中的错误。你能检查一下吗
    • 再次感谢。最后一个错误通过添加实现 'androidx.browser:browser:1.2.0' 解决。
    • 有没有办法防止打开浏览器进行验证?只是从用户体验的角度询问。如果是这样,你能解释一下吗?提前致谢
    • 是的 - 启用 SafetyNet API,如下所述:firebase.devsite.corp.google.com/docs/auth/android/…
    • Malcolm 我无法导航到给定的链接,因为它需要登录凭据
    【解决方案3】:

    上述解决方案工作得很好,即在 build.gradle(模块应用程序)依赖项中添加实现 'androidx.browser:browser:1.2.0',但发生另一个错误,它只能在 api 26 或更高版本上运行。

    添加

    android{
       compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    

    在 build.gradle(模块应用程序)将有助于降低 api。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2020-09-29
      • 1970-01-01
      • 2020-01-24
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多