Вручную проверить firebase otp

я ищу способ узнать, какой код отправлен мне из аутентификации телефона firebase, потому что я хочу вручную проверить этот код. Теперь проблема в том, что firebase автоматически обнаруживает смс, и вызывается onVerificationCompleted(), но у меня есть кнопка, и я хотите вручную ввести код otp и проверить. Ниже приведен мой код. Любая помощь будет оценена. Спасибо.

PhoneAuthProvider.getInstance().verifyPhoneNumber(
                phonenumber,
                120,
                TimeUnit.SECONDS,
                this, new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
                Intent intent = new Intent(PhoneVerification.this, PictureActivity.class);
                Log.e("iamhere","Credential  IS"+phoneAuthCredential);
                intent.putExtra("email",email);
                intent.putExtra("phoneNumber",phonenumber);
                intent.putExtra("password",password);
                startActivity(intent);
                Toast.makeText(PhoneVerification.this, "Please fill the registration form", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onVerificationFailed(@NonNull FirebaseException e) {
                Toast.makeText(PhoneVerification.this, "Failed: "+e.getMessage(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                super.onCodeSent(s, forceResendingToken);
                Toast.makeText(PhoneVerification.this, "Check your phone for verification code", Toast.LENGTH_LONG).show();
                String mVerificationId = s;
            }
        });

person Hassan Tariq    schedule 07.12.2019    source источник
comment
Думаю, это единственный способ проверить. Но почему вы хотите проверить вручную   -  person Izhan Ali    schedule 08.12.2019
comment
Допустим, если я ввел номер мобильного телефона, и эта сим-карта находится в другом мобильном телефоне, в этом случае он не может автоматически проверить код, и мне нужно ввести этот код вручную.   -  person Hassan Tariq    schedule 08.12.2019
comment
У вас нет возможности проверить это вручную, введя код вручную?   -  person Izhan Ali    schedule 09.12.2019
comment
У меня нет строкового кода, который я могу проверить, равен ли он введенному коду   -  person Hassan Tariq    schedule 09.12.2019


Ответы (1)


В случае, если код не определяется автоматически, пользователь должен ввести его вручную через EditText.

    loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String txt = otpEditText.getText().toString().trim();
                if (txt.isEmpty() || txt.length() < 6) {
                    otp.setError("Enter valid code");

                    return;
                }

                //verifying the code entered manually
                if (isOnline()) {
                    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, txt);

                    signInWithPhoneAuthCredential(credential);
                } else {
                    showSnack(relativeLayout, "Unable to connect! Check internet connection");
                }
            }
        });



private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(Verification.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        //verification successfull do next task
                    } else {

                        //verification unsuccessful.. display an error message


                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            Toast.makeText(Verification.this, "Incorrect OTP entered", Toast.LENGTH_LONG).show();

                        } else {
                            Toast.makeText(Verification.this, "Unable to verify please retry later", Toast.LENGTH_LONG).show();


                        }


                    }
                }
            });
}

Вот автоматическая проверка:

 private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {

        //Getting the code sent by SMS
        String code = phoneAuthCredential.getSmsCode();

        //sometime the code is not detected automatically
        //in this case the code will be null
        //so user has to manually enter the code
        if (code != null) {
            otpEditText.setText(code);
            //verifying the code
            verifyVerificationCode(code);
        }
    }

    @Override
    public void onVerificationFailed(FirebaseException e) {
        FancyToast.makeText(Verification.this, e.getMessage(), FancyToast.LENGTH_LONG, FancyToast.CONFUSING, false).show();
    }

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

        //storing the verification id that is sent to the user
        mVerificationId = s;
    }
};

Дополнительные сведения см. в документации Firebase.

person Izhan Ali    schedule 09.12.2019
comment
Пожалуйста, исправьте отступы в коде - выглядит очень некрасиво. И документация, на которую вы ссылаетесь, возможно, является результатом поиска Google, который перенаправляет на неправильную ссылку. (EDIT: я помог исправить ссылку, но, пожалуйста, рассмотрите возможность вставки прямой ссылки.) - person Edric; 09.12.2019
comment
что, если пользователь уже вошел в систему или все еще регистрируется? - person moumenShobakey; 25.07.2020