Firebase Phone Verification verifyPhoneNumber()已弃用 + 应用程序崩溃
Firebase Phone Verification verifyPhoneNumber()已弃用 + 应用程序崩溃
升级Firebase Auth(20.0.0)依赖项以进行电话验证后出现错误,PhoneAuthProvider.getInstance().verifyPhoneNumber()。\n依赖项:\nimplementation \'com.google.firebase:firebase-auth:20.0.0\'\n错误:\njava.lang.NoClassDefFoundError: Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder;\nat com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase-auth@@20.0.0:92)\nat com.google.firebase.auth.api.internal.zzeq.zza(com.google.firebase:firebase-auth@@20.0.0:79)\nat com.google.firebase.auth.api.internal.zzeq.onPostExecute(com.google.firebase:firebase-auth@@20.0.0:88)\nat android.os.AsyncTask.finish(AsyncTask.java:755)\nat android.os.AsyncTask.access$900(AsyncTask.java:192)\nat android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)\nat android.os.Handler.dispatchMessage(Handler.java:107)\nat android.os.Looper.loop(Looper.java:237)\nat android.app.ActivityThread.main(ActivityThread.java:7948)\nat java.lang.reflect.Method.invoke(Native Method)\nat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)\nat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)\nCaused by: java.lang.ClassNotFoundException: Didn\'t find class \"androidx.browser.customtabs.CustomTabsIntent$Builder\"\n有人能解释一下我应该为新的依赖项做出什么改变吗?有哪些新步骤?
Firebase Phone Verification的verifyPhoneNumber()方法已被弃用,导致应用程序崩溃。问题的原因是应用程序的SHA-256没有在Firebase控制台注册。解决方法是更新依赖项和代码,并在Firebase控制台中注册SHA-256。
代码更新如下:
PhoneAuthProvider.verifyPhoneNumber( PhoneAuthOptions .newBuilder(FirebaseAuth.getInstance()) .setActivity(this) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setCallbacks(mCallbacks) .build());
PhoneAuthProvider.verifyPhoneNumber( PhoneAuthOptions .newBuilder(FirebaseAuth.getInstance()) .setActivity(this) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setCallbacks(mCallbacks) .setForceResendingToken(token) .build());
解决方法为:
1. 更新依赖项:`implementation 'com.google.firebase:firebase-auth:20.0.0'`
2. 从Keystore或JKS文件中复制SHA-256,并在Firebase控制台的"SHA Certificate fingerprints"中添加。
3. 确保已启用"Android Device Verification"。
感谢Alex Mamo和Firebase文档的帮助,通过上述步骤解决了问题。
问题的出现的原因是因为Firebase Phone Verification的verifyPhoneNumber()方法已经被弃用,需要使用新的方法PhoneAuthOptions来代替。解决方法是将原来的代码替换为新的代码,并且添加androidx.browser:browser:1.2.0依赖,这样Firebase才能在浏览器中打开reCAPTCHA进行验证。
具体的解决步骤如下:
1. 将原来的代码:
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);
2. 在app/gradle文件的dependencies中添加以下依赖:
implementation 'androidx.browser:browser:1.2.0'
这样Firebase才能在浏览器中打开reCAPTCHA进行验证。
通过以上步骤,可以解决Firebase Phone Verification verifyPhoneNumber() deprecated + Application Crashed问题。