Выдает Ошибку при попытке аутентификации через код, присланный на телефон (Firebase)

У меня есть два экрана(Enter_Number и ConfirmNumber). В Enter_Number я ввожу номер телефона и нажимаю на кнопку(перейти на экран ConfirmNumber и выслать мне код) В ConfirmNumber собственно я жду прихода кода и ввожу его в поле проверки кода и тут возникает ошибка:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.inchat, PID: 9672
java.lang.IllegalStateException: Could not execute method for android:onClick
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
    at android.view.View.performClick(View.java:6897)
    at android.widget.TextView.performClick(TextView.java:12727)
    at android.view.View$PerformClick.run(View.java:26101)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
    at android.view.View.performClick(View.java:6897) 
    at android.widget.TextView.performClick(TextView.java:12727) 
    at android.view.View$PerformClick.run(View.java:26101) 
    at android.os.Handler.handleCallback(Handler.java:789) 
    at android.os.Handler.dispatchMessage(Handler.java:98) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
 Caused by: java.lang.IllegalArgumentException: Cannot create PhoneAuthCredential without either verificationProof, sessionInfo, temporary proof, or enrollment ID.
    at com.google.android.gms.common.internal.Preconditions.checkArgument(com.google.android.gms:play-services-basement@@17.1.1:35)
    at com.google.firebase.auth.PhoneAuthCredential.<init>(com.google.firebase:firebase-auth@@21.0.1:6)
    at com.google.firebase.auth.PhoneAuthCredential.zzc(com.google.firebase:firebase-auth@@21.0.1:1)
    at com.google.firebase.auth.PhoneAuthProvider.getCredential(com.google.firebase:firebase-auth@@21.0.1:1)
    at com.example.inchat.ConfirmNumber.verifyPhoneNumberWithCode(ConfirmNumber.java:89)
    at com.example.inchat.ConfirmNumber.RegistrationTime(ConfirmNumber.java:78)
    at java.lang.reflect.Method.invoke(Native Method) 
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
    at android.view.View.performClick(View.java:6897) 
    at android.widget.TextView.performClick(TextView.java:12727) 
    at android.view.View$PerformClick.run(View.java:26101) 
    at android.os.Handler.handleCallback(Handler.java:789) 
    at android.os.Handler.dispatchMessage(Handler.java:98) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

Все работает хорошо, у меня сообщение с кодом приходит, но как только я ввожу этот 6-значный код у меня выдает такую ошибку. по идее с экраном Enter_Number.java все должно быть хорошо, я думаю, что проблема со вторым экраном ConfirmNumber.java. Проведя некоторые "исследования" я понял, что в момент вызова функции RegistrationTime() Экрана ConfirmNumber.java (Я добавил android:OnCLick="RegistrationTime" к кнопке "Проверить код" в экране ConfirmNumber.java) мой mVerificationId, который передается в функцию verifyPhoneNumberWithCode(mVerificationId,code); равен null( Я не понимаю, как исправить эту ошибку.

Enter_Number.java

package com.example.inchat;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.FirebaseException;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthOptions;
import com.google.firebase.auth.PhoneAuthProvider;

import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Enter_Number extends AppCompatActivity {
//    private static final String TAG = "PhoneAuthActivity";
    TextView Inchat, Privace_policy, Enter_phone;
    LinearLayout Linear_bottom, main_layout;
    FrameLayout frame_layout;
    EditText EnterPhone, EnterPhoneCode;

    Pattern pattern_phone = Pattern.compile("^[0-9]*?$");
    Matcher matcher_phone;
    //
    //    private FirebaseAuth mAuth;

    //    private ActivityMainBinding binding;
        private PhoneAuthProvider.ForceResendingToken forceResendingToken;
        public String CountryZipCode="";
        private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;
        public String mVerificationId;
        private static final String TAG = "MAIN_TAG";
        private FirebaseAuth firebaseAuth;
        private ProgressDialog pd;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_enter__email);
    Inchat = (TextView) findViewById(R.id.inchat);
    main_layout = (LinearLayout) findViewById(R.id.main_layout);
    Linear_bottom = (LinearLayout) findViewById(R.id.linear_bottom);
    Enter_phone = (TextView) findViewById(R.id.enter_email);
    frame_layout = (FrameLayout) findViewById(R.id.frame_layout);
    Privace_policy = (TextView) findViewById(R.id.privace_policy);
    EnterPhone = (EditText) findViewById(R.id.EnterPhone);
    EnterPhoneCode = (EditText) findViewById(R.id.EnterPhoneCode);
   
    GetCountryZipCode();

    firebaseAuth = FirebaseAuth.getInstance();

    pd = new ProgressDialog(this);
    pd.setTitle("Please wait...");
    pd.setCanceledOnTouchOutside(false);

    mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
            ConfirmNumber c = new ConfirmNumber();
            c.signInWithPhoneAuthCredential(phoneAuthCredential);
        }

        @Override
        public void onVerificationFailed(@NonNull FirebaseException e) {
            pd.dismiss();
            Toast.makeText(Enter_Number.this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken token) {
            super.onCodeSent(verificationId, forceResendingToken);

            Log.d(TAG,"onCodeSent: "+ verificationId);
            mVerificationId = verificationId;
            forceResendingToken = token;
            pd.dismiss();

            Toast.makeText(Enter_Number.this, "Verification Code Sent...", Toast.LENGTH_SHORT).show();
        }
    };


}
public void RegistrationTime(View view) {
    String Phone = EnterPhone.getText().toString().trim();
    matcher_phone = pattern_phone.matcher(Phone);
    if(!Phone.isEmpty()){
        startPhoneNumberVerification(Phone);
        Intent intent = new Intent(this, ConfirmNumber.class);
        ConfirmNumber.EmailProof(Phone,mVerificationId,mCallbacks);
        startActivity(intent);
    }else{
        Toast.makeText(this, "No", Toast.LENGTH_SHORT).show();
    }
}

