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'
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
的帮助下得到了解决方案
我遵循的步骤:
更新新依赖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 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.
您需要从您的密钥库或 JKS 文件中复制 SHA-256 并在 SHA 证书指纹中添加 here:
终于,你做到了。
不需要 reCAPTCHA 验证。
谢谢。
在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha、SafetyNet。我通过添加
遇到了同样的问题
实现“androidx.browser:浏览器:1.3.0
它解决了我的问题,但用户体验不佳 firebase 正在打开浏览器以验证 Recaptcha,这在应用程序流程中看起来很奇怪。
Firebase 引用“只有在 SafetyNet 不可用或您的设备未通过可疑检查时才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都正常工作。 “
因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问
https://firebase.google.com/docs/auth/android/phone-auth 获取信息
- 更新授权依赖实现'com.google.firebase:firebase-auth:20.0.1'
- 开始电话号码验证
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);
转到 google 云控制台,select 你的项目。
单击导航菜单和 select API 和服务,然后单击 select 仪表板。
点击启用api和服务并启用API”
Android 设备验证。
在 firebase 项目设置中添加 SHA-1 和 SHA 256。(同时调试和发布)
下载并替换项目中最新的 google-services.json 文件。
在真实设备上再次测试您的应用。
在新的 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 仅适用于真实设备。无法在模拟器上运行。
升级后出现错误 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'
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验证。
希望这有效!
最后在
我遵循的步骤:
更新新依赖
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 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.
您需要从您的密钥库或 JKS 文件中复制 SHA-256 并在 SHA 证书指纹中添加 here:
终于,你做到了。
不需要 reCAPTCHA 验证。
谢谢。
在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha、SafetyNet。我通过添加
遇到了同样的问题实现“androidx.browser:浏览器:1.3.0
它解决了我的问题,但用户体验不佳 firebase 正在打开浏览器以验证 Recaptcha,这在应用程序流程中看起来很奇怪。
Firebase 引用“只有在 SafetyNet 不可用或您的设备未通过可疑检查时才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都正常工作。 “ 因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问 https://firebase.google.com/docs/auth/android/phone-auth 获取信息
- 更新授权依赖实现'com.google.firebase:firebase-auth:20.0.1'
- 开始电话号码验证
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);
转到 google 云控制台,select 你的项目。
单击导航菜单和 select API 和服务,然后单击 select 仪表板。
点击启用api和服务并启用API” Android 设备验证。
在 firebase 项目设置中添加 SHA-1 和 SHA 256。(同时调试和发布)
下载并替换项目中最新的 google-services.json 文件。
在真实设备上再次测试您的应用。
在新的 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 仅适用于真实设备。无法在模拟器上运行。