在安卓工作室中使用firebase验证OTP时应用程序崩溃



我试图在Android Studio中构建一个OTP系统,我想出了下面给出的代码,然而,每次我试图将OTP发送到我的电话号码时,应用程序都会崩溃。这是代码:

Signp3rdClass.java

public class Signup3rdClass extends AppCompatActivity {
TextInputLayout phoneNumber;
CountryCodePicker countryCodePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_signup3rd_class);
//Hooks
countryCodePicker = findViewById(R.id.country_code_picker);
phoneNumber = findViewById(R.id.signup_phone_number);
}
public void callVerifyOTPScreen(View view) {
if (!validatePhoneNumber()) {
return;
}
Intent intent = new Intent(getApplicationContext(), VerifyOTP.class);
String _fullName = getIntent().getStringExtra("fullname");
String _username = getIntent().getStringExtra("username");
String _email = getIntent().getStringExtra("email");
String _password = getIntent().getStringExtra("password");
String _gender = getIntent().getStringExtra("gender");
String _date = getIntent().getStringExtra("date");
String _getUserPhoneNumber = phoneNumber.getEditText().getText().toString().trim();
String _phoneNo = "+" + countryCodePicker.getFullNumber() + _getUserPhoneNumber;
intent.putExtra("fullName", _fullName);
intent.putExtra("username", _username);
intent.putExtra("email", _email);
intent.putExtra("password", _password);
intent.putExtra("date", _date);
intent.putExtra("gender", _gender);
intent.putExtra("phoneNo", _phoneNo);
startActivity(intent);
}
private boolean validatePhoneNumber() {
String val = phoneNumber.getEditText().getText().toString().trim();
String checkNo = "[7-9][0-9]{9}";
if (val.isEmpty()) {
phoneNumber.setError("Enter valid Phone Number!");
return false;
} else if (!val.matches(checkNo)) {
phoneNumber.setError("Enter valid Phone Number!");
return false;
} else {
phoneNumber.setError(null);
phoneNumber.setErrorEnabled(false);
return true;
}
}
}

Signup3rd.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Common.LoginSingup.Signup3rdClass"
android:background="@color/offwhite">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="30dp"
android:orientation="vertical">
<ImageView
android:id="@+id/signup_back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:src="@drawable/back_btn"
android:transitionName="transition_back_btn"/>
<TextView
android:id="@+id/create_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:fontFamily="sans-serif-medium"
android:text="@string/create_account"
android:textAllCaps="true"
android:textColor="@color/black"
android:textSize="40sp"
android:transitionName="transition_title_text"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="40dp">

<com.hbb20.CountryCodePicker
android:id="@+id/country_code_picker"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:ccp_autoDetectCountry="true"
app:ccp_showFlag="true"
app:ccp_showNameCode="true"
app:ccp_showFullName="true"
android:background="@drawable/black_border"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/signup_phone_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:startIconDrawable="@drawable/field_phone_number_icon"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
app:hintTextColor="@color/black"
app:endIconMode="clear_text"
app:endIconTint="@color/black"
app:boxStrokeWidthFocused="2dp"
app:boxStrokeColor="@color/black">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/enter_phone_no"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<Button
android:id="@+id/signup_next_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/otp_code_btn"
android:layout_marginTop="20dp"
android:onClick="callVerifyOTPScreen"
android:elevation="5dp"
android:background="@color/colorPrimaryDark"
android:textColor="@color/white"
android:fontFamily="@font/montserrat_regular"
android:textSize="20sp"
android:transitionName="transition_next_btn"/>

<Button
android:id="@+id/signup_login_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login"
android:layout_marginTop="20dp"
android:elevation="5dp"
android:background="@color/transparant"
android:fontFamily="@font/montserrat_regular"
android:textSize="20sp"
android:textColor="@color/black"
android:transitionName="transition_login_btn"/>

</LinearLayout>

这是我的OTP验证类:

VerifyOTP.java

public class VerifyOTP extends AppCompatActivity {
PinView pinFromUser;
String codeBySystem;
FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_verify_o_t_p);
pinFromUser = findViewById(R.id.pin_view);
String _phoneNumber = getIntent().getStringExtra("phoneNo");
mAuth = FirebaseAuth.getInstance();
sendVerificationCodeToUser(_phoneNumber);
}
private void sendVerificationCodeToUser(String phoneNumber) {
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(mCallbacks)          // OnVerificationStateChangedCallbacks
.build();
PhoneAuthProvider.verifyPhoneNumber(options);
}
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks =
new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
codeBySystem = s;
}
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
String code = phoneAuthCredential.getSmsCode();
if(code != null){
pinFromUser.setText(code);
verifyCode(code);
}
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
Toast.makeText(VerifyOTP.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
};
private void verifyCode(String code) {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(codeBySystem, code);
signInWithPhoneAuthCredential(credential);
}

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(VerifyOTP.this, "Verification Completed!", Toast.LENGTH_SHORT).show();
} else {
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
Toast.makeText(VerifyOTP.this, "Verification failed! Please try again", Toast.LENGTH_LONG).show();
}
}
}
});
}

日志:

E/CCP: getFullNumber: Could not parse number
I/Timeline: Timeline: Activity_launch_request time:218578976
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@a4a9614
E/zza: Problem retrieving SafetyNet Token: 7: 
I/Timeline: Timeline: Activity_launch_request time:218581077
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@5459e2f
W/xample.desikha: Accessing hidden method Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I (greylist, linking, allowed)
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.desikhao, PID: 19549
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:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.example.desikhao-Z6Qez6I7lCc14bx6bjFINg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.desikhao-Z6Qez6I7lCc14bx6bjFINg==/lib/arm64, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
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:224) 
at android.app.ActivityThread.main(ActivityThread.java:7562) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 

请让我知道我在这里做错了什么。

实现"androidx.browser:浏览器:1.2.0";内置.gradle(:app(

最新更新