java.lang.IllegalArgumentException: невозможно создать PhoneAuthCredential без проверкиProof, sessionInfo, временного подтверждения или идентификатора регистрации - PullRequest
0 голосов
/ 20 сентября 2019

Здесь приведен полный код

public class MainActivity extends AppCompatActivity {

Button signUp;
EditText userName,phone,password;
String verification_Code;
FirebaseAuth Auth;
DatabaseReference reference;
FirebaseDatabase firebaseDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    userName= findViewById(R.id.User);
    phone= findViewById(R.id.phone);
    password= findViewById(R.id.pass);
    signUp=findViewById(R.id.Login);

    Auth= FirebaseAuth.getInstance();
    firebaseDatabase= FirebaseDatabase.getInstance();


    signUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            send_sms();
        }
    });

}


public void send_sms()
{
    String p = phone.getText().toString();

    if(p.length()<=10)
    {
        Toast.makeText(getApplicationContext(),"Please enter the correct phone to receive the OTP",Toast.LENGTH_SHORT).show();
    }
    else if (p.isEmpty()) {

        Toast.makeText(this, "Please enter a valid phone number", Toast.LENGTH_SHORT).show();
    }
    else{

        startActivity(new Intent(this,otp_verify.class));
    }

    PhoneAuthProvider.getInstance().verifyPhoneNumber(p,60, TimeUnit.SECONDS,this,mcallback);

}


PhoneAuthProvider.OnVerificationStateChangedCallbacks mcallback= new PhoneAuthProvider.OnVerificationStateChangedCallbacks()
{
    @Override
    public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential)
    {

    }

    @Override
    public void onVerificationFailed(@NonNull FirebaseException e)
    {

    }

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

        verification_Code=s;
        Toast.makeText(getApplicationContext(),"OTP has been send successfully",Toast.LENGTH_SHORT).show();

    }
};

public void verifyNumber(EditText a)
{

        String b= a.getText().toString();

        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verification_Code, b);
        SignIn(credential);
    }

public void SignIn(PhoneAuthCredential credential)
{


    Auth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task)
        {
            if(task.isSuccessful()){

                reference= firebaseDatabase.getReference("Users").child("id");
                reference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


                        User user= dataSnapshot.child(phone.getText().toString()).getValue(User.class);

                        if(user.getPhone().equals(phone.getText().toString())){

                            Toast.makeText(getApplicationContext(),"You've Login Successfully",Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(MainActivity.this,userHome.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);
                        }

                        else{

                            FirebaseUser firebaseUser= Auth.getCurrentUser();
                            assert firebaseUser != null;
                            String userid = firebaseUser.getUid();
                            String name= userName.getText().toString();
                            String phon=phone.getText().toString();

                            reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
                            HashMap<String, String> hashMap= new HashMap<>();
                            hashMap.put("phoneNumber",phon);
                            hashMap.put("username",name);
                            hashMap.put("id",userid);
                            hashMap.put("imageURL","default");

                            reference.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if(task.isSuccessful()){
                                        Toast.makeText(getApplicationContext(),"You've Sign-Up Successfully",Toast.LENGTH_LONG).show();
                                        Intent intent = new Intent(MainActivity.this,userHome.class);
                                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                                        startActivity(intent);
                                    }else{
                                        Toast.makeText(MainActivity.this, "Please try again after sometime", Toast.LENGTH_SHORT).show();
                                    }
                                }


                            });
                        }


                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

            }else{
                Toast.makeText(MainActivity.this, "You have entered an incorrect OTP", Toast.LENGTH_SHORT).show();
            }



        }
    });
}

}

Ниже приведен код смежного класса из другого класса.Я создал этот класс, чтобы я мог открыть новое действие и отправить вызванный метод из другого класса, чтобы передать значение

public class otp_verify extends MainActivity {

EditText veri;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.otp_verify);

    veri= findViewById(R.id.verifyCode);

    DisplayMetrics dm= new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    int height = dm.heightPixels;
    int width = dm.widthPixels;

    getWindow().setLayout((int)(width*.8 ),(int)(height* .6 ));

    findViewById(R.id.otpProceed).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if(veri.getText().toString().isEmpty()){
                Toast.makeText(getApplicationContext(),"Please enter the OTP to proceed", Toast.LENGTH_SHORT).show();
            }
            else{

                new MainActivity().verifyNumber(veri);
            }
        }
    });
}

}

LOGCAT E / AndroidRuntime:ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.Aman.demoChat, PID: 12004 java.lang.IllegalArgumentException: невозможно создать PhoneAuthCredential без проверкиProof, sessionInfo, временного подтверждения или идентификатора регистрации.на com.google.android.gms.common.internal.Preconditions.checkArgument (неизвестный источник: 35) на com.google.firebase.auth.PhoneAuthCredential. (com.google.firebase: firebase-auth @@ 19.0.0: 7) на com.google.firebase.auth.PhoneAuthProvider.getCredential (com.google.firebase: firebase-auth @@ 19.0.0: 33) на com.Aman.demoChat.MainActivity.verifyNumber (MainActivity.java:120) на com.Aman.demoChat.otp_verify $ 1.onClick (otp_verify.java:42) на android.view.View.performClick (View.java:6669) на android.view.View.performClickInternal (View.java:6638) на android.view.View.access $ 3100 (View.java:789) на android.view.View $ PerformClick.run (View.java:26145) на android.os.Handler.handleCallback (Handler.java:873) на android.os.Handler.dispatchMessage (Handler.java:99) в android.os.Looper.loop (Looper.java:193) в android.app.ActivityThread.main (ActivityThread.java:6898) в java.lang.reflect.Method.invoke (Собственный метод) на com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:537) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) W / OPDiagnose: getService: OPDiagnoseService NULL D / OSTracker: Событие ОС: сбой I / Процесс: отправка сигнала.PID: 12004 SIG: 9 Процесс 12004 завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...