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

Firebase Phone Verification verifyPhoneNumber() deprecated + Application Crashed

升级后出现错误 Firebase Auth (20.0.0) Phone 身份验证依赖项,PhoneAuthProvider.getInstance().verifyPhone数字()

依赖关系:

implementation 'com.google.firebase:firebase-auth:20.0.0'

错误:

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.access0(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"

任何人都可以解释我应该为新的依赖项更改什么吗?有哪些新步骤?

在新的 Firebase 身份验证版本中,他们进行了重大更改,例如 Recaptcha for human verification.it 需要浏览器进行验证,在下面添加 depen.and 阅读有关更改的信息 refer me

 implementation 'androidx.browser:browser:1.2.0'

verifyPhoneNumber(String phoneNumber, long timeout, TimeUnit unit, Activity activity, PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks)方法的官方文档中有说明:

This method is deprecated in favor of verifyPhoneNumber(PhoneAuthOptions)

所以从现在开始,要验证 phone 数字,我们需要调用此方法并将 PhoneAuthOptions 对象作为参数传递。在我看来,这有点类似于 updateProfile(UserProfileChangeRequest request),我们应该传递一个 PhoneAuthOptions 对象作为参数。

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

我参考了 firebase phone auth documentation 并进行了必要的更改:

替换为:

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

有了这个

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);

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

implementation 'androidx.browser:browser:1.2.0'

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

希望这有效!

最后在 and This 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());
    

    重新发送 OTP

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

    仍然会出现如下错误:

[SmsRetrieverHelper] SMS verification code request failed: unknown status code: 17028 A safety_net_token was passed, but no matching SHA-256 was registered in the Firebase console. Please make sure that this application’s packageName/SHA256 pair is registered in the Firebase Console.

  1. 您需要从您的密钥库或 JKS 文件中复制 SHA-256 并在 SHA 证书指纹中添加 here

  2. 终于,你做到了。

    不需要 reCAPTCHA 验证。

谢谢。

在新的 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);

  1. 转到 google 云控制台,select 你的项目。

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

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

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

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

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

在新的 Firebase 身份验证版本中,他们进行了重大更改,例如 Recaptcha for human verification.it 需要浏览器进行验证,在下面添加 depen.and 阅读有关更改的信息,请参考我

implementation 'androidx.browser:browser:1.2.0'

更新:如果您想避免人工验证,您需要在 google 云控制台中为您的 firebase 项目启用安全网,请参阅此。

就我而言,我在 firebase 控制台中添加了 SHA 256 并已解决。

谢谢@HimanshiThakur ()

只需将您之前的代码替换为以下代码:

PhoneAuthProvider.verifyPhoneNumber(
 PhoneAuthOptions
         .newBuilder(FirebaseAuth.getInstance())
         .setActivity(this)
         .setPhoneNumber(phoneNumber)
         .setTimeout(60L, TimeUnit.SECONDS)
         .setCallbacks(mCallBack)
         .build());

注意:- Firebase OTP 仅适用于真实设备。无法在模拟器上运行。