Не проверяется OTP с пожарной базой Android

#android #firebase #firebase-authentication #one-time-password

#Android #firebase #firebase-аутентификация #одноразовый пароль

Вопрос:

Я создал приложение для чтения OTP и входа в систему с номером мобильного телефона, это похоже на то, что на первом экране пользователь должен ввести номер мобильного телефона и продолжить в то время, когда otp отправит пользователю, и он перейдет ко второму действию.здесь пользователь введет otp, этот otp перейдет к первому действию, в конце мое приложение не проверяет otp, пожалуйста, помогите мне

  public class LoginActivity extends AppCompatActivity {
EditText phonetextview;
String phone_number;
FirebaseAuth auth;
    private FirebaseAuth mAuth;
    private PhoneAuthProvider.ForceResendingToken mResendToken;
private  String verificationCode;
    private String mVerificationId;


PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;
private static final String TAG ="MainActivity";
String verificationId;
String code;
//    final PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    mAuth = FirebaseAuth.getInstance();


   //






    Intent intent = getIntent();
    final String otp = intent.getStringExtra("otp");

    Toast.makeText(getBaseContext(),otp,Toast.LENGTH_SHORT).show();







    //getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);


    mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onVerificationCompleted(PhoneAuthCredential credential) {
            Toast.makeText(getBaseContext(),"hoooooooooo",Toast.LENGTH_SHORT).show();

            signInWithPhoneAuthCredential(credential);



        }

        private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {


            System.exit(0);

        }


        @Override
        public void onVerificationFailed(FirebaseException e) {
            {
                e.printStackTrace();

                Toast toast = Toast.makeText(getApplicationContext(), (CharSequence) e,
                        Toast.LENGTH_SHORT);
                toast.show();

            }

        }


        @Override
        public void onCodeSent(String verificationId,
                               PhoneAuthProvider.ForceResendingToken token) {



            Log.d(TAG, "onCodeSent:"   verificationId);

            mVerificationId = verificationId;
            mResendToken = token;

            Intent i = new Intent(getApplicationContext(),Otp.class);
            startActivity(i);


           // View v = (View) findViewById(R.id.phonetextview);
            //((ViewManager)v.getParent()).removeView(v);
            //View vv = (View) findViewById(R.id.cardView);
            //((ViewManager)vv.getParent()).removeView(vv);







        }



    };

    CardView card_view = findViewById(R.id.cardView);
    card_view.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {






            phonetextview =findViewById(R.id.phonetextview);
            phone_number = PhoneNumberUtils.formatNumber(phonetextview.getText().toString());

            send();



            Toast toast = Toast.makeText(getApplicationContext(), phone_number,
                    Toast.LENGTH_SHORT);
            toast.show();



        }


    });

}

private void send() {

    PhoneAuthProvider.getInstance().verifyPhoneNumber(
           " 91" phone_number,        // Phone number to verify
            60,                 // Timeout duration
            TimeUnit.SECONDS,   // Unit of timeout
            this,               // Activity (for callback binding)
            mCallbacks);             // ForceResendingToken from callbacks


}
    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithCredential:success");
                            Toast.makeText(getBaseContext(),"hoooooooooo",Toast.LENGTH_SHORT).show();

                            FirebaseUser user = task.getResult().getUser();
                            // [START_EXCLUDE]

                            // [END_EXCLUDE]
                        } else {
                            // Sign in failed, display a message and update the UI
                            Log.w(TAG, "signInWithCredential:failure", task.getException());
                            if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                                // The verification code entered was invalid
                                // [START_EXCLUDE silent]
                                //mVerificationField.setError("Invalid code.");
                                // [END_EXCLUDE]
                            }
                            // [START_EXCLUDE silent]
                            // Update UI
                          //  updateUI(STATE_SIGNIN_FAILED);
                            // [END_EXCLUDE]
                        }
                    }
                });
    }


}
  

и это моя операция по вводу otp

  public class Otp extends AppCompatActivity {

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





    final Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {



            EditText fd = (EditText) findViewById(R.id.et1);
            String value= fd.getText().toString();
  //        int finalValue=Integer.parseInt(value);

            final EditText sd = (EditText) findViewById(R.id.et2);
            String value1= sd.getText().toString();
            // int finalValue1=Integer.parseInt(value1);

            EditText td = (EditText) findViewById(R.id.et3);
            String value2= td.getText().toString();
            // int finalValue2=Integer.parseInt(value2);

            EditText fod = (EditText) findViewById(R.id.et4);
            String value3= fod.getText().toString();
            //int finalValue3=Integer.parseInt(value3);

            EditText fid = (EditText) findViewById(R.id.et5);
            String value4= fid.getText().toString();
            //int finalValue4=Integer.parseInt(value4);

            EditText sid = (EditText) findViewById(R.id.et6);
            String value5= sid.getText().toString();
            //int finalValue5=Integer.parseInt(value5);




            final String otp = value   value1 value2 value3 value4 value5;



            Intent intent = new Intent(v.getContext(), LoginActivity.class);
            intent.putExtra("otp", otp);
            startActivity(intent);


        finish();





        }
    });


}
}
  

Ответ №1:

Если ваша проблема не в получении OTP, то решение заключается в добавлении отпечатка SHA-1 в ваш проект Firebase. Это обычная проблема для многих, кто не получает OTP от Firebase

Комментарии:

1. я получаю otp, но он не проверяется, без отпечатка пальца SHA-1 otp не придет, у меня ошибка в моем коде

2. Попробуйте этот код по ссылке