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 Answer和This Documentation的帮助下得到了解决方案
我遵循的步骤:
更新新的依赖 implementation 'com.google.firebase:firebase-auth:20.0.0'
更新新代码:
对于发送 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 控制台中注册。
你需要复制SHA-256从您的密钥存储或JKS文件,并添加这里的SHA证书指纹:
最后,你做到了。
不需要 reCAPTCHA 验证。
谢谢你。
小智 5
在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha。它需要浏览器进行验证,因此请在下面添加 depen。并阅读有关更改的信息,请参考我
implementation 'androidx.browser:browser:1.2.0'
Run Code Online (Sandbox Code Playgroud)
在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha 和 SafetyNet。我通过添加也遇到了同样的问题
实现“androidx.browser:浏览器:1.3.0
它解决了我的问题,但用户体验不佳,firebase 打开浏览器来验证 Recaptcha,这在应用程序流程中看起来很奇怪。
Firebase 引用“只有当 SafetyNet 不可用或您的设备未通过怀疑检查时,才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都正常工作。 ”因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问 https: //firebase.google.com/docs/auth/android/phone-auth 了解信息
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)
转到谷歌云控制台,选择您的项目。
单击导航菜单并选择 API 和服务,然后选择仪表板。
单击启用 api 和服务并启用 API“Android 设备验证”。
在 firebase 项目设置中添加 SHA-1 和 SHA 256。(调试并发布两者)
下载并替换项目中最新的 google-services.json 文件。
在真实设备上再次测试您的应用程序。
| 归档时间: |
|
| 查看次数: |
11802 次 |
| 最近记录: |