升级电话验证的 Firebase身份验证(20.0.0)依赖项 PhoneAuthProvider.getInstance()。verifyPhoneNumber()
后出现错误依赖性:
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.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"
谁能解释我应该为新的依赖关系进行哪些更改?有哪些新步骤?
答案 0 :(得分:15)
这是我删除错误的方法:
我介绍了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);
此外,将其添加到您的应用/ gradle文件依赖项:
implementation 'androidx.browser:browser:1.2.0'
这将帮助Firebase打开浏览器以进行reCAPTCHA验证。
希望这行得通!
答案 1 :(得分:5)
在新的Firebase身份验证版本中,他们已进行了一些重大更改,例如Recaptcha以便进行人工验证。它需要浏览器进行验证,请在depen下面添加。并了解有关更改refer me
implementation 'androidx.browser:browser:1.2.0'
答案 2 :(得分:5)
最后,我在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());
用于重新发送OTP
PhoneAuthProvider.verifyPhoneNumber(
PhoneAuthOptions
.newBuilder(FirebaseAuth.getInstance())
.setActivity(this)
.setPhoneNumber(phoneNumber)
.setTimeout(60L, TimeUnit.SECONDS)
.setCallbacks(mCallbacks)
.setForceResendingToken(token)
.build());
仍然,您将得到如下错误:
[SmsRetrieverHelper] SMS验证码请求失败:未知 状态码:17028传递了一个safety_net_token,但没有匹配项 SHA-256已在Firebase控制台中注册。请确保 此应用程序的packageName / SHA256对已在 Firebase控制台。
您需要从密钥库或JKS文件中复制 SHA-256 ,并在 SHA证书指纹中添加here:
最后,您做到了。
无需进行reCAPTCHA验证。
谢谢。
答案 3 :(得分:2)
不推荐使用此方法,而推荐使用verifyPhoneNumber(PhoneAuthOptions)
因此从现在开始,为了验证电话号码,我们需要调用此方法并传递一个PhoneAuthOptions
对象作为参数。我认为,这类似于updateProfile(UserProfileChangeRequest request),在这种情况下,我们应该传递PhoneAuthOptions
对象作为参数。
答案 4 :(得分:1)
在新的Firebase身份验证版本中,他们已进行了重大更改,例如Recaptcha,SafetyNet以便进行人工验证。通过添加
,我也遇到了同样的问题实现“ androidx.browser:browser:1.3.0
它解决了我的问题,但是用户体验不是很好,因为Firebase正在打开浏览器来验证Recaptcha,这在应用程序流程中看起来很奇怪。
Firebase报价“ 仅当SafetyNet不可用或您的设备未通过可疑检查时,才会触发reCAPTCHA流程。尽管如此,您仍应确保这两种情况均能正常工作。 因此,要启用SafetyNet,请按照以下步骤操作,否则您也可以访问 https://firebase.google.com/docs/auth/android/phone-auth获取信息
转到Google云控制台,选择您的项目。
单击导航菜单,然后选择“ APis和服务”,然后选择“仪表板”。
单击启用api和服务,然后启用api“ Android设备验证”。
在firebase项目设置中添加SHA256。(调试并同时释放两者)
答案 5 :(得分:0)
在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha。它需要浏览器进行验证,因此请在下面添加。阅读有关更改的信息,请参考我
implementation 'androidx.browser:browser:1.2.0'
更新:如果您想避免人工验证,您需要在 Google Cloud Console 中为您的 Firebase 项目启用安全网,请参阅此内容。
答案 6 :(得分:0)
就我而言,我在 firebase 控制台中添加了 SHA 256 并已解决。
谢谢@HimanshiThakur (https://stackoverflow.com/a/65248293/10787285)