Firebase 电话验证 verifyPhoneNumber() 已弃用 + 应用程序崩溃

Pra*_*ani 19 android deprecated firebase firebase-authentication

升级Firebase Auth (20.0.0)电话身份验证依赖项后出错,PhoneAuthProvider.getInstance().verifyPhoneNumber()

依赖:

implementation 'com.google.firebase:firebase-auth:20.0.0'
Run Code Online (Sandbox Code Playgroud)

错误:

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:7948)
        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:1075)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder"
Run Code Online (Sandbox Code Playgroud)

谁能解释我应该为新的依赖项更改什么?有哪些新举措?

Jai*_*ora 30

这是我为删除错误所做的工作:

我参考了firebase 电话身份验证文档并进行了必要的更改:

替换这个:

PhoneAuthProvider.getInstance().verifyPhoneNumber(
            phoneNumber, //phone number to be verified
            60, // validity of the OTP
            TimeUnit.SECONDS,
            (Activity) TaskExecutors.MAIN_THREAD,
            mCallBack // onVerificationStateChangedCallback
    );
Run Code Online (Sandbox Code Playgroud)

有了这个

PhoneAuthOptions options =
            PhoneAuthOptions.newBuilder(mAuth)
                    .setPhoneNumber(phoneNumber)       // Phone number to verify
                    .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
                    .setActivity(this)                 // Activity (for callback binding)
                    .setCallbacks(mCallBack)          // OnVerificationStateChangedCallbacks
                    .build();
    PhoneAuthProvider.verifyPhoneNumber(options);
Run Code Online (Sandbox Code Playgroud)

此外,将此添加到您的 app/gradle 文件依赖项中:

implementation 'androidx.browser:browser:1.2.0'
Run Code Online (Sandbox Code Playgroud)

这将有助于 firebase 打开浏览器进行 reCAPTCHA 验证。

希望这有效!


Pra*_*ani 14

最后,我在Alex Mamo's AnswerThis Documentation的帮助下得到了解决方案

我遵循的步骤:

  1. 更新新的依赖 implementation 'com.google.firebase:firebase-auth:20.0.0'

  2. 更新新代码:

    对于发送 OTP:

    PhoneAuthProvider.verifyPhoneNumber(
         PhoneAuthOptions
                 .newBuilder(FirebaseAuth.getInstance())
                 .setActivity(this)
                 .setPhoneNumber(phoneNumber)
                 .setTimeout(60L, TimeUnit.SECONDS)
                 .setCallbacks(mCallbacks)
                 .build());
    
    Run Code Online (Sandbox Code Playgroud)

    对于重新发送 OTP

    PhoneAuthProvider.verifyPhoneNumber(
             PhoneAuthOptions
                     .newBuilder(FirebaseAuth.getInstance())
                     .setActivity(this)
                     .setPhoneNumber(phoneNumber)
                     .setTimeout(60L, TimeUnit.SECONDS)
                     .setCallbacks(mCallbacks)
                     .setForceResendingToken(token)
                     .build());
    
    Run Code Online (Sandbox Code Playgroud)

    尽管如此,您仍会收到如下错误:

[SmsRetrieverHelper] SMS 验证码请求失败:未知状态码:17028 已通过safety_net_token,但在Firebase 控制台中未注册匹配的SHA-256。请确保此应用程序的 packageName/SHA256 对已在 Firebase 控制台中注册。

  1. 你需要复制SHA-256从您的密钥存储或JKS文件,并添加这里SHA证书指纹:

    在此处输入图片说明

  2. 最后,你做到了。

    不需要 reCAPTCHA 验证。

谢谢你。


小智 5

在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha。它需要浏览器进行验证,因此请在下面添加 depen。并阅读有关更改的信息,请参考我

 implementation 'androidx.browser:browser:1.2.0'
Run Code Online (Sandbox Code Playgroud)


Him*_*kur 5

在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha 和 SafetyNet。我通过添加也遇到了同样的问题

实现“androidx.browser:浏览器:1.3.0

它解决了我的问题,但用户体验不佳,firebase 打开浏览器来验证 Recaptcha,这在应用程序流程中看起来很奇怪。

Firebase 引用“只有当 SafetyNet 不可用或您的设备未通过怀疑检查时,才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都正常工作。 ”因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问 https: //firebase.google.com/docs/auth/android/phone-auth 了解信息

  1. 更新身份验证依赖项实现“com.google.firebase:firebase-auth:20.0.1”
  2. 开始电话号码验证

PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth)
                        .setPhoneNumber(phoneNumber)   // Phone number to verify
                        .setTimeout(30L, TimeUnit.SECONDS) // Timeout and unit
                        .setActivity(this)    // Activity (for callback binding)
                        .setCallbacks(mCallbacks) 
                        .build();
        PhoneAuthProvider.verifyPhoneNumber(options);
Run Code Online (Sandbox Code Playgroud)

  1. 转到谷歌云控制台,选择您的项目。

  2. 单击导航菜单并选择 API 和服务,然后选择仪表板。

  3. 单击启用 api 和服务并启用 API“Android 设备验证”。

  4. 在 firebase 项目设置中添加 SHA-1 和 SHA 256。(调试并发布两者)

  5. 下载并替换项目中最新的 google-services.json 文件。

  6. 在真实设备上再次测试您的应用程序。