private void startPhoneNumberVerification(String phone) {
    pd.setMessage("Verification Phone Number");
    pd.show();

    PhoneAuthOptions options =
            PhoneAuthOptions.newBuilder(firebaseAuth)
            .setPhoneNumber(phone)
            .setTimeout(60L,TimeUnit.SECONDS)
            .setActivity(this)
            .setCallbacks(mCallbacks)
            .build();

    PhoneAuthProvider.verifyPhoneNumber(options);
}


public String GetCountryZipCode(){
    String CountryID="";


    TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    //getNetworkCountryIso
    CountryID= manager.getSimCountryIso().toUpperCase();
    String[] rl=this.getResources().getStringArray(R.array.CountryCodes);
    for(int i=0;i<rl.length;i++){
        String[] g=rl[i].split(",");
        if(g[1].trim().equals(CountryID.trim())){
            CountryZipCode=g[0];
            EnterPhoneCode.setHint("+" + CountryZipCode);
            break;
        }
    }
    return CountryZipCode;
}}

ConfirmNumber.java

package com.example.inchat;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;

import java.util.regex.Pattern;

public class ConfirmNumber extends AppCompatActivity {

TextView Text_confirm_email, Receive_sms;
TextView Inchat,Enter_email;
LinearLayout Linear_bottom,main_layout;
FrameLayout frame_layout;
EditText PhoneNumber;

public static String Phone;
public static String mVerificationId;
private static final String KEY_VERIFICATION_ID = "key_verification_id";
private FirebaseAuth firebaseAuth;
private ProgressDialog pd;
public static PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;
private PhoneAuthProvider.ForceResendingToken forceResendingToken;
//    private FirebaseAuth mAuth;
//    private String phone,id;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_confirm_email);


    Inchat = (TextView) findViewById(R.id.inchat);
    Text_confirm_email = (TextView) findViewById(R.id.text_receive);
    main_layout = (LinearLayout) findViewById(R.id.main_layout);
    Linear_bottom = (LinearLayout) findViewById(R.id.linear_bottom);
    Enter_email = (TextView) findViewById(R.id.enter_email);
    frame_layout = (FrameLayout) findViewById(R.id.frame_layout);
    Receive_sms = (TextView) findViewById(R.id.receive_sms);
    PhoneNumber = (EditText) findViewById(R.id.EnterEmailAddress);
    TextConfirm();

    Text_confirm_email.setText("An SMS has been sent to your Phone Number (" + TextConfirm() + ") with an account verification code, enter the code here (it's free):");
    SizeScreen();
    firebaseAuth = FirebaseAuth.getInstance();
}

public void RegistrationTime(View view) throws InterruptedException {

    String code = PhoneNumber.getText().toString().trim();

    if(TextUtils.isEmpty(code)){
        Toast.makeText(this, "Please enter verification Code", Toast.LENGTH_SHORT).show();
    }else{

        System.out.println(mVerificationId );
        System.out.println(code );
        verifyPhoneNumberWithCode(mVerificationId,code);

    }


}

private void verifyPhoneNumberWithCode(String mVerificationId, String code) throws InterruptedException {
//        pd.setMessage("Verifying Code");
//        pd.show();
    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId,code);
    signInWithPhoneAuthCredential(credential);
}

public void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
//        pd.setMessage("Logging In");
    firebaseAuth.signInWithCredential(credential)
            .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
//                        pd.dismiss();
                    String phone = firebaseAuth.getCurrentUser().getPhoneNumber();

                    startActivity(new Intent(ConfirmNumber.this,Logowanie.class));
                    Toast.makeText(ConfirmNumber.this, "Logged In as " + phone, Toast.LENGTH_SHORT).show();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
//                        pd.dismiss();
                    Toast.makeText(ConfirmNumber.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
}

public static void EmailProof(String Phone, String mVerificationId, PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks){
    ConfirmNumber.mVerificationId = mVerificationId;
    ConfirmNumber.Phone = Phone;
    ConfirmNumber.mCallbacks = mCallbacks;

}

private String TextConfirm() {
    Pattern pattern2 = Pattern.compile("(?<=.{4})(.)");
    return pattern2.matcher( Phone ).replaceAll( "*" );
}}

Ответы (0 шт):